CTF,第二题
https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5052&page=1
有了之前第一题的基础,这个就非常容易了,事实证明,第二题也确实比第一题难度低,直接下载文件,看代码
主要看这三段就够了,第一段是当前函数的唯一一个函数体,功能是输出提示接受输入,其实 read 0 ,就是从标准输入流接受输入
它read 了16个字节,然后判断了一个变量,如果值符合要求,那么久调用下面的函数,下面的函数输出flag(读一个文件)
很简单,那么我只需要看一下那个输入的缓冲区和那个普通变量就好了。
全局变量也不怕,内存分布很巧,等待输入的变量和后需要判断的变量挨着,
结果导致,如果我可以精心构造一个字符串的话,就有可能在输入这个字符串之后,修改了邻接的第二个变量,最后让if 判断符合条件,
if的条件是要求 判断变量处内存需要为 == “aaun”
根据内存分布,发现,判断变量前,到上一个变量即接收输入的字符串起始地址,差距4个字节,判断变量长度又是4个字节,
所以我们精心构造的字符串应该是这样的:????aaun。
后面什么样,就随它去吧,我比较习惯把后面填满,即再补8字节,但是其实不填也没问题,
代码如下
1 from pwn import * 2 3 a = remote('124.126.19.106', 39129) 4 r = a.recvuntil('bof\n') 5 print(r) 6 7 str = "a" * 4 + "aaun" 8 print(str) 9 a.send(str); 10 11 a.interactive()
执行效果
有了第一次的经验,这次就知道怎么玩了,挺容易的,没难度,
一共就用了五分多,之间还去了倒了一杯咖啡,之后又去了一趟WC。
循序渐进吧。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」