结合上述通过“幸存者”逐渐恢复一些指令的方法,以及echo可以写入任意多字节的特性,我们可以重新构建出linux的工具系统,并可以通过curl或者wget直接获得我们想要的二进制文件。首先,参照echoed by others,获取busybox。Busybox是嵌入式Linux的瑞士军刀,内嵌wget,dd,tar等许多工具。Eusebeîa详细介绍了如何获得一个busybox的escaped版本,我在这里就不多做赘述了。
但是,还有一个问题。
即使我们echo了整个二进制文件需要的所有字节,这些二进制文件仍无法执行。没法启动busybox!针对这个问题,早期的解决方法是找到一些可执行的程序,然后用echo覆盖它们。我们对/usr和/bin下的文件进行了诸如此类的改造,但这确实稍显复杂。
可以利用shell通配符和bash筛选出带有可执行位组的文件,记住要把目录排除在外。
1
|
executable () { if [[ ( ! -d $1 ) && -x $1 ]] ; then echo "$1" ; fi }
|
找到了可执行文件!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
root@rmrf:/
/proc/1107/exe
/proc/1136/exe
/proc/1149/exe
/proc/1179/exe
/proc/1215/exe
/proc/1217/exe
/proc/1220/exe
/proc/1221/exe
/proc/1223/exe
/proc/1248/exe
/proc/1277/exe
/proc/1468/exe
/proc/1478/exe
/proc/1625/exe
/proc/1644/exe
/proc/1/exe
/proc/374/exe
/proc/378/exe
/proc/471/exe
/proc/616/exe
/proc/657/exe
/proc/self/exe
|
太好了!但是别急,这些只是软链接到可执行文件的链接文件,原文件在磁盘上已经不存在了。那么现在我们要重新改写executable(),排除这些软链接。
噩耗,什么输出也没有。或许可以利用内核层面的东西,毕竟,我们可以使用Magic Sysrq组合键重启busybox。
我们现在已经骑虎难下了,周五的时候,我会继续研究下去。感谢关注,如果您发现了什么获取可执行位组的好方法,请及时知会我。
UPDATE: Reddi用户throw_away5046提出了一种解决方法:a full solution to this。
获取一个可信任的、适用于本机架构的box
1
2
3
4
5
6
7
8
9
10
11
12
13
|
$ mkdir $(xxd -p -l 16 /dev/urandom )
$ cd $_
$ apt-get download busybox-static
$ dpkg -x *.deb .
$ alias encode= '{ tr -d \\n | sed "s#\\(..\\)#\\\\x\\1#g"; echo; }'
$ alias upload= '{ xxd -p | encode | nc -q0 -lp 5050; }'
$ upload < bin /busybox
|
|