当前位置: 首页 > news >正文

C11期作业17(07.05)

目录

一、安装fortify并以pikachu靶场为目标进行练习熟练使用fortify

安装fortify

下载

安装

运行

使用fortify分析pikachu源码

点击Advanced Scan按钮,打开pikachu源码(可他处获取)目录​

排除无需检测的文件夹。如选中assets目录,点击Exclude按钮​

此步骤可默认或根据需要调整​

此步骤可只改这里。然后点击Scan按钮​

扫描完成后,点击某个漏洞的界面​

二、复习php代码审计函数精讲相关内容,重点是SESSION验证绕过、urldecode二次编码绕过、str_replace绕过

SESSION验证绕过

代码示例

绕过方式

urldecode二次编码绕过

代码示例

绕过方式

str_replace绕过

代码示例

绕过方式

三、复习php伪协议

简介

file:// 协议

条件:不受 allow_url_fopen 与 allow_url_include 的影响

作用:是 PHP 使⽤的默认封装协议,⽤于访问本地⽂件系统

用法

php:// 协议

条件

作用:访问各个输⼊/输出流,一般php://filter ⽤于读取源码, php://input ⽤于执⾏php代码​

php://input

php://filter

zip:// & bzip2:// & zlib:// 协议

条件:不受 allow_url_fopen 与 allow_url_include 的影响

作⽤: zip:// & bzip2:// & zlib:// 均属于压缩流,可以访问压缩⽂件中的⼦⽂件,更重要的是不需要指定后缀名,可修改为任意后缀: jpg png gif xxx 等等

zip://[压缩⽂件路径]%23[压缩⽂件内的⼦⽂件名] (#编码为%23)

其他协议用法

data:// 协议

条件:allow_url_fopen :on,allow_url_include :on

作⽤:⾃ PHP>=5.2.0 起,可以使⽤ data:// 数据流封装器,以传递相应格式的数据。通常可以⽤来执⾏PHP代码

用法

http:// & https:// 协议

条件:allow_url_fopen :on,allow_url_include :on

作⽤:常规 URL 形式,允许通过 HTTP 1.0 的 GET⽅法,以只读访问⽂件或资源。CTF中通常⽤于远程包含

示例​

phar:// 协议

phar:// 协议与 zip:// 类似,同样可以访问zip格式压缩包内容

示例

四、搭建并部署微商城系统并结合课件审计复习文件上传漏洞

环境搭建

获取源码并解压

在phpStudy中配置站点​

创建数据库mall并导⼊数据库⽂件(mysql_data_E7VvC.sql)到数据库

修改数据库链接⽂件:/Mao/common.php​

访问站点

审计文件上传漏洞

使用fortify扫描代码,有一处文件上传漏洞(api/api.php,302行)​

相关代码截图​

漏洞分析:验证了文件类型和文件大小,验证文件类型不严格,可被绕过

漏洞利用

一、安装fortify并以pikachu靶场为目标进行练习熟练使用fortify

  1. 安装fortify
    1. 下载
      链接: https://pan.baidu.com/s/1oStDkLGeWvl1eg0VanCxfw 提取码: 2025
    2. 安装
      1. 分别安装(安装完成后,默认路径是C:\Program Files\Fortify)
      2. 将fortify-common-23.2.0.0023.jar⽂件分别将下⾯路径的⽂件覆盖
        1. Fortify_Apps_and_Tools_23.2.0\Core\lib
        2. Fortify_SCA_23.2.0\Core\lib
      3. 更新规则
        1. 解压FortifyRules_zh_CH_2023.1.1.0001(离线规则库).zip
        2. 删除Fortify_SCA_23.2.0\Core\config⽬录下的ExternalMetadata和rules⽂件夹,然后把解压的ExternalMetadata和rules⽂件夹拷⻉到该⽬录下
    3. 运行
      1. 以管理员身份打开Fortify_Apps_and_Tools_23.1.0\bin 下的auditworkbench.cmd
      2. 打开后如下图
  2. 使用fortify分析pikachu源码
    1. 点击Advanced Scan按钮,打开pikachu源码(可他处获取)目录
    2. 排除无需检测的文件夹。如选中assets目录,点击Exclude按钮
    3. 此步骤可默认或根据需要调整
    4. 此步骤可只改这里。然后点击Scan按钮
    5. 扫描完成后,点击某个漏洞的界面

二、复习php代码审计函数精讲相关内容,重点是SESSION验证绕过、urldecode二次编码绕过、str_replace绕过

  1. SESSION验证绕过
    1. 代码示例
      session_start();
      if(isset($_GET['a']) && $_GET['a'] == $_SESSION['a']){echo "登陆成功";
      }
    2. 绕过方式
      1. 删除cookie中PHPSESSID,则$_SESSION['a']为空, 让$_GET['a']为空即可
      2. 请求方式
  2. urldecode二次编码绕过
    1. 代码示例
      if(strpos($_GET['id'], "magedu") === false && urldecode($_GET["id"])  == "magedu"){echo "绕过了!";
      }
    2. 绕过方式
      1. 将第⼀个字符m进⾏url⼆次编码,一次编码为:%6d,⼆次编码为%256d

      2. 首次编码被浏览器解码,二次编码被代码解码

      3. 请求方式

  3. str_replace绕过
    1. 代码示例
      $ret= str_replace('../','',$_GET['filename']);
      echo $ret;
    2. 绕过方式
      1. str_replace函数只会替换一次,因此可构造内容,替换后内容仍包含过滤字符串
      2. 请求方式

三、复习php伪协议

  1. 简介
    1. 在PHP中,伪协议是⼀种特殊的协议,⽤于访问不同的数据源
    2. 它们并不是真正的⽹络协议,⽽是⼀种封装协议,使得PHP能够以特定的⽅式访问和操作数据
    3. PHP提供了多种伪协议,每种伪协议都有其特定的⽤途和功能
      file:// — 访问本地⽂件系统
      http:// — 访问 HTTP(s) ⽹址
      ftp:// — 访问 FTP(s) URLs
      php:// — 访问各个输⼊/输出流(I/O streams)
      zlib:// — 压缩流
      data:// — 数据(RFC 2397)
      glob:// — 查找匹配的⽂件路径模式
      phar:// — PHP 归档
      ssh2:// — Secure Shell 2
      rar:// — RARd
      ogg:// — ⾳频流
      expect:// — 处理交互式的流
  2. file:// 协议
    1. 条件:不受 allow_url_fopen 与 allow_url_include 的影响
    2. 作用:是 PHP 使⽤的默认封装协议,⽤于访问本地⽂件系统
    3. 用法
      1. 代码示例
        <?php include $_GET['file'];
        ?>
      2. 读取/执行文件:file://[绝对路径文件/相对路径文件/远程文件]
  3. php:// 协议
    1. 条件
      1. allow_url_fopen:无影响
      2. allow_url_include:仅 php://input,php://stdin,php://memory,php://temp需要为on
    2. 作用:访问各个输⼊/输出流,一般php://filter ⽤于读取源码, php://input ⽤于执⾏php代码
    3. php://input
      1. 代码示例:同file协议
      2. 执行php代码
    4. php://filter
      1. 参数()​​​​​
      2.  可用过滤器列表:PHP: 可用过滤器列表 - Manual

      3. 代码示例:同file协议
      4. 读取文件源码
        ?file=php://filter/read=convert.base64-encode/r
        esource=./password.txt
  4. zip:// & bzip2:// & zlib:// 协议
    1. 条件:不受 allow_url_fopen 与 allow_url_include 的影响
    2. 作⽤: zip:// & bzip2:// & zlib:// 均属于压缩流,可以访问压缩⽂件中的⼦⽂件,更重
      要的是不需要指定后缀名,可修改为任意后缀: jpg png gif xxx 等等
    3. zip://[压缩⽂件路径]%23[压缩⽂件内的⼦⽂件名] (#编码为%23)
      1. 在C盘根目录创建phpinfo.php文件,压缩为phpinfo.zip
        <?phpphpinfo();
        ?>
      2. 执行文件
    4. 其他协议用法
      1. compress.bzip2://file.bz2
      2. compress.zlib://file.gz
  5. data:// 协议
    1. 条件:allow_url_fopen :on,allow_url_include :on
    2. 作⽤:⾃ PHP>=5.2.0 起,可以使⽤ data:// 数据流封装器,以传递相应格式的数据。通常可以⽤来执⾏PHP代码
    3. 用法
      1. data://text/plain,
        ?file=data://text/plain,<?php phpinfo();?>
      2. data://text/plain;base64,
        ?file=data://text/plain;base64,PD9waHAgcGhwaW5m
        bygpOz8%2b
  6. http:// & https:// 协议
    1. 条件:allow_url_fopen :on,allow_url_include :on
    2. 作⽤:常规 URL 形式,允许通过 HTTP 1.0 的 GET⽅法,以只读访问⽂件或资源。CTF中通常⽤于远程包含
    3. 示例
  7. phar:// 协议
    1. phar:// 协议与 zip:// 类似,同样可以访问zip格式压缩包内容
    2. 示例
      ?file=phar://C:/phpinfo.zip/phpinfo.php

四、搭建并部署微商城系统并结合课件审计复习文件上传漏洞

  1. 环境搭建
    1. 获取源码并解压
      通过网盘分享的文件:mall.zip
      链接: https://pan.baidu.com/s/1YF3JUYh3fVuYYMLN_Wk4hw 提取码: 2025
    2. 在phpStudy中配置站点
    3. 创建数据库mall并导⼊数据库⽂件(mysql_data_E7VvC.sql)到数据库
    4. 修改数据库链接⽂件:/Mao/common.php
    5. 访问站点
      1. 前台:maill.com
      2. 后台:mall.com/Mao_admin(账号:admin,密码:qymao.cn_q54)
  2. 审计文件上传漏洞
    1. 使用fortify扫描代码,有一处文件上传漏洞(api/api.php,302行)
    2. 相关代码截图
    3. 漏洞分析:验证了文件类型和文件大小,验证文件类型不严格,可被绕过
    4. 漏洞利用
      1. 创建文件上传html代码(表单参数值根据代码设置)
        <!DOCTYPE html>
        <html>
        <head><title>简单文件上传</title>
        </head>
        <body><form action="http://mall.com/api/api.php?mod=upload&type=1" method="post" enctype="multipart/form-data"><input type="file" name="file"><button type="submit" name="submit">上传</button></form>
        </body>
        </html>
      2. 创建phpinfo文件,后缀改为gif
      3. 通过burp抓包,修改文件后缀为php,上传成功
      4. 访问文件,成功
http://www.lryc.cn/news/624094.html

相关文章:

  • Effective C++ 条款47: 使用traits classes表现类型信息
  • JVM常用工具:jstat、jmap、jstack
  • Transformer架构的数学本质:从注意力机制到大模型时代的技术内核
  • 因果语义知识图谱如何革新文本预处理
  • 机器学习案例——对好评和差评进行预测
  • Python开发环境
  • 说一下事件传播机制
  • Pandas数据结构详解Series与DataFrame
  • 【C#补全计划】多线程
  • 《解构WebSocket断网重连:指数退避算法的前端工业级实践指南》
  • 代码随想录刷题——字符串篇(五)
  • MySQL数据库初识
  • Linux 服务:iSCSI 存储服务配置全流程指南
  • 「数据获取」《中国文化文物与旅游统计年鉴》(1996-2024)(获取方式看绑定的资源)
  • ICCV 2025 | Reverse Convolution and Its Applications to Image Restoration
  • 一键管理 StarRocks:简化集群的启动、停止与状态查看
  • HTTP请求方法:GET与POST的深度解析
  • 【技术博客】480p 老番 → 8K 壁纸:APISR × SUPIR × CCSR「多重高清放大」完全指南
  • PCA 实现多向量压缩:首个主成分的深层意义
  • 平行双目视觉-动手学计算机视觉18
  • Go语言并发编程 ------ 锁机制详解
  • C++析构函数和线程退出1
  • C++继承(2)
  • Eclipse Tomcat Configuration
  • Docker-14.项目部署-DockerCompose
  • Docker入门:容器化技术的第一堂课
  • 飞算JavaAI赋能高吞吐服务器模拟:从0到百万级QPS的“流量洪峰”征服之旅
  • Linux软件编程:进程与线程(线程)
  • ruoyi-vue(十一)——代码生成
  • 最长回文子串问题:Go语言实现及复杂度分析