为什么printwriter将我的消息分成两个字符串?

时间:2012-07-03 21:34:39

标签: java string io

我正在尝试创建一个java程序,导致程序Vulnserver中的缓冲区溢出。

每当我发送一个超过4094个字符的字符串时,它会接收命令命令为两个字符串。它再将它分成3个字符串,分别为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完成了 未知命令

1 个答案:

答案 0 :(得分:0)

我没有阅读手册 - 但我认为您从服务器获得的响应是​​单个命令的响应。

您运行了TRUN AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA... - 因此它尝试运行命令AAAAAAAAAAAAAAA...

回应是: TRUN Completed - 表示它运行了TRUN命令 Unknown Command - 表示指定为参数(AAAAAAAAAA...)的命令未知。

您的代码没有理由拆分请求。

尝试发送命令TRUN AAA进行验证 - 您应该获得相同的输出。