1.CSRF漏洞原理
CSRF(Cross-site request forgery),跨站请求伪造,简写 CSRF/XSRF。指利用受害者尚未失效的身份认证信息(cookie、会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账、改密等)。
CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用。
2.CSRF漏洞测试
上文说过了CSRF漏洞不盗取用户身份信息,而是利用用户身份信息去伪装成受信任的用户来发起请求。一般情况下,我们可以通过抓包软件抓取数据包,然后以GET或POST形式制作成链接或页面,之后诱骗目标用户点击。目标用户点击后,因为浏览器会自动携带cookie向服务器发送请求,这样用户可能在不知情的情况下完成了对自己不利的操作。
比如恶意用户lisi发现某银行个人网银的转账请求如下所示(注意www.testbank.com为本地演示地址):
GET /personTransfer.do?account=612**158&money=1000.0&name=lisi HTTP/1.1
Host: www.testbank.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0
Cookie:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://www.testbank.com
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: cross-site
Sec-Fetch-User: ?1
Te: trailers
Connection: close
lisi现在希望大家都给自己转账,他将account改为自己的账号,name改为他的名字,money改为1000.0元。之后使用Burp构造CSRF POC。
我们可以点击下方Copy Html将它粘贴成一个html文件,置于我们的服务器下,然后将这个链接发给目标用户,想办法让他点击即可。
这里为了演示,我直接选择Test in browser,之后会出现一个URL,点击Copy,这个链接就是给目标用户点击的。
当我访问这个链接后http://burpsuite/show/3/qizpy26u7wa3myaejlqbzowa66ktko5n,可以看到浏览器携带着我的Cookie向lisi发起了转账操作,这样在我不知情的情况下,lisi就盗取了我的money。
你可以清晰的看到,点击不明链接的危害有多大!
3.CSRF漏洞修复
(1)使用token
CSRF攻击想要成功,攻击者必须要准确地预测所有的参数从而伪造出合法的请求。所以我们可以在请求中添加一个随机的参数token,它是随机的,并是一次性的,并在服务器端检验,如果请求中没有token或者token的内容不正确,那么就拒绝该请求。
(2)检测Referer
通过检查Referer的值,我们就可以判断这个请求是合法的还是非法的,如果Referer是以自己的网站开头的域名,那么就说明该请求是合法的。文章来源:https://www.toymoban.com/news/detail-402057.html
(3)关键操作只接受 POST 请求。文章来源地址https://www.toymoban.com/news/detail-402057.html
到了这里,关于《WEB安全漏洞100讲》(第4讲)CSRF漏洞的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!