服务器上具有内容类型验证的POST请求的CSRF检测

时间:2018-09-11 13:37:02

标签: penetration-testing

这与我作为PoC for CSRF漏洞的一部分正在尝试发出的http请求有关。没有通过服务器领域进行csrf保护的明显方法。

我尝试使用XHR对象检查漏洞。但是服务器未配置CORS,这在我的浏览器发出的OPTIONS预检请求中没有出现,并且随后的POST请求都没有发生。

<html>
<title>JSON CSRF POC</title>
<body>
<center>
<h1> JSON CSRF POC </h1>
<script>fetch('<url here>', {method: 'POST', credentials: 'include', 
headers: {'Content-Type': 'application/json'}, body: '{<Payload in json  
format>}'});
</script>
<form action="#">
<input type="button" value="Submit" />
</form>
</center>
</body>
</html> 

在这里,我第一次运行时将内容类型指定为“纯文本/文本”。但是服务器似乎也在检查内容类型,请求被错误处理了。如上面的代码中所指定,内容类型为“ application / json”,这是服务器所期望的。但是,当我运行代码时,该请求被视为XHR,但未成功。我确实使用“基于请求特征自动选择”选项尝试了csrf的burp PoC,期望生成的代码具有所拦截请求中指定的内容类型。但是代码的内容类型设置为纯文本/文本。 PoC代码还以服务器不接受的url编码格式更改有效负载。如果我侦听burp PoC生成的http请求并将内容类型更改为“ application / json”,并且将有效负载更改为json格式,则该请求成功。

谢谢。

我的问题是:- 1.将内容类型更改为application / json后,浏览器会将它视为XHR请求吗? 2.有什么方法可以更改上面的代码,以使浏览器不会将其视为XHR [跨域]

1 个答案:

答案 0 :(得分:1)

  1. fetch与XHR的实现类似,不同之处在于它的API使用promise处理结果。同时,浏览器也不支持表单提交的JSON内容类型。
  2. 您可以使用Flash swf文件来触发此类请求。请参阅下面的答案: https://security.stackexchange.com/questions/170477/csrf-with-json-post-when-content-type-must-be-application-json?answertab=votes#tab-top