我的网站为经典ASP作为前端,SQL Server 2005作为后端。
但是我的后端面临一个非常奇怪的SQL注入。
带有垃圾邮件站点的HTML的某种类型的CSS将其代码附加到我的网站数据库中,每个表和每个varchar类型列。
例如
</title><style>.am1y{position:absolute;clip:rect(405px,auto,auto,405px);}</style><div class=am1y>same day <a href=http://mazzpaydayloans.com >payday loans</a></div>
我检查了我的IIS日志它向我显示了这个
2013-06-09 19:15:54 GET /mypage.asp%3C/title%3E%3Cstyle%3E.axo5{position:absolute;clip:rect(404px,auto,auto,404px);}%3C/style%3E%3Cdiv%20class=axo5%3Eapproval% 20%3CA%20href = HTTP:/mazzpaydayloans.com%20%3Epayday%20loans%3C/a%3E%3C/div%3E - - 204.13.205.99 HTTP / 1.1 Mozilla / 4.0 +(兼容; + MSIE + 6.0; + Windows + NT + 5.1; + SV1) loginfailure =机会= 0&安培; bantime = + ASPSESSIONIDSSDRRCQQ = EDPHPJGCGLMKOADICKHODKBM - www.mysite.com 404 0 281 543 78
在我选择的这个ASP页面上,所有SQL查询都被参数化。
但这个问题仍然存在。
MyPage.asp代码
new_prot = "http"
new_https = lcase(request.ServerVariables("HTTPS"))
if new_https <> "off" then new_prot = "https"
new_domainname = Request.ServerVariables("SERVER_NAME")
new_filename = Request.ServerVariables("SCRIPT_NAME")
set cm1 = Server.CreateObject("ADODB.Command")
cm1.ActiveConnection = conn
cm1.commandtype=1
cm1.CommandText ="select * from Table1 where Web=?"
cm1.prepared=true
dim weburl
set weburl=cm1.createparameter(Web_URL,200,,5000)
weburl.value= Server.HtmlEncode(ltrim(rtrim(new_filename)))
cm1.parameters.append weburl
set Mobile = cm1.execute(RecordsAffected,,adCmdText)
do until Mobile.EOF
response.redirect(Mobile.fields("mob"))
loop
答案 0 :(得分:2)
首先,您的查询可能是参数化的,但您需要实现存储过程,而不是直接的SQL命令。
set cm1 = Server.CreateObject("ADODB.Command")
cm1.ActiveConnection = conn
cm1.commandtype=1
cm1.CommandText ="select * from Table1 where Web=?"
命令文本是否否
您需要实施存储过程:
CREATE ProcTable
@ParamWeb INT
as
SELECT * FROM Table WHERE PAgeID = @ParamWeb
然后执行proc。这可以防止注入,因为页面只能接受proc的数值,并且只会返回引用数据集(空或带行)
您的命令文本可以
"; any injection script you want"
追加
任何注入脚本都可以包含sqlcmdShell,因此一旦注入完成,坏人就可以返回表格列表,内容,用户,用户数据等等。