某大学信息安全竞赛——shellcode1 绕过strlen检查,绕过沙箱检查,执行orw shellcode拿到flag

题目自取:

链接:https://pan.baidu.com/s/1HrMqh-lX-mkfueVeLzoEJg 
提取码:oyel

介绍下这可恶的沙箱机制

这是一道非常让人蛋疼的题目,之前我只听说过沙箱,但是并没有自己实际接触过沙箱这个保护机制,大概作用就是开了沙箱之后,会禁用掉某些函数,一旦我们使用了这个函数,比如我们在栈溢出构造ROP,或者写入shellcode执行时,只要含有这些函数,这个程序就会崩掉,这题目就开了沙箱。

之前我有个疑问,这里明明没有exevce函数的引用,为什么我用pwntools工具写的 shellcode = asm(shellcraft.sh())或者网上抄来的execve(binsh)都不能打通呢??

这非常让人恼火,难道seccomp-tools错了???

后来问了学长才知道,原来是因为seccomp-tools这玩意它会显出所有可以用的,但是貌似不能用的不会完全显现,所以我们这里可以看到,这里只允许了orw的使用,其实很明显了,就是要写orw的shellcode去把flag拿出来。

反编译看看

ok,我们开始,首先放到IDA看看咋回事

 沙箱之前我们已经分析过了,这里就不细说了,就是主函数的思路也非常简单,就是拿一块内存buf,然后让你输入shellcode,然后判断长度,如果小于等于5字节,就执行shellcode,否则报错gameover。

显然5字节的shellcode玩个毛,几个基本的汇编指令就已经不止5字节了,很明显我们要绕过这个strlen检测,然后我在网上冲浪的时候发现了一个好文,这里贴一下

我想过绕过strlen函数,但是我都是在shellcode前面直接加\x00\x00的,发现这是行不通的,就很淦也让我产生疑问,这究竟是为什么呢??

我们来调试下
这是填入\x00\x00的情况
 

很明显它call了个寂寞,里面没指令,所以报错了
但是如果我们换成了 asm('xor eax,0x4141' 的话,我们可以看看啥情况。

 可以看到,这个414135即为指令xor eax,0x4141,这就做到了两点,一是绕过了strlen检测,二是call rdx的时候是有指令的,不会导致程序崩溃.

那由于沙箱把我们的execve函数禁用了,所以我们用pwntools生成的 asm(shellcraft.sh())或者网上抄来的execve(binsh)都不能打通,因为它们本质上都是调用exevce函数。

所以我们只能用orw shellcode去拿flag了,这种shellcode虽然不能拿到shell,但是可以打开flag文件,然后输出里面的内容,具体咋写这种shellcode呢?我们还是可以利用pwntools自带的功能,这里推荐一篇博客(3条消息) orw_shellcode_模板_orw的shellcode_huzai9527的博客-CSDN博客

#pwntools
shellcode = ''
shellcode += shellcraft.open('./flag')
shellcode += shellcraft.read(3,'rsp',0x100)
shellcode += shellcraft.write(1,'rsp',0x100)
payload1 = asm(shellcode)

 但是注意注意!!!这里不是'esp',而是‘rsp’,而且read的系统调用号是3,
修改一下就可以拿到shell啦

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值