天天看點

CCProxy Telnet Proxy Ping遠端棧溢出分析

導讀:

  By:瘋狗(B.C.T)

  簡單的了解了一下漏洞原因,問題出在ping上,首先先觸發這個漏洞看看效果。

  開啟CC,然後telnet 127.0.0.1 23,出現如下提示

  CCProxy Telnet>CCProxy Telnet Service Ready.

  CCProxy Telnet>

  直接輸入ping AAAAAAAAAA...(超長的A),程式崩潰了,看看提示

  

  

CCProxy Telnet Proxy Ping遠端棧溢出分析

  

  程式在讀取41414141也就是AAAA時出錯,41414141是我送出的超長的AAA...并不是正确的指令,況且這裡的記憶體還是為配置設定的,典型的棧溢出。

  漏洞分析暫時略過,已經被分析的很透徹了,CC在發ping指令的時候用的是send函數和WSASend函數, send一次隻能發送一個緩沖區,而且效率底下,WSASend可以發送多個緩沖區,而且性能要比send高,是以CC肯定使用了WSASend,經過一些人的分析确實如此。

  OD載入,動态分析,這次我使用了cooldiyer的檢測溢出點的程式,在xfocus下的好code,工具的原理(借助于英文26個字母實作了26進制,4位最多可以到ZZZZ也就是26的4次方就是十進制的456976十六進制的0x6f910,原理是因為編譯器位元組對齊預設情況下是按雙字(4bytes)對齊的)

  AAAD 4 0x04 EIP ==> 0x44414141

  AAAH 8 0x08 EIP ==> 0x48414141

  AAAL 12 0x0c EIP ==> 0x4c414141

  ...

  生成了3000個字元進行送出後讀取的數值變成了這樣

  

  

CCProxy Telnet Proxy Ping遠端棧溢出分析

  

  變成了424e4241

  手工調試跟蹤了幾次,檢視寄存器視窗,發現了想要的東西,被覆寫的ESP,還有面目全非的EIP:)

  

  

CCProxy Telnet Proxy Ping遠端棧溢出分析

  

  (cooldiyer的那個小程式)123.exe -c 3000 -v 輸出記憶體資料

  然後查找EIP現在的值0x424e4241

  ABNB 1016 0x3f8 EIP ==> 0x424e4241

  OK,EIP的位置就是送出1012個字元後的位置

  在用相同的方法找ESP指向的位置,尋找AAAH

  AAAH 8 0x08 EIP ==> 0x48414141

  GOOD,是字元串開始的4 字元,為什麼?1字元=2位元組,2×4=8...

  關于exploit,不想浪費太多精力在上面,昨天就浪費好多時間在寫shelllcode上,網上那麼多随便找個不就得了:(

  不過還是要分析下這個exploit中感興趣的部分

  memset(Buff, 0x90, sizeof(Buff)-1); //NOP空操作填充 程式不中斷 一直往下走

  ...

  memcpy(&Buff[1017], JUMPESP,4); //ping+空格+1012個字元正好到EIP:) 1017個字元厄

  memcpy(&Buff[9], shellcode,sizeof(shellcode)-1); // ping+空格+4 控制ESP

  後來得知由于填充資料太長,shellcode被放在了前面的1017個字元中,而且程式在前面有個ESI可以被控制,指向的正是填充資料區域,是以利用格式就是ping+空格+AAAA...+shellcode+jmp esi。

  ok,分析到此結束,這次分析主要依靠cooldiyer的小工具和其分析思路,拜一個,但是在學習别人的同時自己了解才是最重要的!!溢出分析真的很有意思,近期就會投入到工作範圍中了吧:)

繼續閱讀