脚本攻击经典ASP

时间:2013-06-11 07:06:22

标签: sql-server asp-classic

我的网站为经典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

1 个答案:

答案 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,因此一旦注入完成,坏人就可以返回表格列表,内容,用户,用户数据等等。