我正在尝试创建一个 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/