Web靶场学习笔记(PHP常用函数详解 )

发布时间:2026/8/1 16:34:21
Web靶场学习笔记(PHP常用函数详解 ) 一、前言本次通过 Pikachu、XSS-Labs、Upload-Labs 靶场练习总结 Web 安全中最常用、最容易出漏洞的 PHP 函数。本文全程大白话、零基础可看懂搭配真实代码示例区分漏洞代码为什么会被攻击和安全代码如何防御。所有 Web 漏洞本质只有一句话网站无条件相信用户传过来的数据。二、文件上传模块常用 PHP 函数Upload-Labs$_FILES —— 接收用户上传的文件大白话理解用户上传文件后网站通过这个函数拿到文件所有信息。包含文件名、文件类型、临时保存路径。漏洞核心文件类型是浏览器自己上报的可以用 Burp 随便改完全不可信。漏洞代码示例Pass-02 原题漏洞?php // 直接读取浏览器传来的文件类型 $type $_FILES[upload_file][type]; ​ if($type image/jpeg){ move_uploaded_file($_FILES[upload_file][tmp_name],upload/.$_FILES[upload_file][name]); echo 上传成功; }else{ echo 只能上传图片; } ?攻击方式上传 php 木马 → Burp 抓包把类型改成image/jpeg→ 直接绕过。move_uploaded_file() —— 真正完成文件上传大白话把服务器临时文件移动到公开文件夹文件才算真正上传成功。示例?php $tmp $_FILES[file][tmp_name]; // 服务器临时文件 $name $_FILES[file][name]; // 用户上传的文件名 ​ // 移动到网站目录上传成功 move_uploaded_file($tmp,upload/.$name); ?如果不做过滤用户上传shell.php木马直接拿下服务器。pathinfo() —— 获取文件后缀大白话专门抓后缀 jpg、php、png用来判断文件类型。漏洞代码黑名单绕过?php $ext pathinfo($_FILES[file][name],PATHINFO_EXTENSION); ​ // 只禁止 php黑名单不安全 if($ext ! php){ move_uploaded_file($tmp,upload/.$_FILES[file][name]); } ?漏洞原因攻击者可以传.phtml .php5照样执行木马。安全写法白名单唯一推荐?php $allow [jpg,png,gif]; $ext pathinfo($_FILES[file][name],PATHINFO_EXTENSION); ​ if(in_array($ext,$allow)){ move_uploaded_file($tmp,upload/.$_FILES[file][name]); } ?getimagesize() —— 判断是不是图片大白话读取图片长宽判断是不是真图片。绕过方式图片马图片头部php木马能骗过这个函数。三、XSS 模块常用 PHP 函数Pikachu / XSS-Labsecho —— 输出内容到网页大白话把用户输入的东西直接打印在页面上。漏洞代码反射型XSS?php $name $_GET[name]; echo 你的名字.$name; ?用户输入scriptalert(1)/script网站直接输出 → 浏览器识别代码 → 弹窗 XSS 成功。htmlspecialchars() —— XSS 终极防御函数大白话把所有尖括号、引号全部变成“普通文字”浏览器不会执行代码。安全修复代码?php $name $_GET[name]; echo htmlspecialchars($name,ENT_QUOTES); ?效果scriptalert(1)/script只会当成文字显示不会执行。strip_tags() —— 删除HTML标签大白话删掉 script、html 标签。缺点有漏洞删不掉事件类 payload比如img onerroralert(1)依旧可以触发 XSS。四、SQL注入常用函数PikachuGET/POST —— 获取用户参数大白话接收网址、表单的数据完全可控。mysqli_query() —— 执行数据库语句漏洞代码经典注入?php $id $_GET[id]; $sql select * from user where id$id; $result mysqli_query($conn,$sql); ?用户传入?id1 or 11 --直接查询出所有账号密码SQL注入成功。addslashes() —— 简单转义函数大白话给单引号加斜杠试图防注入。缺陷可以被宽字节注入绕过不安全。五、三大漏洞 原理 完整防御方案文件上传漏洞漏洞原因网站校验太敷衍信任前端数据导致木马被上传并执行。防御方式优先使用后缀白名单只允许 jpg/png/gif不相信$_FILES[type]可抓包篡改校验文件真实内容不只看后缀上传文件随机重命名上传目录禁止解析 PHP 脚本XSS 跨站脚本漏洞漏洞原因用户输入恶意 JS 代码网站直接输出到页面被浏览器执行。防御方式输出页面统一使用htmlspecialchars()转义Cookie 设置 HttpOnly防止偷取会话前端避免使用 innerHTML 拼接用户数据SQL 注入漏洞漏洞原因直接把用户输入拼接到 SQL 语句导致数据库被篡改、泄露。防御方式使用预编译预处理语句最有效禁止直接拼接用户参数到 SQL数据库账号最小权限关闭网页 SQL 错误回显六、实验总结所有 Web 漏洞的根源都是信任了不可信的用户数据。PHP 函数本身没有问题开发者不正确使用函数、不做过滤才导致漏洞产生。安全开发核心思想一切用户输入默认全部恶意。