您当前的位置: 主页 > 行业动态 >

使用恶意页面攻击本地XDebug

更新时间:2018-12-04 08:46  来源:郑州php培训

用户1914961175 2018—04-02 18:22
    
     PHP开发人员和一些安全研究人员经常基于XDEBUG为PHP构建本地调试服务。在大多数配置中,Xdebug使用HTTP请求头中的X-Forwared-For字段作为DBGp协议的支持地址。受害者浏览攻击页面一段时间,攻击者可以使用DNS Rebind技术向锁发送带有恶意X-Forwared-For的请求。AL服务器,也就是说,在受害者的计算机上执行任意代码是可能的。
    
     Xdebug是一种用于调试PHP的扩展,它可以基于本地源代码在服务器上远程调试PHP代码。许多开发人员和安全研究人员通常构建本地PHP调试环境用于日常开发和调试。如果服务器打开Xdebug连接和AKER可以直接访问服务器,它可以直接导致RCE。
    
     但是,在大多数情况下,这些服务器位于内部网环境中,有些甚至监听127.0.0.1,这使得攻击者很难直接访问它们,并使它们不可用。
    
     让我们先看看Xdebug关于远程调试的文档。启用和XDebug的ReleTyCelpTyBug。未设置._host,Xdebug将主动连接到发起HTTP请求的客户端。Xdebug依次检测$_SERVER{HTTP_X_FORWARDED_.}、$_SERVER{REMOTE_ADDR}以确定回调的IP地址。
    
     也就是说,当Xdebug具有类似于以下配置时,Xdebug有机会连接到请求头中X-Forwared-For所指向的IP地址。
    
     Xdebug。ReleTyCelpTyBug=1 XDebug。ReleToEnabl = 1 XDebug。远程日志= tMP/测试。日志一般,有索引文件等。PHP和CONFIG。PHP开发人员的本地环境中的PHP。当受害者访问攻击者的恶意页面时,攻击者可以使用指向攻击者服务器的X-Forwared-For报头尝试在浏览器中发起HTTP请求,该报头指向本地URL,例如http:127.0.1index.phpXDE。BUG_SESS._START或http:127.0.1/config.phpXDEBUG_SESS._START。这允许攻击者在其服务器上从受害者的DBGp协议接收连接,并在受害者的计算机上执行任意PHP代码。
    
     我们都知道,当在浏览器中发送带有非简单报头的CORS请求时,需要发送一个预光请求,以检测服务器是否允许发送这样的请求报头。如果OPTIONS请求的响应头包含条目Access-Control-Allow-Headers:X-Forwared-For,则发送。在受害者的本地环境中几乎没有响应。
    
     但是,攻击者可以使用DNS Rebind来绕过这个限制。攻击者首先构建DNS解析服务器,并在第一次DNS解析发生时让其控制下的域名指向攻击者的服务器,然后解析为127.0.0.1。ttacker的页面(http:/攻击者域与-dns-rebind/exp.html),攻击代码从攻击者的服务器中提取,导致浏览器循环到http:攻击者域与-dns-rebind/index.phpXDEBUG_SESS._START,以发送带有恶意X-Forwared-Forwarward报头的请求。攻击者存储攻击代码的页面和触发Xdebug回显请求的URL位于同一个域中,您不必发送前面提到的前置请求。
    
     由于DNS解析结果的缓存时间,在浏览器中使第二次解析无效大约需要一分钟。服务器从受害者的Xdebug接收连接。攻击者可以通过DBGp协议中的eval命令在客户端执行任何PHP代码。
    
     我们认为该漏洞的原因是Xdebug从X-Forwared-For报头获取IP作为链接地址,并且X-Forwared-For报头不可信。
    
     2008年3月26日,玄武岩实验室向PHP官员报告了这个问题,PHP官员在2008年3月30日作出回应,称这不是安全问题,而是将报告变成了一个公开的bug。玄武岩实验室建议PHP开发人员和安全研究人员添加XDEBUG。将XDebug主机配置项发送到XDebug配置文件,以保护自身免受此攻击。