第十一關php
strrpos() 函數查找字符串在另外一字符串中最後一次出現的位置shell
substr() 函數返回字符串的一部分數組
文件保存的方式是上傳路徑+隨機時間+截取的文件後綴函數
其中上傳路徑可控,能夠利用這一點工具
繞過方法post
利用00截斷進行繞過,即move_uploaded_file函數的底層實現相似於C語言,遇到0x00會截斷測試
截斷條件:
一、php版本小於5.3.4
二、php.ini的magic_quotes_gpc爲OFF狀態編碼
move_uploaded_file函數遇到0x00(16進制)就會認爲已經結束spa
第十二關線程
和上一個關同樣不過路徑上傳方式由GET變成POST
繞過方法
00截斷 post方式中須要修改爲二進制的00而不是直接在請求數據中修改00
#在二進制中爲23,爲了好找,下一步在hex將23改爲00
修改爲00後會在數據包顯示像口這樣的字符
第十三關
讀取上傳文件中的兩個字節
將讀取的內容解包(unpack() 函數從二進制字符串對數據進行解包返回數組一個字節爲一個值)
返回解包後的整數值(intval() 函數經過使用指定的進制 base 轉換(默認是十進制),返回變量 var 的 integer 數值)
繞過方法
咱們在一句話木馬的開頭添加兩個11也就是二進制的3131,將HEX
編碼 3131 改成 FFD8 點Go
後成功上傳JPG
上傳了馬後綴爲jpg想要利用須要配合另外一種漏洞文件包含,靶場專門有一個文件讓咱們測試文件內容爲
繞過方法二
利用圖片馬,將一張正常的圖片jpg,和一句話php合成一張新的jpg文件(window下 cmd , copy 1.jpg /b + 1.php /a 3.php)
合成後使用編輯工具打開圖片內容包含一句話
第十四關
getimagesize() 函數用於獲取圖像大小及相關信息,成功返回一個數組
索引 2 給出的是圖像的類型,返回的是數字,其中1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM
stripos — 查找字符串首次出現的位置
繞過方法
與上一關同樣使用圖片馬
第十五關
exif_imagetype() — 判斷一個圖像的類型
返回值:
圖像類型常量 值 常量
1 IMAGETYPE_GIF
2 IMAGETYPE_JPEG
3 IMAGETYPE_PNG
4 IMAGETYPE_SWF
5 IMAGETYPE_PSD
6 IMAGETYPE_BMP
7 IMAGETYPE_TIFF_II(Intel 字節順序)
8 IMAGETYPE_TIFF_MM(Motorola 字節順序)
9 IMAGETYPE_JPC
10 IMAGETYPE_JP2
11 IMAGETYPE_JPX
12 IMAGETYPE_JB2
13 IMAGETYPE_SWC
14 IMAGETYPE_IFF
15 IMAGETYPE_WBMP
16 IMAGETYPE_XBM
繞過方法
本關同樣使用圖片馬
第十六關
圖片通過渲染確定與原來的照片不同了
繞過方法
最簡單的GIF圖片
合成圖片立刻傳,在把上傳後的圖片保存下來會發現一句話不見了,把圖片馬和下載下來的圖片進行對比找到沒有渲染的部分直接將一句話寫進去
1.gif是我一開始上傳圖片馬對比上傳後的圖片找出來一段沒有通過修改的,我把其中一段空白修改爲一句話代碼,注意圖片會失真
左邊.gif是我上傳修改後的1.gif保存的能夠看到一句話完整的保存了下來
jpg和png都製做失敗了,之後有時間再去研究,好像說圖片內容格式不同,不能夠直接這樣修改,都是用到國外牛人的腳本添加
第十七關
經過move_uploaded_file保存文件在判斷是否後綴是不是圖片,若是是則重命名保存,若是不是刪除
這裏存在着一個漏洞,叫條件競爭
當我發送大量的包時,文件就會先進行保存,而判斷可能會存在必定的延遲
此時上傳一個php文件裏面代碼在建立一個包含一句話的php這樣就算把上傳的文件刪除也會存在一個木馬文件
繞過方法
上傳一個php文件裏面代碼進行建立一個新的文件
用burp捉包,選擇爆破那個模塊原包發送5000次,線程50
訪問上傳的文件
一樣再發5000個請求包去訪問未刪除前的地址,一但成功則會生成一個shell文件
當請求頁面返回200中止,此時因爲咱們代碼理有生成shell文件,因此直接訪問
第十八關
對文件後綴名作了白名單判斷,而後會一步一步檢查文件大小、文件是否存在等等,將文件上傳後,對文件從新命名,一樣存在條件競爭的漏洞。能夠不斷利用burp發送上傳圖片馬的數據包,因爲條件競爭,程序會出現來不及rename的問題,從而上傳成功
繞過方法
使用上一關的木馬文件,白名單中容許後綴爲7z的文件上傳
咱們能夠構造1.php.7z文件,在Apache中容許多後綴,而且從右向左解析
當咱們訪問1.php.7z解析成php文件,根據文件代碼生成shell.php
第十九關
文件名可控,
pathinfo() 返回一個關聯數組包含有 path 的信息。
包括如下的數組元素:
- [dirname]
- [basename]
- [extension]
繞過方法
使用點加空格 1.php. 獲取到的後綴爲點空格 在window中點空格默認會去除因此剩下1.php
第二十關
先檢查文件類型,後檢查是否上傳了文件名沒有則爲文件的名字,判斷是否爲數組,若不是則以點分割返回一個數組,取數組最後一位數爲後綴,文件保存爲reset輸出數組第一個數,和最後一位數保存
繞過方法
php修改後綴jpg上傳捉包
文件類型已經爲image/jpeg
修改上傳路徑爲一個數組,當獲取文件後綴時爲jpg,合成文件名爲數組第一個,和最後一個,當咱們修改jpg爲數組的2時,1此時是空的數組一共有三位數,可是實際只有兩位,全部獲取到的值爲空
此時上傳後的文件爲1.php.