| 序号 | 文件 | 行号 | 等级 | 问题 |
|---|
代码审计,说白了就是把源码认真读一遍,找出可能被攻击者利用的地方。人工通读几百个文件不现实,这一页把常见的高风险写法整理成检查项,把 PHP 文件或整站压缩包放进来,几秒就能得到一张「哪个文件、第几行、像什么问题」的清单,你先看这几行就够了。
它看的不是关键词,而是这一行在做什么。单独出现一个 system(),很可能只是运维脚本;但「参数来自用户输入」和「交给 system 执行」出现在同一行,基本就是命令执行漏洞。所以结果里会告诉你「文件包含函数里出现了变量」这类具体判断,而不是丢给你一个函数名。
结果分三档,方便你先处理要紧的:高危是能直接执行代码、执行系统命令、读写任意文件的写法;可疑是注入、变量覆盖、越权读取这类要看上下文才能定的写法;提示是 phpinfo() 这种不致命、但上线前建议删掉的写法。
代码全程只在你的浏览器里被当作文本读取,ZIP 也在本地解开,不上传、不执行,源码不会离开你的电脑。
| 检查项 | 说明 |
|---|---|
| 文件包含 | include / require 后面接了变量,可能被塞进任意文件来执行 |
| 动态执行代码 | eval、assert、create_function 里出现变量,直接给了一个代码执行入口 |
| 命令执行 | system / exec / shell_exec / popen 以及反引号里拼了变量,等于把服务器控制权交出去 |
| 正则执行 | preg_replace 用了 /e 模式又带变量,替换结果会被当成代码执行 |
| 回调执行 | call_user_func、array_map、usort 这类函数的回调参数是变量,可以挂上任意函数 |
| 变量函数(后门) | 变量名直接当函数跑,参数又取自提交数据,最典型的一句话木马 |
| 文件上传 | move_uploaded_file 出现,要确认类型和落地目录都受控 |
| 反序列化 | unserialize 处理外部数据,可能被构造对象链走通到执行代码 |
| 写文件落地 | 用提交上来的数据直接写文件,典型的「传个参数就给自己留个后门」 |
| 读取与列目录 | 读文件、列目录的函数里,路径来自变量,可能读到配置和密钥 |
| 文件操作 | 删除、改名、改权限、建目录里路径来自变量,可能被毁站或腾出可写目录 |
| 变量覆盖 | parse_str、extract、$$ 可变变量,能把已有变量悄悄改掉 |
| 请求来源可伪造 | 用 HTTP_CLIENT_IP、X-Forwarded-For、Referer 判断来源,这些值客户端随便写 |
| 转义被绕过 | urldecode、stripslashes 处理外部数据,会把已有的转义去掉 |
| SQL 注入 | select / delete / insert / update 和查询接口里直接拼变量,没有占位符 |
| 输出型 XSS | echo、print_r、var_dump、<?= 直接输出提交内容,脚本会在访客浏览器里跑 |
| 任意跳转 | header 或页面跳转拼了外部输入,会被用来钓鱼或污染响应头 |
| SSRF | curl 请求的地址来自变量,能让服务器替攻击者去访问内网 |
| XXE | 解析 XML 时开着外部实体,可读文件、可顺手探内网 |
| 弱哈希与弱随机 | 密码用 md5 / sha1,令牌用 rand / uniqid / 时间戳,都太好猜 |
| 硬编码口令 | 密码、密钥、令牌直接写在代码里,源码一泄露就全线失守 |
| 上传类型只看 MIME | 用 $_FILES 里的 type 判断类型,这个值浏览器可以随便伪造 |
| 危险配置 | 线上打开错误显示,或者整体关掉报错,两种都容易出事 |
| 环境变量与扩展 | putenv 带变量、dl 动态加载扩展,都是绕过限制的常用手法 |
| 信息泄露 | phpinfo、把 $_SERVER 之类直接打出来 |
| 混淆与后门痕迹 | @ 抑制报错、超长单行、大段十六进制、超长 Base64、chr 拼接、多级解码链 |
很可能是。缓存、模板编译、图片处理这些正常功能也会用到 eval、file_put_contents 这类函数,工具只能看出「这里出现了这种写法」,判断不了你的意图。所以结果里写的是「可能存在」,看的时候重点看两点:参数是不是来自用户提交的数据、这个文件本来该不该有这种操作。
不会。文件只被当作文本读进来,比对完就结束,没有任何运行环境,所以既不会触发后门,也不会连外网。代价是它只能看「代码长什么样」,看不了「跑起来干了什么」。
单个文件支持 .php、.phtml、.inc 以及 php3–php8;也可以直接把整个项目的 ZIP 丢进来,压缩包里这些后缀的文件会逐个审计,一次最多 400 个、解开后总量 20 MB 以内。
工具是按「危险写法」找的,代码如果经过自定义加密、把关键字符串拆开拼接、或者把逻辑拆到好几个文件里传参,静态检查就看不出完整链路。它适合做第一遍粗筛,真正的逻辑漏洞、越权、业务设计缺陷还得人工读。
Windows 打的压缩包常用 GBK 存文件名,而标准建议用 UTF-8。页面先按 UTF-8 读,读不出正常字符会按 GBK 再读一次,大部分中文名能正常显示;万一还是乱码,不影响文件内容的审计。
不建议。它给的是线索和位置,最终是不是漏洞要看上下文:数据从哪来、有没有过滤、能不能真的被外部触发。给同事或客户出报告时,最好每条都附上你自己的判断。
这个工具完全在你的浏览器里运行:你上传的文件、粘贴的代码,都不会离开你的电脑,也不会传到任何服务器。
放心用,源码只在你自己的电脑上转一圈。
用手机相机扫描二维码,即可继续使用该工具
遇到问题或有好建议?告诉我们。