bugku-pwn合集


  • 瑞士军刀
  • overflow
  • read_note
  • repeater
  • canary
  • printf
  • overflow2

瑞士军刀

nc打开直接连接,cat flag即可
pwn1.png


overflow

打开看main主函数,发现一个输入,有两个输出。
memset函数是在一段内存中填充某个给定的值,在这里是填充s。把48个0填充到变量s中。后面的read又读了100个长度,就可能会导致溢出
pwn2-1.png

return时,执行系统命令cat flag。利用read函数进行栈溢出执行get_shell函数,把memset的s和rbp寄存器的值给覆盖掉,在写入get_shell函数的地址就可以了。
pwn2-2.png

gdb运行,pattern_create 100创建完之后直接run运行。
pwn2-4.png

pattern_offset寻找他的偏移量,顺便i r查看寄存器
ascii编码语义下的A,是一个字节,0x61
16进制语义下的0xAA是一个字节。
所以这边的16/2=8+memset时候的30即可。
pwn2-5.png

py脚本。payload构造0x30+0x8位的填充,在加上p64(指定程序64位的)
pwn2-3.png