【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}
评论