利用Session欺騙構(gòu)造最隱蔽的WebShell
更新時(shí)間:2007年01月16日 00:00:00 作者:
不知不覺“LM團(tuán)伙”看黑防已有兩個(gè)春秋了,期期不落。潛心修煉了這么久,也能開始耍上一兩招了??戳撕诜赖诙诘摹禗reamWeaver引發(fā)網(wǎng)絡(luò)危機(jī)》一文,“LM團(tuán)伙”內(nèi)心有說(shuō)不出的激動(dòng),心想網(wǎng)上有40%的網(wǎng)頁(yè)都有這樣的漏洞,那豈不是又能收獲N多肉雞了??墒亲屑?xì)研究發(fā)現(xiàn),這個(gè)文章的方法存在一些問(wèn)題,并不像想象中的那樣容易發(fā)揮。下面就與大家一起討論一下Session。
既然是談Session欺騙,那么就先來(lái)看一下Session到底是什么,它是怎么工作的。在ASP中,服務(wù)器能通過(guò)Session對(duì)象區(qū)分不同的瀏覽器,因?yàn)镾ession對(duì)象是用來(lái)記錄瀏覽器端的變量,存儲(chǔ)一些如用戶名等比較敏感或有用的信息。這點(diǎn)似乎和Cookie有點(diǎn)像。但我們知道Cookie的值都是保存在客戶端的,而Session的值卻是保存在服務(wù)器端。當(dāng)每個(gè)訪問(wèn)者第一次瀏覽器訪問(wèn)服務(wù)器的一個(gè)ASP網(wǎng)頁(yè)的時(shí)候,服務(wù)器會(huì)為他創(chuàng)建一個(gè)新的并且獨(dú)立的Session對(duì)象,分配給該會(huì)話一個(gè)會(huì)話標(biāo)識(shí)號(hào),并把包含會(huì)話標(biāo)識(shí)符的特殊加密版本的一個(gè)Cookie(會(huì)話標(biāo)識(shí)號(hào))發(fā)送給客戶。由于在Cookie(會(huì)話標(biāo)識(shí)號(hào))中沒有提供Expires值,所以當(dāng)瀏覽器關(guān)閉時(shí),這個(gè)會(huì)話標(biāo)識(shí)號(hào)也就消失了。
每當(dāng)用戶訪問(wèn)這個(gè)ASP網(wǎng)站時(shí),ASP都會(huì)通過(guò)瀏覽器查找這個(gè)會(huì)話標(biāo)識(shí)號(hào)。命名為ASPSESSIONIDxxxxxxxx,其中每個(gè)x是一個(gè)字母符。我們?cè)谧ソ邮瞻鼤r(shí)能看見:
Set-Cookie: ASPSESSIONIDSQBBQQDS=GCINNKPDIGDNPEAOGLDFFFEM; path=/
但是這個(gè)Cookie(會(huì)話標(biāo)識(shí)號(hào))不會(huì)出現(xiàn)在Request.Cookies或Respsones.Cookies集合中,雖然ASP把它隱藏起來(lái),但仍保存在瀏覽器上。對(duì)于每個(gè)ASP網(wǎng)頁(yè)的請(qǐng)求,ASP都要查看該值。這個(gè)Cookie(會(huì)話標(biāo)識(shí)號(hào))包含的值,指明了這個(gè)用戶的會(huì)話。因此,相應(yīng)的Session對(duì)象(該對(duì)象已經(jīng)在內(nèi)存中,并且一直包含所有在前一頁(yè)面請(qǐng)求過(guò)程中進(jìn)行超操作的值)的內(nèi)容可以移交給ASP網(wǎng)頁(yè)中的腳本。也就是說(shuō),瀏覽器端擁有的是服務(wù)器分配的一個(gè)會(huì)話ID號(hào),當(dāng)我們有請(qǐng)求的時(shí)候,服務(wù)器可以通過(guò)這個(gè)ID號(hào),查找相應(yīng)Session對(duì)象的值,也就實(shí)現(xiàn)了區(qū)分不同的瀏覽器。
利用
文筆不好,不知道大家從前面的原理部分是否對(duì)Session有了一定的認(rèn)識(shí)?,F(xiàn)在我們來(lái)看看《DreamWeaver引發(fā)網(wǎng)絡(luò)危機(jī)》一文是如何利用Session會(huì)話的。
已有某網(wǎng)站abc.com,下有登錄頁(yè):Login.asp,成功登錄后轉(zhuǎn)向可以看到敏感信息的OK.asp(設(shè)有訪問(wèn)限制,驗(yàn)證通過(guò)則顯示),否則轉(zhuǎn)向Fail.asp。
在該文中,作者是想先構(gòu)造一個(gè)hack.asp的網(wǎng)頁(yè),通過(guò)瀏覽該網(wǎng)頁(yè),建立Session會(huì)話,并設(shè)置一下Session驗(yàn)證時(shí)所需要的值,然后直接在地址欄輸入登錄以后的網(wǎng)頁(yè)ok.asp,由于ok.asp是通過(guò)Session來(lái)驗(yàn)證的,所以作者認(rèn)為這樣能成功。可是,通過(guò)前面的分析我們知道,如果ok.asp和hack.asp不在同一臺(tái)服務(wù)器上,這種攻擊是無(wú)法實(shí)現(xiàn)的。因?yàn)镾ession對(duì)象的值都是保留在服務(wù)器端,不可能像作者所說(shuō)的那樣:讓ASP執(zhí)行并在IE中留下Session值,IE所擁有的不過(guò)是一個(gè)Session的會(huì)話標(biāo)識(shí)號(hào)。如果我們?cè)诒緳C(jī)或其它服務(wù)器瀏覽了hack.asp,設(shè)置的驗(yàn)證值是在hack.asp所在的服務(wù)器上,但是在ok.asp所在的服務(wù)器上并沒有設(shè)置相應(yīng)的驗(yàn)證值,就連Session會(huì)話都沒有建立,又如何通過(guò)驗(yàn)證呢?可見如果ok.asp和hack.asp不在同一臺(tái)服務(wù)器上,就不會(huì)引發(fā)網(wǎng)絡(luò)危機(jī)了。
但是我們能通過(guò)這種Session欺騙的方法在入侵后給自己留一個(gè)不易查殺的后門!下面就以MyPower動(dòng)力3.5為例給大家演示,如何通過(guò)Session欺騙來(lái)達(dá)到直接登錄后臺(tái)目的。
我們先來(lái)看一下動(dòng)力的源代碼,在Admin_ChkPurview.asp中Session的驗(yàn)證:
AdminName=replace(session("AdminName"),"'","")
if AdminName="" then
call CloseConn()
response.redirect "Admin_login.asp"
end if
sqlGetAdmin="select * from Admin where UserName='" & AdminName & "'"
可見,動(dòng)力是通過(guò)Session對(duì)象中的AdminName變量來(lái)認(rèn)證的,并用它作為用戶名來(lái)查詢數(shù)據(jù)庫(kù),而AdminName的最初賦值是在Admin_ChkLogin.asp中,當(dāng)用戶成功登錄以后會(huì)給你兩個(gè)Session值:
session.Timeout=SessionTimeout
session("AdminName")=rs("username")
由于登錄以后都是通過(guò)Session對(duì)象來(lái)檢測(cè)的,所以我們?cè)谌魏文茉L問(wèn)的ASP網(wǎng)頁(yè)中可構(gòu)造以下語(yǔ)句(如Copyright.asp):
<%session("AdminName")="admin"%>
這樣就能通過(guò)Admin_ChkPurview.asp的Session驗(yàn)證了。其中,Admin是指存在的管理用戶名。這樣構(gòu)造后,即使我們?cè)谌怆u上的任何木馬都被查殺,只要管理員的用戶名沒有更改,我們可以先訪問(wèn)Copyright.asp,然后直接輸入Admin_Index.asp就能直接登錄后臺(tái)了!
那對(duì)于這種情況如何預(yù)防呢?其實(shí)動(dòng)力也用了一定的辦法,你會(huì)發(fā)現(xiàn)按這種方法輸入其它的后臺(tái)頁(yè)面無(wú)法成功,這是因?yàn)樵贏dmin_ChkPurview.asp還有如下驗(yàn)證:
ComeUrl=lcase(trim(request.ServerVariables("HTTP_REFERER")))
if ComeUrl="" then
response.write "<br><p align=center><font color='red'>對(duì)不起,為了系統(tǒng)安全,不允許直接輸入地址訪問(wèn)本系統(tǒng)的后臺(tái)管理頁(yè)面。</font></p>"
response.end
else
cUrl=trim("http://" & Request.ServerVariables("SERVER_NAME"))
if mid(ComeUrl,len(cUrl)+1,1)=":" then
cUrl=cUrl & ":" & Request.ServerVariables("SERVER_PORT")
end if
cUrl=lcase(cUrl & request.ServerVariables("SCRIPT_NAME"))
if lcase(left(ComeUrl,instrrev(ComeUrl,"/")))<>lcase(left(cUrl,instrrev(cUrl,"/"))) then
response.write "<br><p align=center><font color='red'>對(duì)不起,為了系統(tǒng)安全,不允許從外部鏈接地址訪問(wèn)本系統(tǒng)的后臺(tái)管理頁(yè)面。</font></p>"
response.end
end if
end if
可是在Admin_Index.asp頁(yè)面中并沒有調(diào)用Admin_ChkPurview.asp,所以我們能通過(guò)驗(yàn)證!那為什么不調(diào)用呢?不要問(wèn)我了,自己試一試就知道了。
后記
我們知道通過(guò)關(guān)閉瀏覽器能結(jié)束會(huì)話,但是這樣失去的只是服務(wù)器給我們分配的會(huì)話標(biāo)識(shí)號(hào)。而在Session會(huì)話的生命周期結(jié)束之前,服務(wù)器是不會(huì)將會(huì)話標(biāo)識(shí)號(hào)對(duì)應(yīng)的Session值從內(nèi)存中清除的。
小知識(shí):一般IIS的Session的生命周期默認(rèn)是20分鐘。
利用這個(gè)原理,如果我們通過(guò)一定途經(jīng)獲得了其它瀏覽器登錄服務(wù)器時(shí)建立的Session會(huì)話標(biāo)識(shí)號(hào)。那么我們就能用這個(gè)會(huì)話標(biāo)識(shí)號(hào)來(lái)得到被劫瀏覽器端同樣的權(quán)限。如果是一個(gè)管理員在登錄后臺(tái),那么我們?cè)诹硪慌_(tái)電腦上用這個(gè)會(huì)話標(biāo)識(shí)號(hào)通過(guò)Session欺騙同樣能登錄后臺(tái),從而就實(shí)現(xiàn)了異地的攻擊。具體方法歡迎到黑防論壇討論。
文章若有疏漏敬請(qǐng)兄弟指出,哪位兄弟若有更好的利用方法歡迎一起分享
既然是談Session欺騙,那么就先來(lái)看一下Session到底是什么,它是怎么工作的。在ASP中,服務(wù)器能通過(guò)Session對(duì)象區(qū)分不同的瀏覽器,因?yàn)镾ession對(duì)象是用來(lái)記錄瀏覽器端的變量,存儲(chǔ)一些如用戶名等比較敏感或有用的信息。這點(diǎn)似乎和Cookie有點(diǎn)像。但我們知道Cookie的值都是保存在客戶端的,而Session的值卻是保存在服務(wù)器端。當(dāng)每個(gè)訪問(wèn)者第一次瀏覽器訪問(wèn)服務(wù)器的一個(gè)ASP網(wǎng)頁(yè)的時(shí)候,服務(wù)器會(huì)為他創(chuàng)建一個(gè)新的并且獨(dú)立的Session對(duì)象,分配給該會(huì)話一個(gè)會(huì)話標(biāo)識(shí)號(hào),并把包含會(huì)話標(biāo)識(shí)符的特殊加密版本的一個(gè)Cookie(會(huì)話標(biāo)識(shí)號(hào))發(fā)送給客戶。由于在Cookie(會(huì)話標(biāo)識(shí)號(hào))中沒有提供Expires值,所以當(dāng)瀏覽器關(guān)閉時(shí),這個(gè)會(huì)話標(biāo)識(shí)號(hào)也就消失了。
每當(dāng)用戶訪問(wèn)這個(gè)ASP網(wǎng)站時(shí),ASP都會(huì)通過(guò)瀏覽器查找這個(gè)會(huì)話標(biāo)識(shí)號(hào)。命名為ASPSESSIONIDxxxxxxxx,其中每個(gè)x是一個(gè)字母符。我們?cè)谧ソ邮瞻鼤r(shí)能看見:
Set-Cookie: ASPSESSIONIDSQBBQQDS=GCINNKPDIGDNPEAOGLDFFFEM; path=/
但是這個(gè)Cookie(會(huì)話標(biāo)識(shí)號(hào))不會(huì)出現(xiàn)在Request.Cookies或Respsones.Cookies集合中,雖然ASP把它隱藏起來(lái),但仍保存在瀏覽器上。對(duì)于每個(gè)ASP網(wǎng)頁(yè)的請(qǐng)求,ASP都要查看該值。這個(gè)Cookie(會(huì)話標(biāo)識(shí)號(hào))包含的值,指明了這個(gè)用戶的會(huì)話。因此,相應(yīng)的Session對(duì)象(該對(duì)象已經(jīng)在內(nèi)存中,并且一直包含所有在前一頁(yè)面請(qǐng)求過(guò)程中進(jìn)行超操作的值)的內(nèi)容可以移交給ASP網(wǎng)頁(yè)中的腳本。也就是說(shuō),瀏覽器端擁有的是服務(wù)器分配的一個(gè)會(huì)話ID號(hào),當(dāng)我們有請(qǐng)求的時(shí)候,服務(wù)器可以通過(guò)這個(gè)ID號(hào),查找相應(yīng)Session對(duì)象的值,也就實(shí)現(xiàn)了區(qū)分不同的瀏覽器。
利用
文筆不好,不知道大家從前面的原理部分是否對(duì)Session有了一定的認(rèn)識(shí)?,F(xiàn)在我們來(lái)看看《DreamWeaver引發(fā)網(wǎng)絡(luò)危機(jī)》一文是如何利用Session會(huì)話的。
已有某網(wǎng)站abc.com,下有登錄頁(yè):Login.asp,成功登錄后轉(zhuǎn)向可以看到敏感信息的OK.asp(設(shè)有訪問(wèn)限制,驗(yàn)證通過(guò)則顯示),否則轉(zhuǎn)向Fail.asp。
在該文中,作者是想先構(gòu)造一個(gè)hack.asp的網(wǎng)頁(yè),通過(guò)瀏覽該網(wǎng)頁(yè),建立Session會(huì)話,并設(shè)置一下Session驗(yàn)證時(shí)所需要的值,然后直接在地址欄輸入登錄以后的網(wǎng)頁(yè)ok.asp,由于ok.asp是通過(guò)Session來(lái)驗(yàn)證的,所以作者認(rèn)為這樣能成功。可是,通過(guò)前面的分析我們知道,如果ok.asp和hack.asp不在同一臺(tái)服務(wù)器上,這種攻擊是無(wú)法實(shí)現(xiàn)的。因?yàn)镾ession對(duì)象的值都是保留在服務(wù)器端,不可能像作者所說(shuō)的那樣:讓ASP執(zhí)行并在IE中留下Session值,IE所擁有的不過(guò)是一個(gè)Session的會(huì)話標(biāo)識(shí)號(hào)。如果我們?cè)诒緳C(jī)或其它服務(wù)器瀏覽了hack.asp,設(shè)置的驗(yàn)證值是在hack.asp所在的服務(wù)器上,但是在ok.asp所在的服務(wù)器上并沒有設(shè)置相應(yīng)的驗(yàn)證值,就連Session會(huì)話都沒有建立,又如何通過(guò)驗(yàn)證呢?可見如果ok.asp和hack.asp不在同一臺(tái)服務(wù)器上,就不會(huì)引發(fā)網(wǎng)絡(luò)危機(jī)了。
但是我們能通過(guò)這種Session欺騙的方法在入侵后給自己留一個(gè)不易查殺的后門!下面就以MyPower動(dòng)力3.5為例給大家演示,如何通過(guò)Session欺騙來(lái)達(dá)到直接登錄后臺(tái)目的。
我們先來(lái)看一下動(dòng)力的源代碼,在Admin_ChkPurview.asp中Session的驗(yàn)證:
AdminName=replace(session("AdminName"),"'","")
if AdminName="" then
call CloseConn()
response.redirect "Admin_login.asp"
end if
sqlGetAdmin="select * from Admin where UserName='" & AdminName & "'"
可見,動(dòng)力是通過(guò)Session對(duì)象中的AdminName變量來(lái)認(rèn)證的,并用它作為用戶名來(lái)查詢數(shù)據(jù)庫(kù),而AdminName的最初賦值是在Admin_ChkLogin.asp中,當(dāng)用戶成功登錄以后會(huì)給你兩個(gè)Session值:
session.Timeout=SessionTimeout
session("AdminName")=rs("username")
由于登錄以后都是通過(guò)Session對(duì)象來(lái)檢測(cè)的,所以我們?cè)谌魏文茉L問(wèn)的ASP網(wǎng)頁(yè)中可構(gòu)造以下語(yǔ)句(如Copyright.asp):
<%session("AdminName")="admin"%>
這樣就能通過(guò)Admin_ChkPurview.asp的Session驗(yàn)證了。其中,Admin是指存在的管理用戶名。這樣構(gòu)造后,即使我們?cè)谌怆u上的任何木馬都被查殺,只要管理員的用戶名沒有更改,我們可以先訪問(wèn)Copyright.asp,然后直接輸入Admin_Index.asp就能直接登錄后臺(tái)了!
那對(duì)于這種情況如何預(yù)防呢?其實(shí)動(dòng)力也用了一定的辦法,你會(huì)發(fā)現(xiàn)按這種方法輸入其它的后臺(tái)頁(yè)面無(wú)法成功,這是因?yàn)樵贏dmin_ChkPurview.asp還有如下驗(yàn)證:
ComeUrl=lcase(trim(request.ServerVariables("HTTP_REFERER")))
if ComeUrl="" then
response.write "<br><p align=center><font color='red'>對(duì)不起,為了系統(tǒng)安全,不允許直接輸入地址訪問(wèn)本系統(tǒng)的后臺(tái)管理頁(yè)面。</font></p>"
response.end
else
cUrl=trim("http://" & Request.ServerVariables("SERVER_NAME"))
if mid(ComeUrl,len(cUrl)+1,1)=":" then
cUrl=cUrl & ":" & Request.ServerVariables("SERVER_PORT")
end if
cUrl=lcase(cUrl & request.ServerVariables("SCRIPT_NAME"))
if lcase(left(ComeUrl,instrrev(ComeUrl,"/")))<>lcase(left(cUrl,instrrev(cUrl,"/"))) then
response.write "<br><p align=center><font color='red'>對(duì)不起,為了系統(tǒng)安全,不允許從外部鏈接地址訪問(wèn)本系統(tǒng)的后臺(tái)管理頁(yè)面。</font></p>"
response.end
end if
end if
可是在Admin_Index.asp頁(yè)面中并沒有調(diào)用Admin_ChkPurview.asp,所以我們能通過(guò)驗(yàn)證!那為什么不調(diào)用呢?不要問(wèn)我了,自己試一試就知道了。
后記
我們知道通過(guò)關(guān)閉瀏覽器能結(jié)束會(huì)話,但是這樣失去的只是服務(wù)器給我們分配的會(huì)話標(biāo)識(shí)號(hào)。而在Session會(huì)話的生命周期結(jié)束之前,服務(wù)器是不會(huì)將會(huì)話標(biāo)識(shí)號(hào)對(duì)應(yīng)的Session值從內(nèi)存中清除的。
小知識(shí):一般IIS的Session的生命周期默認(rèn)是20分鐘。
利用這個(gè)原理,如果我們通過(guò)一定途經(jīng)獲得了其它瀏覽器登錄服務(wù)器時(shí)建立的Session會(huì)話標(biāo)識(shí)號(hào)。那么我們就能用這個(gè)會(huì)話標(biāo)識(shí)號(hào)來(lái)得到被劫瀏覽器端同樣的權(quán)限。如果是一個(gè)管理員在登錄后臺(tái),那么我們?cè)诹硪慌_(tái)電腦上用這個(gè)會(huì)話標(biāo)識(shí)號(hào)通過(guò)Session欺騙同樣能登錄后臺(tái),從而就實(shí)現(xiàn)了異地的攻擊。具體方法歡迎到黑防論壇討論。
文章若有疏漏敬請(qǐng)兄弟指出,哪位兄弟若有更好的利用方法歡迎一起分享
相關(guān)文章
網(wǎng)友舉報(bào):屁屁寬頻軟件自帶木馬病毒(圖)
網(wǎng)友舉報(bào):屁屁寬頻軟件自帶木馬病毒(圖)...2007-01-01Dvbbs7.1 sp1 SQL版savepost.asp注入漏洞分析、利用及防范
Dvbbs7.1 sp1 SQL版savepost.asp注入漏洞分析、利用及防范...2007-02-02曉宇聽幽網(wǎng)站內(nèi)容管理系統(tǒng) V2.0
曉宇聽幽網(wǎng)站內(nèi)容管理系統(tǒng) V2.0...2007-01-01為動(dòng)網(wǎng)論壇添加一個(gè)密碼嗅探器(DVBBS)
為動(dòng)網(wǎng)論壇添加一個(gè)密碼嗅探器(DVBBS)...2007-01-01河南移動(dòng)網(wǎng)絡(luò)客服系統(tǒng)驗(yàn)證碼的缺陷分析和利用!
河南移動(dòng)網(wǎng)絡(luò)客服系統(tǒng)驗(yàn)證碼的缺陷分析和利用!...2007-01-01