返回介绍

4.6 one-gadget RCE

发布于 2022-02-28 21:36:08 字数 3673 浏览 871 评论 0 收藏 0

one-gadget RCE 是在 libc 中存在的一些执行 execve('/bin/sh', NULL, NULL) 的片段。当我们知道 libc 的版本,并且可以通过信息泄露得到 libc 的基址,则可以通过控制 EIP 执行该 gadget 来获得 shell。这个方法的优点是不需要控制调用函数的参数,在 64 位程序中,也就是 rdi、rsi、rdx 等寄存器的值。

可以使用工具 one_gadget 很方便地查找 one-gadget:

$ sudo gem install one_gadget
$ file /usr/lib/libc-2.26.so
/usr/lib/libc-2.26.so: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /usr/lib/ld-linux-x86-64.so.2, BuildID[sha1]=466056d0995495995ad1a1fe696c9dc7fb3d421b, for GNU/Linux 3.2.0, not stripped
$ one_gadget -f /usr/lib/libc-2.26.so
0x41e92 execve("/bin/sh", rsp+0x30, environ)
constraints:
  rax == NULL

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

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

经过验证,第一个似乎不可用,另外两个如下,通常,我们都使用 do_system 函数里的那个:

[0x00021080]> pd 7 @ 0x41ee7
|           0x00041ee7      488b056aff36.  mov rax, qword [0x003b1e58] ; [0x3b1e58:8]=0
|           0x00041eee      488d3d409313.  lea rdi, str._bin_sh        ; 0x17b235 ; "/bin/sh"
|           0x00041ef5      c70521253700.  mov dword [obj.lock_4], 0   ; [0x3b4420:4]=0
|           0x00041eff      c7051b253700.  mov dword [obj.sa_refcntr], 0 ; [0x3b4424:4]=0
|           0x00041f09      488d742430     lea rsi, [local_30h]        ; sym.lm_cache ; 0x30
|           0x00041f0e      488b10         mov rdx, qword [rax]
|           0x00041f11      67e8c9260800   call sym.execve
[0x00021080]> pd 5 @ 0xe2c20
|           0x000e2c20      488b0531f22c.  mov rax, qword [0x003b1e58] ; [0x3b1e58:8]=0
|           0x000e2c27      488d742460     lea rsi, [local_60h]        ; sym.buffer_14 ; 0x60 ; "0\x02"
|           0x000e2c2c      488d3d028609.  lea rdi, str._bin_sh        ; 0x17b235 ; "/bin/sh"
|           0x000e2c33      488b10         mov rdx, qword [rax]
|           0x000e2c36      67e8a419feff   call sym.execve

当然,你也可以通过 build ID 来查找对应 libc 里的 one-gadget。

$ one-gadget -b 466056d0995495995ad1a1fe696c9dc7fb3d421b

参考资料

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文