Maison > base de données > tutoriel mysql > sqlserver数据库表防JS木马注入终极教程知彼知己百战不殆。

sqlserver数据库表防JS木马注入终极教程知彼知己百战不殆。

WBOY
Libérer: 2016-06-07 15:27:47
original
1235 Les gens l'ont consulté

MSSQL 网站项目被 注入 的主要表现为:在 数据库 字段中加入了script src=http://aaa.bbb.ccc/js.js /script 类似这样的一段代码。 数据库 典型的JS 注入 。 主要原因为3 1、攻击者获得SQLServer的读写权限,直接操作 数据库 进行 注入 解决方式 sql2000做法

MSSQL 网站项目被注入的主要表现为:在数据库字段中加入了     类似这样的一段代码。数据库典型的JS注入

主要原因为3

1、攻击者获得SQLServer的读写权限,直接操作数据库进行注入

解决方式

   sql2000做法:

   1.不要使用sa用户连接数据库 
   2、新建一个public权限数据库用户,并用这个用户访问数据库 
   3、[角色]去掉角色public对sysobjects与syscolumns对象的select访问权限 
   4、[用户]用户名称-> 右键-属性-权限-在sysobjects与syscolumns上面打“×” 
   5、通过以下代码检测(失败表示权限正确,如能显示出来则表明权限太高): 
   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 @c 
   FETCH NEXT FROM Table_Cursor INTO @T,@C 
   END 
   CLOSE Table_Cursor 
   DEALLOCATE Table_Cursor

   sql2005做法:
   1、在系统视图找到sysobjects a,syscolumns b ,属性,进入权限,找到SELECT后面拒绝打勾即可。

2、通过字符串进行注入

解决方式:

凡是输入字符串全部格式化,过滤JS语句以及SQLServer关键字

1、字符串过滤JS代码先

 

sqlserver数据库表防JS木马注入终极教程知彼知己百战不殆。sqlserver数据库表防JS木马注入终极教程知彼知己百战不殆。代码

#region 过滤JS/CSS脚本
///


/// 过滤JS脚本
///
///要过滤的内容
///
///<script><frameset></script>
///
/// img的攻击样式为 sqlserver数据库表防JS木马注入终极教程知彼知己百战不殆。等,所以去掉所有的javascript代码
publicstaticstring WipeScript(string html)
{

if (string.IsNullOrEmpty(html)) return html;

System.Text.RegularExpressions.Regex regex
=new System.Text.RegularExpressions.Regex(@"<script></script>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
html
= regex.Replace(html, ""); //过滤<script></script>标记

System.Text.RegularExpressions.Regex regex1
=new System.Text.RegularExpressions.Regex(@" href *= *[\s\S]*script *:", System.Text.RegularExpressions.RegexOptions.IgnoreCase);

html
= regex1.Replace(html, ""); //过滤href=javascript: () 属性

System.Text.RegularExpressions.Regex regex2
=new System.Text.RegularExpressions.Regex(@" on[\s\S]*=", System.Text.RegularExpressions.RegexOptions.IgnoreCase);

html
= regex2.Replace(html, " _disibledevent="); //过滤其它控件的on...事件

System.Text.RegularExpressions.Regex regex3
=new System.Text.RegularExpressions.Regex(@"", System.Text.RegularExpressions.RegexOptions.IgnoreCase);

html
= regex3.Replace(html, ""); //过滤iframe

System.Text.RegularExpressions.Regex regex4
=new System.Text.RegularExpressions.Regex(@"", System.Text.RegularExpressions.RegexOptions.IgnoreCase);

html
= regex4.Replace(html, ""); //过滤frameset

System.Text.RegularExpressions.Regex regex5
=new System.Text.RegularExpressions.Regex(@"javascript:", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
html
= regex5.Replace(html, ""); //过滤所有javascript

System.Text.RegularExpressions.Regex regex6
=new System.Text.RegularExpressions.Regex(@":*expression", System.Text.RegularExpressions.RegexOptions.IgnoreCase);

html
= regex6.Replace(html, ""); //过滤所有javascript

System.Text.RegularExpressions.Regex regex7
=new System.Text.RegularExpressions.Regex(@"", System.Text.RegularExpressions.RegexOptions.IgnoreCase);

html
= regex7.Replace(html, ""); //

System.Text.RegularExpressions.Regex regex8
=new System.Text.RegularExpressions.Regex(@" src *= *[\s\S]*script *:", System.Text.RegularExpressions.RegexOptions.IgnoreCase);

html
= regex1.Replace(html, ""); //过滤src=javascript: (sqlserver数据库表防JS木马注入终极教程知彼知己百战不殆。) 属性
System.Text.RegularExpressions.Regex regex9 =new System.Text.RegularExpressions.Regex(@"", System.Text.RegularExpressions.RegexOptions.IgnoreCase);

html
= regex3.Replace(html, ""); //过滤applet,放弃对applet的支持
return html;

}
#endregion

2、字符串过滤SQLServer关键词

sqlserver数据库表防JS木马注入终极教程知彼知己百战不殆。sqlserver数据库表防JS木马注入终极教程知彼知己百战不殆。代码


//删除与数据库相关的词
Htmlstring = Regex.Replace(Htmlstring, "select", "", RegexOptions.IgnoreCase);
Htmlstring
= Regex.Replace(Htmlstring, "insert", "", RegexOptions.IgnoreCase);
Htmlstring
= Regex.Replace(Htmlstring, "delete from", "", RegexOptions.IgnoreCase);
Htmlstring
= Regex.Replace(Htmlstring, "count''", "", RegexOptions.IgnoreCase);
Htmlstring
= Regex.Replace(Htmlstring, "drop table", "", RegexOptions.IgnoreCase);
Htmlstring
= Regex.Replace(Htmlstring, "truncate", "", RegexOptions.IgnoreCase);
Htmlstring
= Regex.Replace(Htmlstring, "asc", "", RegexOptions.IgnoreCase);
Htmlstring
= Regex.Replace(Htmlstring, "mid", "", RegexOptions.IgnoreCase);
Htmlstring
= Regex.Replace(Htmlstring, "char", "", RegexOptions.IgnoreCase);
Htmlstring
= Regex.Replace(Htmlstring, "xp_cmdshell", "", RegexOptions.IgnoreCase);
Htmlstring
= Regex.Replace(Htmlstring, "exec master", "", RegexOptions.IgnoreCase);
Htmlstring
= Regex.Replace(Htmlstring, "net localgroup administrators", "", RegexOptions.IgnoreCase);
Htmlstring
= Regex.Replace(Htmlstring, "and", "", RegexOptions.IgnoreCase);

 

3、传值字符串过滤SQLServer关键词

sqlserver数据库表防JS木马注入终极教程知彼知己百战不殆。sqlserver数据库表防JS木马注入终极教程知彼知己百战不殆。代码

protectedvoid Application_BeginRequest(Object sender, EventArgs e)
{
//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(
"警告!你的IP已经被记录!不要使用敏感字符!");//
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(
"警告!你的IP已经被记录!不要使用敏感字符!");//
Response.End();
}
}
}
}

 

3、获取web.config的数据连接字符串

解决方式:web.config进行加密

asp.net 2.0 加密web.config

aspnet_regiis -pe "connectionStrings" -app "/xx"  (xx为应用程序名)

解密:aspnet_regiis -pd "connectionStrings" -app "/xx"

sqlserver数据库表防JS木马注入终极教程知彼知己百战不殆。 

加密后,web.config如图:
sqlserver数据库表防JS木马注入终极教程知彼知己百战不殆。

解密后,如图:

sqlserver数据库表防JS木马注入终极教程知彼知己百战不殆。

加密后的web.config程序可正常访问,且解密与加密必须在同一机器才有效(A机器上加密的web.config只有在A机器才可解密)。

 

 

能想到的就是这些,后面再发生问题,再不断完善。请列位同仁不断指正。

 

 

 

 

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal