c0ny1 / passive-scan-client

Burp被动扫描流量转发插件
1.41k stars 170 forks source link

fixed a bug about the handle of GET request #20

Closed R4ph4e1-0x01 closed 3 years ago

R4ph4e1-0x01 commented 3 years ago

你好,c0ny1师傅: 我测试发现你的项目passive-scan-client v0.2转发burpsuit流量存在Bug,会将GET请求转换成POST。检查了项目源码后GET、POST请求发现共同使用了以下两个方法后建立流。

httpUrlConnection.setDoOutput(true)

httpUrlConnection.setDoInput(true)

GET请求不需要body,因而setDoOutput(true)后,即使body为空也会被误识别为POST请求。于是我修改了项目源码,c0ny1师傅有空可以push源码和编译最新的Releases。

        //设置控制请求方法的Flag
        String methodFlag = "";
        // 设置通用的请求属性
        for(String header:headers){
            if(header.startsWith("GET") ||
                    header.startsWith("POST") ||
                    header.startsWith("PUT")){
                if(header.startsWith("GET")){
                    methodFlag = "GET";
                }
                else if(header.startsWith("POST")||
                        header.startsWith("PUT")){
                    methodFlag = "POST";
                }//在循环中重复设置了methodFlag,代码非常的丑陋冗余,请见谅
                continue;
            }//判断结束后以键值对的方式获取header
            String[] h = header.split(":");
            String header_key = h[0].trim();
            String header_value = h[1].trim();
            httpsConn.setRequestProperty(header_key, header_value);
        }

       if (methodFlag.equals("GET")){
            // 发送GET请求必须设置如下两行
            httpsConn.setDoOutput(false);
            httpsConn.setDoInput(true);

            // 获取URLConnection对象的连接
            httpsConn.connect();
        }
        else if(methodFlag.equals("POST")){
            // 发送POST请求必须设置如下两行
            httpsConn.setDoOutput(true);
            httpsConn.setDoInput(true);

            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(httpsConn.getOutputStream());
            if(body != null) {
                // 发送请求参数
                out.print(new String(body));
            }
            // flush输出流的缓冲
            out.flush();
        }
c0ny1 commented 3 years ago

好的,感谢你的pr