Skip to content

Instantly share code, notes, and snippets.

@mgeeky
Last active April 14, 2025 15:13
Show Gist options
  • Save mgeeky/2d7f8c2a6ffbfd23301e1e2de0312087 to your computer and use it in GitHub Desktop.
Save mgeeky/2d7f8c2a6ffbfd23301e1e2de0312087 to your computer and use it in GitHub Desktop.

Revisions

  1. mgeeky revised this gist Apr 7, 2020. 1 changed file with 0 additions and 1 deletion.
    1 change: 0 additions & 1 deletion httprequest.cna
    Original file line number Diff line number Diff line change
    @@ -10,7 +10,6 @@ import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import javax.net.ssl.HttpsURLConnection;
    import java.net.URL;


  2. mgeeky created this gist Apr 7, 2020.
    84 changes: 84 additions & 0 deletions httprequest.cna
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,84 @@
    #
    # Safe & sound HTTP request implementation for Cobalt Strike 4.0 Aggressor Script.
    # Works with HTTP & HTTPS, GET/POST/etc. + redirections.
    #
    # Mariusz B. / mgeeky
    #

    import java.net.URLEncoder;
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import javax.net.ssl.HttpsURLConnection;
    import java.net.URL;


    #
    # httpRequest($method, $url, $body);
    #
    sub httpRequest {
    $method = $1;
    $url = $2;
    $body = $3;
    $n = 0;

    if(size(@_) == 4) { $n = $4; }

    $bodyLen = strlen($body);
    $maxRedirectsAllowed = 10;
    if ($n > $maxRedirectsAllowed) {
    warn("Exceeded maximum number of redirects: $method $url ");
    return "";
    }

    try
    {
    $urlobj = [new java.net.URL: $url];
    $con = $null;
    $con = [$urlobj openConnection];
    [$con setRequestMethod: $method];
    [$con setInstanceFollowRedirects: true];
    [$con setRequestProperty: "Accept", "*/*"];
    [$con setRequestProperty: "Cache-Control", "max-age=0"];
    [$con setRequestProperty: "Connection", "keep-alive"];
    [$con setRequestProperty: "User-Agent", $USER_AGENT];

    if($bodyLen > 0) {
    [$con setDoOutput: true];
    [$con setRequestProperty: "Content-Type", "application/x-www-form-urlencoded"];
    }

    $outstream = [$con getOutputStream];
    if($bodyLen > 0) {
    [$outstream write: [$body getBytes]];
    }

    $inputstream = [$con getInputStream];
    $handle = [SleepUtils getIOHandle: $inputstream, $outstream];
    $responseCode = [$con getResponseCode];

    if(($responseCode >= 301) && ($responseCode <= 304)) {
    $loc = [$con getHeaderField: "Location"];
    return httpRequest($method, $loc, $body, $n + 1);
    }

    @content = readAll($handle);
    $response = "";
    foreach $line (@content) {
    $response .= $line . "\r\n";
    }

    if((strlen($response) > 2) && (right($response, 2) eq "\r\n")) {
    $response = substr($response, 0, strlen($response) - 2);
    }

    return $response;
    }
    catch $message
    {
    warn("HTTP Request failed: $method $url : $message ");
    printAll(getStackTrace());
    return "";
    }
    }