第十一關
strrpos() 函數查找字符串在另一字符串中最后一次出現的位置
substr() 函數返回字符串的一部分
文件保存的方式是上傳路徑+隨機時間+截取的文件后綴
其中上傳路徑可控,可以利用這一點
繞過方法
利用00截斷進行繞過,即move_uploaded_file函數的底層實現類似於C語言,遇到0x00會截斷
截斷條件:
1、php版本小於5.3.4
2、php.ini的magic_quotes_gpc為OFF狀態
move_uploaded_file函數遇到0x00(16進制)就會認為已經結束
第十二關
和上一個關一樣不過路徑上傳方式由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.