12-%00截断(Get型)

12-%00截断(Get型)

%00​截断利用的是PHP旧版本在处理文件名时的一个漏洞,可以欺骗服务器,将本不允许上传的*.php​文件保存为合法的*.jpg文件,从而获得WebShell。

📝 漏洞原理:都是 null 字符惹的祸

这个漏洞的核心是ASCII码值为0的null​字符(%00​或0x00​)。在C语言等底层语言中,这个字符被当作字符串的​结束标志

PHP的部分文件处理函数(如move_uploaded_file()​)底层是用C语言实现的。当它们在构造文件路径时,一旦遇到0x00​,就会认为字符串到此结束,并​无情地丢弃其后的所有内容。攻击者正是利用这一点,让服务器在保存文件时"断章取义"。

🔎 源码分析:漏洞是如何产生的

第十二关的源码是理解问题的关键:

复制代码
$img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

源码中的关键点如下:

  • 白名单验证 :程序会检查上传文件的后缀名(如.jpg, .png, .gif)是否在白名单内。
  • 路径可控 :文件最终保存的路径$img_path中, $_POST['save_path']部分完全由用户通过POST请求控制
  • 拼接缺陷 :程序直接将用户可控的$_POST['save_path']与服务器生成的文件名进行了拼接。

因此,攻击的核心思路就是:控制$_POST['save_path']​参数,在其中注入null​字符,从而"截断"掉后面服务器自动添加的、合法的.jpg后缀。

🛡️ 利用条件:复现漏洞的前提

要成功复现此漏洞,需要满足以下两个关键条件,这也是在实际渗透测试中判断是否存在此漏洞的重要依据:

  1. PHP版本低于5.3.4:该漏洞在高版本中已被修复。
  2. magic_quotes_gpc 配置为 Off :若此选项开启,会转义%00这类特殊字符,导致注入失败。
  3. (补充)取决于底层函数实现:此漏洞并非所有PHP文件操作函数都存在,关键在于该函数是否基于C语言的字符串处理逻辑。

相关推荐
Chockmans6 小时前
春秋云境CVE-2022-32992(文件上传和sql注入)保姆级教学
数据库·sql·安全·网络安全·网络攻击模型·春秋云境·cve-2022-32992
m0_738120726 小时前
渗透测试基础知识——从零认识JWT(JSON Web Token)身份令牌
服务器·前端·安全·web安全·网络安全·json
2601_956002816 小时前
【完美解决】Telega纸飞机收不到验证码?短信收费弹窗提示?2026最新老号/新号全网最全复活教程(转存后看教程(看到请立即转存 资源随时失效)手机版通用
网络安全·友善·爱国·诚信
电子科技圈7 小时前
大理5G研究院加速建设面向南亚东南亚新一代信息技术产业化合作新通道
人工智能·物联网·5g·网络安全·信息与通信
深邃-7 小时前
【Web安全】-企业资产信息收集(1):信息收集介绍,域名信息收集,主域名查询,ICP备案号查询,备案实体查询,工业和信息化部政务服务平台查询,怎样收集
安全·web安全·网络安全·安全威胁分析·政务·信息收集
X7x57 小时前
数据防泄漏(DLP):企业数字资产的“隐形守护者“
网络安全·网络攻击模型·安全威胁分析·安全架构·dlp
一个在高校打杂的1 天前
honeypot之opencanary(轻量化蜜罐)
linux·网络安全·网络攻击模型·安全威胁分析·策略模式
一个脚本boy1 天前
攻防世界misc简单难度1-20题详细解法
网络安全
谪星·阿凯1 天前
Linux提权全攻略博客
linux·运维·服务器·网络安全