rce臨時檔案上傳[RCE1]P8

centos08發表於2024-03-12

rce臨時檔案上傳[RCE1]P8

/[A-Za-z0-9!~^|&]+/i 匹配了我能想到的所有繞過方法,想到臨時檔案上傳,是否可以執行/tmp/?????????這個檔案呢

image-20240311201736187

/tmp/????????? 此檔案是php的一個預設臨時檔案,檔名是隨機的,如果php.ini沒有設定upload_tmp_dir的時候,預設會讀寫系統的臨時檔案目錄,(Windows 預設為 C:/windows/temp,Linux 為 /tmp)。

但是是當向伺服器上任意php檔案以multipart/form-data方式提交請求上傳資料時,才會產生臨時檔案,可以透過phpinfo.php的資訊洩露獲得臨時檔案的路徑,便可以讓我們構造payload。

image-20240311233904982

php post上傳:建立臨時檔案 > 呼叫相關php指令碼 > 在phpinfo中回顯檔案資訊 > 刪除臨時檔案

在linux系統中./可執行可執行檔案,在檔案中執行一個執行shell指令碼的直譯器,直譯器有很多,例如:

#!/bin/sh
#!/bin/bash
#!/usr/bin/perl
#!/usr/bin/tcl
#!/bin/sed -f
#!/usr/awk -f

./shell的時候相當於/bin/bash shell 

還有很多有意思的用法
https://zhuanlan.zhihu.com/p/666028747

臨時檔案內容:

#!/bin/sh

id

執行臨時檔案命令

./tmp/????????? 構造payload >> ./???/????????? >> ./???/????????[@-[]

由於/???/?????????無法精準匹配,但是這個臨時檔案的特點是大小寫字母混合隨機生成的,所以透過找到一個表示“大寫字母”的glob萬用字元,來實現精準匹配。

glob的萬用字元我們常用的有(* ? ** []) 在[1-9]中golb支援裡面表示一個範圍,可以使用ascii找到大寫字母範圍的一個字元,大寫字母的範圍位於"@"和[之間,並且不分字元前後順序。

image-20240311235556022

構建資料包:

需要構造一個post上傳檔案的資料包,從網上隨便找一段html的檔案上傳程式碼,然後抓包攔截,把目標ip修改一下就好了。

我這裡程式碼是 multipart/form-data 的方式提交請求上傳資料的,別的我沒有試過不知道有沒有問題,注意在multipart/form-data方式中,作為分割使用的boundary字串比定義處前面多倆--

附上html程式碼:

<html>
	<head></head>
	<body> 
		<form action="upload.php" method="post" enctype="multipart/form-data"> 
	   		<label for="file">Filename:</label> 
	   		<input type="file" name="file" id="file" /><br /> 
	   		<input type="submit" name="submit" value="Submit" /> 
  		</form>  
 	</body>
</html>

image-20240312000924101

相關文章