BUUCTF-jarvisoj_fm

例行检查,32位,开启了canary和nx保护

运行一下程序

一眼格式化字符串漏洞

只要把x改为4,它就执行system(/bin/sh)。现在x为3。所以就要利用格式化字符串漏洞的任意地址读写,x_addr%[i]$n
1.找到x的地址

2.确定i的值
利用 "AAAA %08x %08x %8x %08x %08x %08x %08x………… ",这样的字符串来找到我们输入的参数在函数栈上的位置,然后往这个位置进行写入修改的数值

借用一位博主的图片,感觉解释的很清楚,不懂如何泄露的哥们可以看看
附上他博客的链接https://blog.csdn.net/weixin_44309300/article/details/115412670?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_paycolumn_v3&utm_relevant_index=2
0x41414141就是输入参数的位置,可以知道是第11个参数,%11$ 定位到这个位置,然后%n往这个位置写入4,考虑到前面传入地址正好是4位,不需要添a来补齐位数就可以直接利用,将x参数的地址的值改成了4,获取了shell

posted @ 2022-03-26 10:00  -ro0t  阅读(79)  评论(0)    收藏  举报