upload-labs打關詳解


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.繞過黑名單

 

 

 

 上傳成功

 

參考:https://segmentfault.com/a/1190000019450720#articleHeader77


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM