java - 为什么打印者将我的信息分成两个字符串?

标签 java string io

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

每当我发送超过 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 完成
未知命令

最佳答案

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

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

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

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

尝试发送命令 TRUN AAA 来验证 - 你应该得到相同的输出。

关于java - 为什么打印者将我的信息分成两个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11319535/

相关文章:

ios - 使用 swift 在文本标签中的文本之间嵌入一个图标

java - 正确重新组装拆分文件

java - JDK 7 类文件向后兼容 JDK 6

java - 使用 Axis2 创建 Web 服务的步骤 - 客户端代码

java - Java 中的前向引用

MySQL 字符串操作

string - Go中的string和[]byte有什么区别?

Java为什么 "readAllBytes"和 "readNBytes"方法不同步?

c++ - fstream:检查错误的最正确方法

java - JAVA中用于使用XML黑白两个系统进行数据交换的最佳加密解密算法