网络安全学习-16

34 阅读1分钟

fortify使用

SESSION验证绕过、urldecode二次编码绕过、str_replace绕过

Session验证绕过

  • Session工作过程:
    1. 用户登陆 -> 服务器创建session并存储用户信息 -> 服务器生成 PHPSESSID (Cookie)返回给浏览器
    2. 浏览器后续请求都会携带 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实体:&lt;script&gt;alert(1)&lt;/script&gt;
    • 截断绕过
$file = str_replace('../', '', $file);  // 尝试防止目录遍历
include($file . '.php');

使用下面方法绕过:

test%00../etc/passwd 
test ....//etc/passwd 

搭建并部署微商城系统并结合fortify审计文件上传漏洞

环境搭建

使用phpstduy创建mail.com

初始化数据库

测试:

使用Fortify审计

验证漏洞:

上传文件