*歡迎關注我的 Github,會在這里持續更新滲透測試和 OSCP 考試的相關學習資源。
%00和0x00:
0x00是十六進制的0
%00是url加密,是url的終止符
burpsuite上傳截斷估計很多人都用過,但具體原理是什么,還是有很多人不明白。我自己也存在很多疑惑,所以今天就花點時間認真梳理一下,與君共勉。
一、簡介
截斷的產生核心,就是chr(0)字符 。
這個字符即不為空(Null),也不是空字符(""),更不是空格!
當程序在輸出含有chr(0)變量時,chr(0)后面的數據會被停止,換句話說,就是誤把它當成結束符,后面的數據直接忽略,這就導致漏洞產生的原因。
二、后端語言
2.1 PHP
2.1.1
在php 5.3.4中修復了0
字符,但是在之前的版本中仍然危害巨大。
簡單測試一下 (PHP 版本<5.3.4)
<?php
$data = $_GET["filename"]`;
echo $data;
?>
url中輸入xx.php?filename=test.php%00.txt
,實際輸出為test.php
.
常見利用方法:
- 1.上傳時路徑可控,使用00截斷
- 2.文件下載時,00截斷繞過白名單檢查
- 3.文件包含時,00截斷后面限制(主要是本地包含時)
- 4.其它與文件操作有關的地方都可能使用00截斷。
2.1.2
參考文章:https://www.cnblogs.com/cyjaysun/p/4390930.html
2.2 ASP
在文件上傳路徑可控時出現:
<%
response.write(request("Filename"))
%>
傳入filename=test.asp%00.txt
, 獲得參數值是test.asp
,asp 會自動截斷 %00 后面的內容。
2.3 JSP
<%
String temp=request.getRealPath("/")+request.getParameter("path");
out.println(temp);
String ext = temp.substring(temp.lastIndexOf(".") + 1);
out.println(ext);
%>
傳入path=shell.jsp%00.txt
獲得后綴是txt
,但是操作文件的api是使用 C 實現會導致00截斷。因此這個與php相似,利用場景是文件上傳 文件下載等。
三、Web容器解析漏洞
3.1 我們都知道windows2003 + IIS6.0下,如果目錄結構中有xxx.asp這樣的目錄,那么所有這個目錄下的文件不管擴展名為什么,都會當作asp來解析。
我們一般稱這個漏洞為 windows2003+iis6.0目錄解析漏洞。
3.2
image.png
image.png