mirror of
https://github.com/projectdiscovery/nuclei.git
synced 2025-12-29 17:43:01 +00:00
Misc fixes
This commit is contained in:
parent
424aab7f4a
commit
2cc6b2283e
@ -1,6 +1,7 @@
|
||||
package http
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
@ -280,8 +281,7 @@ func (r *Request) executeRequest(reqURL string, request *generatedRequest, dynam
|
||||
|
||||
duration := time.Since(timeStart)
|
||||
|
||||
|
||||
dumpedResponse, err := httputil.DumpResponse(resp, true)
|
||||
dumpedResponseHeaders, err := httputil.DumpResponse(resp, false)
|
||||
if err != nil {
|
||||
_, _ = io.CopyN(ioutil.Discard, resp.Body, drainReqSize)
|
||||
resp.Body.Close()
|
||||
@ -310,16 +310,21 @@ func (r *Request) executeRequest(reqURL string, request *generatedRequest, dynam
|
||||
// net/http doesn't automatically decompress the response body if an
|
||||
// encoding has been specified by the user in the request so in case we have to
|
||||
// manually do it.
|
||||
data, err = handleDecompression(request, data)
|
||||
dataOrig := data
|
||||
data, err = handleDecompression(resp, data)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not decompress http body")
|
||||
}
|
||||
|
||||
// Dump response - step 2 - replace gzip body with deflated one or with itself (NOP operation)
|
||||
if r.options.Options.Debug || r.options.Options.DebugResponse {
|
||||
dumpedResponse = bytes.ReplaceAll(dumpedResponse, dataOrig, data)
|
||||
redirectedResponse = bytes.ReplaceAll(redirectedResponse, dataOrig, data)
|
||||
dumpedResponseBuilder := &bytes.Buffer{}
|
||||
dumpedResponseBuilder.Write(dumpedResponseHeaders)
|
||||
dumpedResponseBuilder.Write(data)
|
||||
dumpedResponse := dumpedResponseBuilder.Bytes()
|
||||
redirectedResponse = bytes.ReplaceAll(redirectedResponse, dataOrig, data)
|
||||
|
||||
// Dump response - step 2 - replace gzip body with deflated one or with itself (NOP operation)
|
||||
if r.options.Options.Debug || r.options.Options.DebugResponse {
|
||||
gologger.Info().Msgf("[%s] Dumped HTTP response for %s\n\n", r.options.TemplateID, formedURL)
|
||||
gologger.Print().Msgf("%s", string(redirectedResponse))
|
||||
}
|
||||
|
||||
@ -95,22 +95,22 @@ func dump(req *generatedRequest, reqURL string) ([]byte, error) {
|
||||
}
|
||||
|
||||
// handleDecompression if the user specified a custom encoding (as golang transport doesn't do this automatically)
|
||||
func handleDecompression(r *generatedRequest, bodyOrig []byte) (bodyDec []byte, err error) {
|
||||
if r.request == nil {
|
||||
func handleDecompression(resp *http.Response, bodyOrig []byte) (bodyDec []byte, err error) {
|
||||
if resp == nil {
|
||||
return bodyOrig, nil
|
||||
}
|
||||
|
||||
encodingHeader := strings.TrimSpace(strings.ToLower(r.request.Header.Get("Accept-Encoding")))
|
||||
if encodingHeader == "gzip" || encodingHeader == "gzip, deflate" {
|
||||
encodingHeader := strings.TrimSpace(strings.ToLower(resp.Header.Get("Content-Encoding")))
|
||||
if strings.Contains(encodingHeader, "gzip") {
|
||||
gzipreader, err := gzip.NewReader(bytes.NewReader(bodyOrig))
|
||||
if err != nil {
|
||||
return bodyDec, err
|
||||
return bodyOrig, err
|
||||
}
|
||||
defer gzipreader.Close()
|
||||
|
||||
bodyDec, err = ioutil.ReadAll(gzipreader)
|
||||
if err != nil {
|
||||
return bodyDec, err
|
||||
return bodyOrig, err
|
||||
}
|
||||
return bodyDec, nil
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user