2012-07-03 18 views
2

我正試圖創建一個java程序,導致程序Vulnserver中的緩衝區溢出。爲什麼printwriter會將我的信息分成兩個字符串?

每當我發送一個字符串超過4094個字符時,它會以兩個字符串接收命令命令。它再次將其分成8188個字符的三個字符串等。

它爲什麼這樣做?我該如何阻止它?我試圖發送命令TRUN,然後是5000 A。它不是因爲它與perl程序一起工作的接收程序。

package fuzzer; 

import java.io.FileNotFoundException; 
import java.io.PrintWriter; 
import java.net.Socket; 
import java.util.Scanner; 


public class VulnserverFuzz { 

public static Socket s; 
private static String Command = "TRUN ";//Command TRUN 

public static void main(String[] args) throws FileNotFoundException{ 


    PrintWriter pri = null; 
    try { 
     s = new Socket("127.0.0.1", 9999); 
     pri = new PrintWriter(s.getOutputStream(), true); 

    } catch (Exception e) {e.printStackTrace();} 
    (new Thread(new VulnThread())).start();//Starts thread to listen for response 

    Scanner input = new Scanner(System.in); 
    for(int k=0; k<5000; ++k){Command += "A";}// Add 5099 A's to Command 


    String bre = (Command); 
    pri.println(bre); 

    pri.flush(); 

    } 
} 

響應:
TRUN完成
未知命令

+0

不知道它是否有很大的不同,但它看起來像你在客戶端後啓動服務器線程。 (VulnThread())開始();如果你把它放在套接字連接之前會發生什麼? – vcetinick

+0

對不起,我認爲我的編輯之前保存。 vulnthread從掃描器獲取來自服務器的響應。 Vulneserver是一個單獨的可執行文件。 – user1500007

回答

0

我沒有閱讀手冊 - 但我認爲你從服務器得到的迴應是,一個單一的命令。

你跑TRUN AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA... - 所以它試圖運行命令AAAAAAAAAAAAAAA...

迴應是: TRUN Completed - 表示它運行了TRUN命令。
Unknown Command - 表示指定爲參數(AAAAAAAAAA...)的命令未知。

沒有理由爲什麼你的代碼應該拆分請求。

嘗試發送命令TRUN AAA進行驗證 - 您應該得到相同的輸出。

相關問題