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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

upload-labs_pass12_文件名截断_URL要编码为%00_pass13_文件名截断_Hex修改为00

發(fā)布時間:2023/12/19 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 upload-labs_pass12_文件名截断_URL要编码为%00_pass13_文件名截断_Hex修改为00 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

關于靶場說幾點:單純用phpstudy 可能無法復現(xiàn)所有的漏洞,而且phpstudy中的php可能是線程不安全的,所以建議大家在自己本機或者虛擬機的中親自搭建一下apache和php的環(huán)境,便于復現(xiàn)upload-labs的所有靶場環(huán)境。配置有問題的可以參考我寫的這篇文章:
https://blog.csdn.net/qq_51550750/article/details/124062273

pass12-環(huán)境說明:

這一關啊真是奇葩,試了一圈,只有php版本是下面這個才成功:5.5.9nts

如果你也沒有成功,也看看這個這個版本你行不行吧。

其實 upload-labs這個靶場要是實在做不出來也沒有關系,因為牽扯到環(huán)境問題,還牽扯到php的版本問題。沒做出來要放棄也很正常,不用灰心。

pass12-源碼提示

源碼:

$is_upload = false; $msg = null; if(isset($_POST['submit'])){$ext_arr = array('jpg','png','gif');$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);if(in_array($file_ext,$ext_arr)){$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = '上傳出錯!';}} else{$msg = "只允許上傳.jpg|.png|.gif類型文件!";} }

提示:

源碼中,限制了文件名(白名單,‘jpg’,‘png’,‘gif’)

再注意一下上傳的路徑:

$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

有一個參數(shù)是save_path

上傳抓包:

上傳shell.php

看到save_path在URL中的路徑,其實提示中說的“路徑可控”就是這個意思。
在這個請求頭中,可以看到一個比較特別的字段:

Content-Disposition: form-data; name="upload_file"; filename="shell.php"

介紹一下Content-Disposition這個字段

首先學習安全的小伙伴們一定對于Content-Type這個字段很熟悉。在客戶端,發(fā)送Content-Type這個字段是告訴服務器應該響應給客戶端什么字段,在服務端,這個字段的發(fā)送就是告訴客戶端應該以什么格式去解析數(shù)據(jù)包。

而Content-Disposition這個字段其實是作為對下載文件的一個標識字段
可以看一下firefox網(wǎng)站對于這個字段的說明:

Content-Disposition這個字段簡單來說就是:當瀏覽器彈出一個下載框的時候,會給出一個文件名。比如在服務器上放置了一個文件,通過Content-Disposition去響應給瀏覽器,指定文件名叫做1.txt,打開保存框的時候,文件名就是1.txt。
但是看到我們包中的這個字段,是放在請求中使用的。

Content-Disposition: form-data; name=“upload_file”; filename=“shell.php”

前面有一個保存路徑,后面有一個文件名,估計filename會用來做白名單的校驗,“…/upload/”會用來做實際的文件保存。

如何繞過?

1.將shell.php改成shell.png(或者其他圖片的格式,在白名單中的格式)
2.路徑“…/upload/”改成“…/upload/shell.php”

這時候會有一個問題:路徑會和文件名進行拼接,變成:“…/upload/shell.php/shell.png”
那不就會有問題嗎?

其實pass12和pass13都要用到一個知識點:

文件名截斷

什么是文件名截斷?

簡單來說,就是在文件名最后加上一些特殊的字符或者控制字符,當程序遇到這個字符的時候,就會認為字符串結束了,后面的會跳過忽略。

所以我們在pass12這一關中,可以這么做:在文件名之后加一些特殊的字符,再拼接一些在白名單之中的后綴。

因此,我們就可以繞過白名單,又能使得一些特殊控制字符使無效而最終保存在靶機上的是我們想要的文件名。

截斷字符:

chr(0),類似于C++的"\0"

filename=test.php%00.txt -------------- filename=test.php

URL encodeASCII value
%000

在很多編程語言(比如java,PHP)中,ASCII中的0都是作為字符串的結束符號來看待的。

產(chǎn)生這個字符:
特別注意:這一關的路徑實在URL中的,所以需要對0進行URL編碼

所以最后我們應該這么改正:

上傳之后,貌似是成功了:

但是我查看文件路徑的時候非常奇怪:

而且是404頁面:

嘗試訪問:
/upload-labs/upload/shell.php
是可以的。

嘗試連接蟻劍:

沒有問題。pass12就可以了

pass13-源碼和提示

第13關其實和第12關是同一組。

源碼:

$is_upload = false; $msg = null; if(isset($_POST['submit'])){$ext_arr = array('jpg','png','gif');$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);if(in_array($file_ext,$ext_arr)){$temp_file = $_FILES['upload_file']['tmp_name'];$img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;if(move_uploaded_file($temp_file,$img_path)){$is_upload = true;} else {$msg = "上傳失敗";}} else {$msg = "只允許上傳.jpg|.png|.gif類型文件!";} }

提示:

提示和pass12是一樣的。源碼好像也是一致的。

具體區(qū)別通過下面的文件上傳來抓包獲取:

pass13-文件上傳和抓包

上傳文件之前我先把自己環(huán)境的已經(jīng)上傳的文件清除了:

然后開始上傳shell.php并且抓包。

一抓包就能看到區(qū)別:

可以看到保存路徑和文件名都放在了Content-Disposition中。

按照上一關的套路,應該進行差不多的修改。

特別注意這里應該寫十六進制的%00
利用Hex這個模塊

首先用+進行占位(注意+的十六進制是2b)

然后切換到Hex將其改為00

改之前:

改之后:

再回到Raw中,注意,看起來沒有其實是有的。

最終的效果是:

放包。
上傳成功。

然后連接webshell

Pass也成功了。

pass1-pass13總結

pass繞過姿勢
1前端繞過
2Content-Type
3等價擴展名
4.htaccess文件
6大小寫過濾不全面,一樣大小寫繞過
7擴展名最后加一個空格
8擴展名最后加一個點
9擴展名最后加上::$DATA
10擴展名最后加上點空點
11雙寫文件擴展名
12文件名截斷(URL)%00
13文件名截斷(HEX)加號[2b]占位再改為00

歡迎關注公眾號“小東方不敗”。寫博客不容易,歡迎交流!!

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結

以上是生活随笔為你收集整理的upload-labs_pass12_文件名截断_URL要编码为%00_pass13_文件名截断_Hex修改为00的全部內容,希望文章能夠幫你解決所遇到的問題。

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