最新TeamPass SQL注入漏洞(CVE request)

颓废 2019年5月19日09:41:05评论575 views字数 2716阅读9分3秒阅读模式
摘要

TeamPass所有版本(2.1.26, 2.1.25, 2.1.24)

2016年7月11日在seclists.org 上披露了TeamPass全版本(2.1.26, 2.1.25, 2.1.24)存在两处SQL注入漏洞。


0x01 影响范围

TeamPass所有版本(2.1.26, 2.1.25, 2.1.24)

最新TeamPass SQL注入漏洞(CVE request)

0x02 漏洞描述

2016年7月11日在seclists.org上披露了TeamPass全版本(2.1.26, 2.1.25, 2.1.24)存在两处SQL注入漏洞。

0x03 漏洞详情

TeamPass在github上发布了补丁:
https://github.com/nilsteampassnet/TeamPass/commit/7bf6c63c4727a6ba9d65610e59ccbc25527a6fca
根据补丁,我们可以简单分析下该漏洞:

注入一:

缺陷代码sources/items.queries.php,第2504行~2540行代码

case "send_email":     if ($_POST['key'] != $_SESSION['key']) {         echo '[{"error" : "something_wrong"}]';         break;     } else {         if (!empty($_POST['content'])) {             $content = explode(',', $_POST['content']);         }         // get links url         if (empty($_SESSION['settings']['email_server_url'])) {             $_SESSION['settings']['email_server_url'] = $_SESSION['settings']['cpassman_url'];         }         if ($_POST['cat'] == "request_access_to_author") {             $dataAuthor = DB::queryfirstrow("SELECT email,login FROM " . prefix_table("users") . " WHERE id= " . $content[1]);             $dataItem = DB::queryfirstrow("SELECT label FROM " . prefix_table("items") . " WHERE id= " . $content[0]);             $ret = @sendEmail(                 $LANG['email_request_access_subject'],                 str_replace(array('#tp_item_author#', '#tp_user#', '#tp_item#'), array(" " . addslashes($dataAuthor['login']), addslashes($_SESSION['login']), addslashes($dataItem['label'])), $LANG['email_request_access_mail']),                 $dataAuthor['email']             );         } elseif ($_POST['cat'] == "share_this_item") {             //这里未对$_POST['id']进行单引号保护             $dataItem = DB::queryfirstrow("SELECT label,id_tree FROM " . prefix_table("items") . " WHERE id= " . $_POST['id']);              // send email             $ret = @sendEmail(                 $LANG['email_share_item_subject'],                 str_replace(                     array('#tp_link#', '#tp_user#', '#tp_item#'),                     array($_SESSION['settings']['email_server_url'] . '/index.php?page=items&group=' . $dataItem['id_tree'] . '&id=' . $_POST['id'], addslashes($_SESSION['login']), addslashes($dataItem['label'])),                     $LANG['email_share_item_mail']                 ),                 $_POST['receipt']             );         }         echo '[{' . $ret . '}]';     }     break;

查看上面缺陷代码发现参数$_POST[‘id’]在带入数据库查询之前没有单引号保护和有效的sql注入过滤,从而造成SQL注入漏洞。

注入二:

缺陷代码includes/libraries/Database/Meekrodb/db.class.php,第609~621行代码

// ----- BEGIN ERROR HANDLING if (!$sql || $db->error) {     if ($this->error_handler) {         $db_error = $db->error;         $db_errno = $db->errno;         $db->query(             "INSERT INTO " . $GLOBALS['pre'] . "log_system SET    date=" . time() . ",    qui=" . $_SESSION['user_id'] . ",    label='Query: " . addslashes($sql) . "<br />Error: " . addslashes($db_error) . "<br />@ " . $_SERVER['REQUEST_URI'] . "',    type='error'",             MYSQLI_USE_RESULT         );

在数据库查询发生错误时会执行这个insert语句,而$_SERVER[‘REQUEST_URI’]参数未进行sql注入过滤处理,下面测试使用的PHP版本是5.5无GPC了,所以可以进行SQL注入。

0x04 漏洞证明

注入一:
这里burpsuite抓包并使用XPATH注入,可以获取当前数据库user和版本如下:

最新TeamPass SQL注入漏洞(CVE request)

注入二:
在注入一的基础上加个延时即可再次注入如下:

最新TeamPass SQL注入漏洞(CVE request)

burp发现等待了10秒才有回显,然后mysql日志监控发现成功执行了该insert语句

INSERT INTO teampass_log_system SET    date=1468297513,    qui=1,    label='Query: SELECT label,id_tree FROM teampass_items WHERE id= -1/**/and/**/extractvalue(1,concat(0x7e,(select concat(user()))))#<br />Error: XPATH syntax error: /'~root@localhost/'<br />@ /teampass/sources/items.queries.php?'or/**/sleep(10)/**/or'1',    type='error'

本文由HackBraid整理总结

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
颓废
  • 本文由 发表于 2019年5月19日09:41:05
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   最新TeamPass SQL注入漏洞(CVE request)https://cn-sec.com/archives/68258.html

发表评论

匿名网友 填写信息