探索黑客技术攻防,实战研究与安全创新

导航菜单

Curl 类库安全研究

什么是CURL?    curl是利用URL语法在命令行方式下工作的开源文件传输工具。它被广泛应用在Unix、多种Linux发行版中,并且有DOS和Win32、Win64下的移植版本。    CURL是十分强大的开源命令行工具,支持以下这些协议 QQ截图20160907143349.png

许多程序猿使用CURL类库的时候是不对传入的URL进行协议鉴别的.    举个例子在最新版的骑士CMS中(20160604)有一个调用curl类库的函数 3.png

1.png

把这段代码单独扒拉下来稍作修改,然后调用一下可以很明显的看到,直接使用curl调用了file://协议对文件进行了读取 我建立了一个测试文件路径为/etc/test

2.png

测试文件里面将CURLOPT_URL设置为///etc/test再访问测试文件test/test.php

3.png

可以看到原本打算进行http请求的函数转变成了文件读取.

但是上面仅仅是最一般的情况,更多的情况是url是经过拼接之后再传入CURLOPT_URL这个选项的.

举个例子,有一个api接口 4.png

用户的api_token来传入curl类库进行http请求等操作,想要将使用http协议变成file协议来读取文件  ,我们最好能够能覆盖前面一部分,并且摒弃后面一部分. 那么想要做到上面的部分就要了解curl_setopt()这个函数的源代码了. >5.png

1.png

(看懂PHP的函数源码需要一点PHP扩展方面的知识,推荐看看鸟哥laruence的博客和百度) 里面调用了_php_curl_setopt()这个函数,其中进入的是这个case2.png

这个函数中唯一一个调用的函数原型贴在下面了  ext/curl/interface.c:206行

3.png

可以看到程序首先就判断了是否设置了open_basedir,如果设置了将直接防止使用`file:`协议进行文件的读取,所以可以考虑作为一个防御方案:)    在进入第一个if判断语句,首先php里面的curl类库调用了php源码里php_url_parse_ex这个函数来解析url,php的函数parse_url()函数也是调用的php_url_parse_ex这个函数来解析url. 但是主要php_url_parse_ex这个函数在这里的作用就是解析这个url使用了什么协议,再根据解析出来的协议使用值uri->scheme对比是否是file协议,相当于在上层做了一个判断,并不是解析好了之后将处理过后的值放入curl类库里的函数再解析一遍url. 经过追踪函数定位到lib/url.c:parseurlandfillconn()为curl类库里面进行url解析的函数1.png

首先可以看curl先取了`:`符号之前的字符转换成大写之后再和`file`进行对比.程序猿还在注释里面写了这么一段话.

 

2.png

程序猿是想兼容RFC1808协议,RFC1808协议里对file协议的规定

1.png

理一下程序前一部分的逻辑会发现这个函数把{somedomain.com}/etc/passwd  里面{}中的所有给忽略掉,而只使用path,即使是别的域名也会最终读取到本地的对应文件中. 所以假设一个情况: 

给curl类库执行的话,依旧读取的是本地的/etc/passwd文件

1.png

所以可以想象一下一个场景

2.png

如果程序猿对curl访问的host做了限制,其实可以绕过host的限制,继续进行文件读取

1.png

而回到最一开始的那个问题,如果程序猿单单对url后半部分进行了拼接,没有进行`:`符号前面的协议判断,是可以通过?号,file://qq.com/etc/passwd?+{user+token}来继续执行文件协议读取.

2.png

如果绕过了host,但是后面有拼接 这时候后面加一个  ?  就能把后面的token变为查询参数,不影响文件读取

1.png

如果拼接了前半部分目前来说,又想使用file协议是无计可施的. 但是你想要用其它协议,没问题.curl如果没有读取到传入curl使用的协议,或者遇到不规范的url.会自行对以下协议进行重组.

2.png

就是说假如你想使用一个ftp协议来下载东西,但是ftp协议被禁用了.你根据它的判断规则传入一个url。    当在内网的ftp服务器域名前缀是ftp的情况下libcurl还是会根据你传入的url发起一个ftp请求的.假如说能重组file协议的话,会是一个不得了的大洞呢,可惜了。

本文为网络安全技术研究记录,文中技术研究环境为本地搭建或经过目标主体授权测试研究,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,在挖掘、提交相关漏洞的过程中,应严格遵守相关法律法规。

相关推荐