【GDOUCTF 2023】真男人下120层
收获
- 使用 
ctypes库生成伪随机数 
(2023年4月16日)【GDOUCTF 2023】真男人下120层
思路
首先查看文件:
用 IDA 查看代码逻辑:
输出信息有点杂乱,运行程序看一下:
这样就看得很清楚了,结合代码,程序大意如下:
- 首先根据一些数据生成伪随机数种子
 - 让我们输入满足 
if ( rand() % 4 + 1 != v6 )条件的v6 - 总共有 120 轮这样的校验,如果全部正确就执行 
cat_flag()函数 
cat_flag() 函数如下:
所以接下来思路就很清晰了,按照伪随机数生成的方法构造 exp 重复输入 120 次即可
脚本
from pwn import *
from ctypes import *  # 导入ctypes库使Python可以执行C语言的函数
context(os='linux', arch='amd64', log_level='debug')  # 打印调试信息
content = 0  # 本地Pwn通之后,将content改成0,Pwn远程端口
if content == 1:
    io = process("/home/wyy/桌面/PWN/真男人下120层/bin")  # 程序在Linux的路径
else:
    io = remote("node4.anna.nssctf.cn", 28625)  # 题目的远程端口,注意是remote
def srand():
    lib = cdll.LoadLibrary("/lib/x86_64-linux-gnu/libc.so.6")  # C运行库
    v3 = lib.time(0)
    lib.srand(v3)
    v4 = lib.rand()
    lib.srand(v4 % 3 - 1522127470)
    for i in range(120):
        number = str(lib.rand() % 4 + 1)  # 执行随机函数
        io.recvuntil("\n\n")
        io.sendline(number)
srand()
io.interactive()  # 接收回显结果
NSSCTF{bc2875e3-3232-4f70-8b78-006e8527f928}
 评论














