pwn1
程序静态链接,真恶心,呕。
首先分析程序流
main
catflag
maby is good
give me
该程序,第一个模块的函数读取了flag,写入bss段。第二个模块的函数又将bss段里的flag写入了堆里,并且将v1里的数据写入bss进行覆盖。第三个模块通过index定位,读取堆里的flag(读取1个字节)放入v2,mmap分配了一个带有执行权限的内存空间,而且可以往里面读3个字节,随后把这个mmap分配的内 存地址赋给一个函数指针,并且执行,在这里把它称为函数v3。
红箭头指的就是关键地址,我们可以直接分析该模块的汇编。
1 | mov eax, [ebp+var_14] //这里就是mov eax, v3 |
那么自然想到往里写入code,使得之后的赋值mov [ebp+var_10], eax (就是对v4赋值)中的eax可控。使得最后的比对可控,是我们控制的v4与flag中的数据进行比对,从而达到爆破的目的
贴上exp:
1 | #*!/usr/bin/python* |
或者也可以利用最后的输入,提前写好code(xchg ecx, esp)进行rop
exp:
1 | #!/usr/bin/python2 |