Web运用防火墙一般会被布置在Web客户端与Web服务器之间,以过滤来自服务器的歹意流量。而作为一名浸透测验人员,想要更好的打破方针体系,就有必要要了解方针体系的WAF规矩。现在,许多WAF都是根据签名的。下图简略描绘了一个Web运用防火墙的作业流程:
什么是根据签名的防火墙?
在根据签名的防火墙中你能够自界说签名,假如你知道某种 *** 进犯遵从某种类型的形式或签名。那么你就能够界说匹配形式过滤掉它们,例如:
Payload :- alert`1`
上面界说的是一种常见的XSS payload,咱们知道一切这类进犯都或许包括- >“”这些字符 ,因而咱们能够在WAF中设定一个包括这些字符的的过滤规矩,咱们能够进行如下界说:
alert(*)
榜首个签名将过滤任何包括字符串的恳求,第二个将过滤任何包括alert(*)字符串的恳求。
怎么判别方针环境是否布置防火墙?
当咱们对一个体系进行浸透时,假如你疏忽了防火墙的存在,那么就会为咱们的测验带来许多的费事。因而在开端真实的浸透之前,咱们更好能先判别下方针体系是否存在WAF。那么咱们该怎么进行判别呢?咱们还拿以上界说的payload来举例。在一般情况下,假如咱们在一个布置有WAF的体系上履行以上payload,那么在http的呼应中咱们将能捕获到WAF留下的轨道:
HTTP/1.1 406 Not Acceptable
Date: Mon, 10 Jan 2019
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 Mod_Security
能够看到,咱们的payload被名为Mod_Security的防火墙给过滤了。在本文中我将教咱们编写一个简略的python脚本,以协助咱们完结检测使命并绕过防火墙。
过程1:界说HTML文档和PHP脚本!
首要,咱们有必要界说咱们的HTML文档来注入payload和相应的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>
PHP脚本:
html>
body>
Data from the form : echo $_POST["data"]; ?>br>
body>
html>
过程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)
让我来简略解说下这几行代码的意图:
在榜首行代码,咱们首要导入了mechanize模块,并给它了一个简称’mec’以便咱们后续运用。
要想运用mechanize下载网页,咱们需求实例化浏览器。因而在第二行代码中,咱们实例化了浏览器。
在过程1中咱们界说了咱们的HTML文档,其间表单名称为“waf”。因而在第三行代码中,咱们需求告知mechanize要挑选以此命名的表单进行提交,所以formName变量为‘waf’。
第四行代码便是翻开方针URL地址,并提交咱们的数据。
最终咱们运用’select_form()’函数传递’formName’变量。
在以上的HTML文档中,咱们只界说了一个表单输入字段,咱们将运用该字段注入咱们的歹意payload,并经过查看http呼应信息来判别方针是否布置了Web运用防火墙。
过程3:预备payload
在HTML文档中咱们界说了一个名为’data’的输入字段:
input type="text" name="data">
因而,咱们能够运用以下代码来提交咱们的payload:
crossSiteScriptingPayLoad = "svg>script>alert`1`p>"
maliciousRequest.form['data'] = crossSiteScriptingPayLoad
榜首行代码咱们首要将payload赋给了变量‘crossSiteScriptingPayLoad’。
第二行代码咱们将payload提交给了表单字段“data”。
过程4:提交表单并记载呼应
下面咱们提交此表单并记载呼应信息:
maliciousRequest.submit()
response = maliciousRequest.response().read()
print response
提交表单
将呼应赋给变量。
将将呼应信息打印出来。
因为我现在并未装置布置防火墙,所以我得到了如下呼应:
能够看到payload被打印在了HTML文档中,这也阐明运用程序代码中没有任何的过滤机制,而且因为没有防火墙的维护,咱们的歹意恳求也未被阻挠。
[1] [2] [3] 黑客接单网
Web浸透测验中比较难的便是测验那些交互较少的使用了,当你尝试了各种缝隙使用办法而无效之后,很或许就会抛弃了。但有时分,这种花费时刻的投入和研讨,对白帽本身的技能进步来说,仍是十分有用的。这儿我就共...
问题描述: 假如用户输入的数据在未经处理的情况下刺进到一条SQL查询句子,那么运用将很可能遭受到SQL注入进犯,正如下面的比如: $unsafe_variable = $_POST['user_in...
Raptor是一款选用C言语编写的WEB运用防火墙,运用DFA来阻挠SQL注入、Xss目录遍历等进犯。 编译&装置 $ git clone https://github.com/Cool...
WEB前端中最常见的两种安全危险,XSS与CSRF,XSS,即跨站脚本进犯、CSRF即跨站恳求假造,两者归于跨域安全进犯,关于常见的XSS以及CSRF在此不多议论,仅议论一些不太常见的跨域技能以及安全...
之前,我从没参加过GitHub官方的一些缝隙众测项目,在HackerOne建议的HackTheWorld竞赛中,主办方宣扬除了赏金以外,还有时机取得Github供给的终身无约束私有库(unlimit...
还在用wget和curl?试试HTTPie吧 :) HTTPie (读作aych-tee-tee-pie)是指令行方法的HTTP客户端。可经过简略的http指令,可合作语法发送恣意HTTP恳求数据,...