工具安装及使用

libc-database

下载&安装

下载libc-database

1
git clone https://github.com/niklasb/libc-database.git

下载各种版本的libc,存放在db目录下

1
2
cd libc-database
./get

使用

1
2
./find printf 670 puts ca0
ubuntu-xenial-i386-libc6 (id libc6_2.23-0ubuntu10_i386)

这里670是要查询的libc中printf地址的后三位(十六进制),同理ca0是puts函数地址的后三位。

seccomp-tools

安装

1
gem install seccomp-tools

使用

目前只用到dump,查看沙箱保护允许使用的操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ seccomp-tools dump ./rswc
line CODE JT JF K
=================================
0000: 0x20 0x00 0x00 0x00000004 A = arch
0001: 0x15 0x01 0x00 0xc000003e if (A == ARCH_X86_64) goto 0003
0002: 0x06 0x00 0x00 0x00000000 return KILL
0003: 0x20 0x00 0x00 0x00000000 A = sys_number
0004: 0x15 0x00 0x01 0x00000002 if (A != open) goto 0006
0005: 0x06 0x00 0x00 0x7fff0000 return ALLOW
0006: 0x15 0x00 0x01 0x00000000 if (A != read) goto 0008
0007: 0x06 0x00 0x00 0x7fff0000 return ALLOW
0008: 0x15 0x00 0x01 0x00000001 if (A != write) goto 0010
0009: 0x06 0x00 0x00 0x7fff0000 return ALLOW
0010: 0x15 0x00 0x01 0x0000003c if (A != exit) goto 0012
0011: 0x06 0x00 0x00 0x7fff0000 return ALLOW
0012: 0x15 0x00 0x01 0x000000e7 if (A != exit_group) goto 0014
0013: 0x06 0x00 0x00 0x7fff0000 return ALLOW
0014: 0x06 0x00 0x00 0x00000000 return KILL

其他具体使用方法参考撰写工具的大佬:https://github.com/david942j/seccomp-tools

one_gadget

安装

  1. 安装ruby环境和管理工具

    1
    2
    sudo apt-get install ruby
    sudo apt-get install gem
  2. 安装one_gadget

    1
    sudo gem install one_gadget

使用

直接使用”one_gadget 目标文件”在目标文件里查找system(“/bin/sh”)。找到之后对以下gadget偏移一一进行尝试。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ one_gadget /lib/x86_64-linux-gnu/libc.so.6
0x45216 execve("/bin/sh", rsp+0x30, environ)
constraints:
rax == NULL

0x4526a execve("/bin/sh", rsp+0x30, environ)
constraints:
[rsp+0x30] == NULL

0xf02a4 execve("/bin/sh", rsp+0x50, environ)
constraints:
[rsp+0x50] == NULL

0xf1147 execve("/bin/sh", rsp+0x70, environ)
constraints:
[rsp+0x70] == NULL