零、前言
最近做專心web安全有一段時間了,但是目測后面的活會有些復雜,涉及到更多的中間件、底層安全、漏洞研究與安全建設等越來越復雜的東東,所以在這里想寫一個系列關於web安全基礎以及一些討巧的payload技巧以便於備忘。不是大神、博客內容非常基礎,如果真的有人看而且是大牛們,請不要噴我,歡迎指正我的錯誤(水平有限)。
一、文件上傳:
1、這本身是一個功能,但是如果沒做好,就成為一個大漏洞。本質:
對上傳文件沒有進行類型檢查,沒有做進一步處理,上傳文件保存路徑泄露,且可訪問可執行。
2、文件payload部分:
文件:
(1)一句話小馬
(2)大馬
(3)其他配置文件.htaccess / crossdomain.xml等
3、上傳文件的方式:
(1)直接上傳
(2)繞過前端擴展名限制上傳(firebug)
(3)繞過后端擴展名限制上傳:
#Apache的:1.php.rax.rax.rax。
#lighttpd的:xx.jpg/xx.php。
#IIS的:1.asp;abc.jpg,1.jpg%00.asp。
#Nginx:1.jpg 訪問的時候http://localhost/1.jpg/x.php 當版本低時,存在xx.jpg%00.php解析漏洞。
#低版本IIS 會將/asp/目錄下的所有文件都按照asp解析,或者webdav目錄下上傳.txt move 成.asp#
其他手段:
#截斷 1.php%00.jpg。
#轉換大小寫:1.PHP。
#修改文件類型對抗檢查content-type。
#終極大招:使用copy a.gif /b + b.php /a c.php 構造包含惡意代碼的正常類型文件。
4、防御:
(1)接受文件使用臨時路徑,然后轉存、文件名更換為隨機字符串。
(2)不泄露文件最終保存目錄。
(3)使用沒有解析漏洞的高版本服務器。
(4)嚴格限制上傳擴展名--白名單機制。
(5)做文件類型mime-type檢查,對圖像文件做二次渲染。
二、文件包含:
1、本質:
當上傳的文件不能直接被執行時,可以借助文件包含來搞定。什么是文件包含,其實就是編程中的文件或者包引入
2、分類:
(1)本地文件包含
(2)遠程文件包含
3、PHP文件包含:
1 //All of these function: 2 /* 3 include() 4 include_once() 5 require() 6 require_once() 7 */ 8 <?php 9 include($_GET["file"]); 10 ?> 11 //http://localhost/include.php?file=phpinfo.php 12 /* 13 Remote -> allow_url_include = 1 & allow_url_fopen = 1 14 //http://localhost/include.php?file=//http://localhost/phpphpinfo.php 15 */ 16 //pgpinfo.txt: 17 <?php 18 phpinfo(); 19 ?>
4、JSP文件包含
1 //分為靜態和動態: 2 //靜態 3 <%@include file="page.txt"%> 4 //動態: 5 <%String pages = request.getParameter("file") %> 6 <jsp:include page="<%=pages>"></jsp:include> 7 //http://localhost/include.jsp?file=xxx.jsp
5、文件包含的利用:
(1)讀取敏感信息:
#/etc/passwd
#/etc/shadow
#my.cnf\php.ini\httpd.conf\access_log等等
(2)遠程包含shell小馬(一句話)。
(3)配合訪問上傳的文件。
(4)使用封裝協議,也就是說file參數后面可以是各種協議偽協議表示的文件。
(5)繞過waf和防火牆。
6、防御:
(1)包含文件白名單。
(2)用戶輸入過濾掉. / \ 和偽協議關鍵詞。
(3)包含的文件不允許外部可控。
三、任意目錄文件遍歷:
1、原因:
web服務器配置不當,導致可以訪問到web根目錄(www目錄)以外的文件,應該是絕對禁止的。且web程序設計沒有對訪問的目錄做檢查和限制。
2、比較容易發生的位置:
(1)下載類
(2)圖片等文件顯示類
3、檢測:
(1)file = /etc/passwd 或者 C:/Users/
(2)file = ../../../../../../../../../../../../etc/passwd
(3)http://www.test.com/index/index.php/../../../../../../../../../etc/passwd
4、防御:
1、配置不能訪問WEB根目錄之外的項目。
2、對可以訪問的文件放在一個資源文件夾下。
3、對用戶輸入的特殊字符例如.和/以及\進行過濾