網上流傳可以利用MSWinsock控制項實現,這是不好滴。因為這是個第三方組件,呵呵,幾率相當小,既然要殺人滅口,嘿嘿,肯定要採用一套通殺的方法才是。
Serv-U伺服器管理那裡使用了FTP協議,所以我們應該研究一下FTP協議先。
正常的FTP協議的認證過程:
220 Serv-U FTP Server v5.2 for WinSock ready...
user lake2
331 User name okay, need password.
pass lake2lake2
230 User logged in, proceed.
……
現在我亂來:
220 Serv-U FTP Server v5.2 for WinSock ready...
Hi, I'm Bill Gates!
530 Not logged in.
Open!
530 Not logged in.
I am hacker !
530 Not logged in.
Give you money
530 Not logged in.
user lake2
331 User name okay, need password.
pass lake2lake2
230 User logged in, proceed.
……
注意,如果期待的資料不是user XXX,Serv-U將返回錯誤資訊並一直等待正確的登陸命令。暗示著什麼呢,呵呵,暗示我們要成功啦。
最近用XMLHTTP組件比較多,這個系統內建群組件就是利用HTTP協議發送和接收資料。我們將利用這個組件實現Serv-U的提權。現在的問題在於我們怎麼把FTP協議通過HTTP協議發送出去呢?
嘿嘿,沒看到剛才我辛辛苦苦測試的結果麼,只要利用POST方式提交資料,POST的內容是FTP命令就行啦,因為前面的HTTP報文頭會被Serv-U認為是非法的命令而忽略,而POST的內容即FTP命令就會被接受執行!
由於XMLHTTP及Serv-U的特性,又帶來一系列問題:XMLHTTP沒有逾時設定,由於等不到伺服器響應的HTTP報文頭,會一直掛起;XMLHTTP是單使用者且複用Socket的,根據HTTP協議版本對同一目標只有2個或者4個串連,所以執行一次(或者2次)添加域刪除域之後就不能再次串連了;Serv-U的管理員模式使用的偽FTP協議,也就是不認QUIT命令,造成串連不能斷開(用ServerXMLHTTP可以很好的解決這些問題,但是僅限於XP下,2000/2003上又不行,鬱悶)。
所以只有用一個折中的辦法來解決以上的若干問題:
1、XMLHTTP先添加FTP使用者;
2、自己登陸FTP用新帳號執行N多命令提權;
3、XMLHTTP刪除新使用者
你必須記得,因為串連不能斷開,你只有一次或者兩次執行上述步驟的機會!如果還想再來,呵呵,等著IIS或者FTP重啟吧。
好在以前我也寫過一個利用有執行許可權的FTP帳號執行命令的程式,使得第2步方便了不少,程式這裡下載之:http://xiazai.jb51.net/tools/hacktools/ftpshell.rar
完整的ASP代碼這裡下載:http://xiazai.jb51.net/tools/hacktools/suASP.rar
該ASP程式將在連接埠21添加一個使用者名稱lake密碼admin123的執行許可權使用者,有什麼特殊情況(比如ftp連接埠不是21),自己改代碼吧。
舉一反三,似乎這樣也可以在特定情況利用asp來訪問FTP做些事情,不過那是你的事情了。
搞定散夥收工走人,enjoy it!