0%

tamuctf_pwn

pwn1

​ 看一下程序基本情况如下,动态链接的32位程序,只有canary保护没有打开。

image-20220407150427052

image-20220407150257274

​ IDA看一下程序,可以看到明显gets函数处存在栈溢出,并且当v5等于某个值的时候,就执行print_flag函数输出flag。右键那个值->hexadecimal,可以看到该值十六进制为0xDEA110CB,也就是当v5为该值,就会输出flag,所以只需要栈溢出覆盖v5的值为0xDEA110CB,不需要自己找system('/bin/sh')

image-20220407151610311

​ 计算一下偏移变量s到变量v5的偏移距离,由IDA得s=ebp-3Bh、v5=ebp-10h,两者偏移距离为2Bh

image-20220407152707564

payload

image-20220407153452051

因为服务器啥的已经没开了,所以只能纸上谈兵hh,但是这道题确实也就比较简单。

pwn2

​ 先看一下该文件的详细信息,发现依旧只有canary没打开。是动态链接的32位程序。

image-20220407153944825

IDA看一下程序,可以看到gets函数存在明显的栈溢出漏洞,字符串和函数中都没有看到systembin/sh的身影,并且下面有一个函数select_func

image-20220407155104364

看一下代码逻辑,发现拷贝了0x1F个字符到目标字符串,如果目标字符串等于one时候,将one赋值给v3,然后调用v3()

image-20220407155317532

看函数列表,存在one()``two()函数以及print_flag(),函数地址分别为0x00000754,0x000006AD,0x000006D8。

image-20220407160314057

image-20220407162416467

image-20220407162438986

我们现在需要做的就是跳转到print_flag函数,gets函数可以赋值31个字节给dest变量,dest与v3之间相差30个字节,可以溢出一个字节,v3初始值为two,two又与print_flag函数相差一个字节,所以溢出的一个字节就可以将v3的初始值修改为print_flag函数地址。

image-20220407163600996

payload

image-20220407164012235

pwn3

​ 惯例看一下程序情况,发现只开了RELRO以及PIE,并且有RWX段。推测可能是自己写shellcode的题目。

image-20220407164138366

​ IDA打开看一下,主要点进echo函数看一下,发现存在gets函数栈溢出漏洞(注意题目本身就泄露出了s的地址)

image-20220407164648542

image-20220407164725968

​ s的地址为ebp-12Ah,画个图看一下。s与EBP之间相差298个字节,s规定的数据为294字节大小,所以溢出够298+4个字节后将获取到的s地址覆盖掉函数返回地址、使程序跳转至s处执行shellcode。

image-20220407171136775

payload

image-20220407172044765

pwn4

​ 发现只开启了NX保护

image-20220407172747624

​ IDA查看字符串和函数,可以看到有‘/bin/sh’和system函数,/bin/sh字符串,地址为0x0804A034

image-20220407190256774

image-20220407190433644

​ 主函数循环执行laas函数,该函数中可以看到gets函数存在明显栈溢出漏洞,如果在s字符串中没有找到ASCII码为47的字符/,那么就传入s参数执行run_cmd函数

image-20220407190659867

image-20220407190733634

​ 在run_cmd()函数未进行任何过滤直接调用system()函数执行系统命令(虽然可以直接sendline('/bin/cat flag.txt'),但是这道题还是走一下常规pwn思路):

image-20220407190901388

看下call system()的地址,为0x080485AD,字符串s地址为ebp-21h:

image-20220407191305838

payload

image-20220407193706392

还有一种写法,下面就是利用system的地址,而不是cal了system的地址

image-20220407193829235

pwn5

​ 查看程序基本情况,发现是静态链接的,那就和libc无关了,并且只开了NX

image-20220407194026908

​ IDA发现其实逻辑啥的和pwn4一样,不过下图圈起来这里变成了7(这里也可以直接用;$0,还有一种利用vi命令及:shell的骚姿势,输入;vi再输入:shell即可执行shell)

image-20220407194549935

​ 也可以找到‘/bin/sh’字符串和system函数。地址分别为0x080BC140和0x0804EE30,s地址为ebp-0Dh

image-20220407194754387

image-20220407194825643

看到别人写的是有exit函数地址,但是感觉替换成其他四个字节的数据也可以(实践了一下确实可以)

image-20220407201448443

参考链接:TAMUCTF-PWN