【pwnable.kr】 asm seccomp sadbox & 64位shellcode 读 flag

image-20181122132244133

题目信息

nc之后查看信息如下。根据readme提示,本关是要求登陆服务器后,nc 9026端口连接asm程序来读flag。flag文件名很长。

image-20181122131906999

看了源码发现程序做了如下操作。mmap了一块内存读取shellcode并执行,开启了seccomp沙箱[1],限制只能使用open read write exit exit_group系统调用。因此本关就是利用这些系统调用来写64位下读flag的shellcode。

可以通过cat /proc/self/status |grep -i seccomp查看当前系统是否打开了seccomp沙箱。

image-20181122131821074

exp

读取flag的shellcode思路如下:

image-20181122132001925

x64的部分系统调用参考[2]。本来自己手写汇编,push 字符串到栈上,再调用pwntools的asm生成机器码。遇到了两个问题:

  • 第一个问题:即使设置了arch为amd64,pwntools asm(push number),number如果超过4字节会报错。用mov再push解决 。
  • 第二个问题:64位下调用系统调用需要用syscall而不是int 0x80。

部分exploit:

image-20181122132047995

image-20181122131444774

PS:这题之前没有调试,间隔了很久才写了wp,感兴趣的可以去做做pwnable.tw上的orw,一个是32位,一个64位,利用思路一样。

此外,以后代码或者输出准备尽量用图片了,虽然占用一点空间,但是读起来舒服一点。

参考

  1. seccomp https://blog.csdn.net/mashimiao/article/details/73607485
  2. syscall x64 http://www.csyssec.org/20161231/systemcall64list/
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值