1-19關
00x01 JS檢查
方法一.修改javascript代碼,將.php添加到允許上傳的類型中
3.上傳成功
方法二:繞過前端,通過burpsuit抓包,上傳一張info.jpg圖片,然后抓包之后,將后綴改為.php,發包上傳成功
00x02 服務端對數據包的MIME進行檢查
1. burpsuite類型type繞過,上傳.php文件,然后攔截,將類型改為image/jpeg
,發包,上傳成功
00x03 黑名單,禁止上傳.asp|.aspx|.php|.jsp后綴文件
1.嘗試通過phtml,php3,php4,php5,pht后綴名繞過
上傳成功
2.第二種方法是直接上傳.htaccess,實現重寫文件解析,可以直接上傳圖片自動解析成php文件。
00x04 黑名單,.htaccess上傳解析
1.過濾了很多后綴文件,但是沒有過濾.htaccess文件,可以重寫文件解析規則繞過,上傳一個.htaccess
2.然后再上傳一個含有phpinfo()的jpg文件,就可以解析為php文件執行
00x05 黑名單
1.還是黑名單,且加上了.htaccess,但是沒有將后綴進行大小寫統一,於是大小寫繞過:
2.訪問成功
00x06 黑名單,空繞過
1.還是黑名單,但是沒有對后綴名進行去空處理,可在后綴名中加空繞過:
2.上傳成功
00x07 黑名單,點繞過
1.還是黑名單,但是沒有對后綴名進行去“.”處理,因此可在后綴名中加“.”繞過(php代碼中少了$file_name = deldot($file_name);/刪除文件名末尾的點)利用windows特性,會自動去掉最后的”.”
00x08 黑名單,::$DATA繞過
1.還是黑名單,但是少了這一行代碼$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
因此可以在后綴名加”::$DATA”繞過(利用windows特性)。
上傳成功
00x09 黑名單,配合解析漏洞
1. 這一關像是前幾關的組合拳,雖然把最后的點給刪掉,但是仍然可以繞過,因為這里的過濾並沒有遞歸下去,只是一步,這樣就相當於SQL注入里面用str_replace只過濾一次關鍵字一樣
2. 可以遵循着他的步驟去實現自己的payload,可以這樣設置(點+空格+點),經過處理后,文件名變成info.php.,即可繞過。
3.然后就可以訪問info.php了。
00x10 黑名單,雙后綴名繞過
1. 依舊是黑名單過濾,注意到,這里是將問題后綴名替換為空,於是可以利用雙寫繞過:$file_name = trim($_FILES['upload_file']['name']);
$file_name = str_ireplace($deny_ext,"", $file_name);
00x11 白名單,%00截斷(需要兩個條件:php版本小於5.3.4;php的magic_quotes_gpc為OFF狀態)
1. 另save_path等於下面的值:../upload/4.php%00
00x12 白名單,00截斷
1. 和十一關不同的是這次的save_path是通過post傳進來的,還是利用00截斷,但這次需要在二進制中進行修改,因為post不會像get對%00進行自動解碼。
00x13 白名單,圖片馬
從這一關開始要求上傳圖片馬,但是沒有辦法直接執行圖片馬,需要另外的方法去實現一般是加上php偽協議去getshell,常見的有phar,zip等等
如果想要看到詳細的效果可以寫一下簡單的腳本放在upload目錄下即可,
<?php
@include $_GET[file];
?>
最最最簡單的圖片馬直接一條命令即可生成
copy normal.jpg /b + shell.php /a webshell.jpg
上傳一個圖片馬,內容如下,可以看到里面有腳本語言
把該圖片上傳上去,嘗試文件包含,成功回顯
00x14 白名單,圖片馬
類似上一個題目,獲取了圖片的相關的大小及類型,並驗證是否時刻上傳的圖片,同樣可以使用文件頭的方式繞過
$info = getimagesize($filename);
$ext = image_type_to_extension($info[2]);
說明info[2]是一個文件的類型,同樣的方法也是可以繞過的
00x15 白名單,圖片馬
換了一個獲取圖片信息的函數
//需要開啟php_exif模塊
$image_type = exif_imagetype($filename);
跟pass-13一樣的繞過方法
00x16 白名單,圖片馬
這一關對后綴名和文件類型啥的都進行了很嚴格的控制,而且在后面還對圖片進行了二次編譯
//使用上傳的圖片生成新的圖片
$im = imagecreatefromjpeg($target_path);
這一個題目跟上次校賽的題目思路一致,尋找圖片被渲染后與原始圖片部分對比仍然相同的數據塊部分,將Webshell代碼插在該部分,然后上傳,下載下來后發現這一部分插入代碼的沒變但是其他部分都變了
嘗試文件包含,后面怎么利用就不多說了
00x17條件競爭
代碼審計一波,發現有unlink()
函數,此函數是刪除文件的作用,
這里先將文件保存在服務器中,再判斷后綴名,若后綴名不合法則刪除文件
通過條件競爭的方式在unlink
之前,訪問上傳文件。
利用條件競爭刪除文件時間差繞過。
上傳一個含有phpinfo()函數的php文件試試,然后burp抓包
放到inruder里面,然后清除掉所有被選則的值,因為這里不是爆破,而是讓其大量重放包
發送大量的包,然后start attack,之后瀏覽器一直刷新訪問我們上傳的這個php文件
刷新訪問成功
00x18 條件競爭2
解題思路
- 對文件后綴名做了白名單判斷,然后檢查文件大小、文件是否存在等等。
- 將文件上傳后,對文件重新命名,同樣存在條件競爭的漏洞。
初始文件命名規則$this->cls_upload_dir . $this->cls_filename
,重命名規則$this->cls_upload_dir . $this->cls_file_rename_to
,當大量文件需要被重命名時就會出現條件競爭
- move在rename之前,move操作進行了一次文件保存, 然后rename進行了一次更改文件名。
- 利用burp不間斷地發送上傳圖片馬的數據包,由於條件競爭,程序會出現來不及rename的問題,從而上傳成功。
- 查看配置
mime.types
,這里記錄着可被Apache
服務器所識別的文件屬性:#application/x-7z-compressed 7z
7z
后綴並不被Apache
服務器所識別,卻在上傳文件名后綴的白名單中,可以利用Apache的解析漏洞
將上傳的7z
后綴文件當做php
文件解析。 -
Apache的解析漏洞
Apache
服務器在解析多后綴文件名的文件時,會從后往前辨別后綴,一直辨別到可以解析的后綴。
利用burp不停發包方法同上題
瀏覽器一直刷新訪問上傳的文件名
或者上傳的圖片馬
00x19黑名單策略,文件名用戶可控
提示與查看源碼
本pass的取文件名通過$_POST來獲取。
名單策略,文件名用戶可控,文件命名info.php.
繞過
上傳info.php文件,保存名稱改為info.php.繞過黑名單
上傳成功