fortify使用
SESSION验证绕过、urldecode二次编码绕过、str_replace绕过
Session验证绕过
- Session工作过程:
-
- 用户登陆 -> 服务器创建session并存储用户信息 -> 服务器生成 PHPSESSID (Cookie)返回给浏览器
- 浏览器后续请求都会携带 PHPSESSID -> 服务器验证session对应的用户信息 -> 允许访问资源
- 原理:利用应用程序对Session状态判断的逻辑缺陷,使得攻击者能够绕过身份验证或权限检查。简单来说,就是程序错误地认为用户已经通过了身份验证,但实际上用户并没有真正登录。
- Session验证绕过发生在程序没有正确验证Session的状态,导致攻击者可以通过各种手段“欺骗”程序,使其认为用户已经登录。
- 关键字:
-
- session_start()
- $_SESSION
- isset()对session的检查
urldecode二次编码绕过
- 原理:对URL编码数据的多次解码处理不当,导致过滤规则被绕过。
- URL编码会转换特殊字符。比如,
'编码为%27。 - 示例:
$input = $_GET['data'];
$input = urldecode($input); // 第一次解码
$input = urldecode($input); // 第二次解码
// 如果前面有过滤,就可能被绕过
str_replace绕过
- str_replace()
<?php
$str = "Hello World";
$result = str_replace("World", "PHP", $str);
echo $result; // 输出:Hello PHP
- 绕过方法
-
- 大小写绕过
$safe_input = str_replace('select', '', $input);
$safe_input = str_replace('union', '', $safe_input);
$safe_input = str_replace('from', '', $safe_input);
// 执行SQL查询(危险!)
$query = "SELECT * FROM users WHERE name = '$safe_input'";
使用下面方法可以绕过
SelEct * fRoM users
SELECT * FROM users
-
- 双向绕过
输入:<<script>script>alert(1)</<script>/script>
处理过程:<<script>script> → <script>,</<script>/script> → </script>
结果:最终变成 <script>alert(1)</script>
-
- 编码绕过
URL编码:%3Cscript%3Ealert(1)%3C%2Fscript%3E
HTML实体:<script>alert(1)</script>
-
- 截断绕过
$file = str_replace('../', '', $file); // 尝试防止目录遍历
include($file . '.php');
使用下面方法绕过:
test%00../etc/passwd
test ....//etc/passwd
搭建并部署微商城系统并结合fortify审计文件上传漏洞
环境搭建
使用phpstduy创建mail.com
初始化数据库
测试:
使用Fortify审计
验证漏洞:
上传文件