日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

文件上传 upload-labs 1~20做题记录

發布時間:2024/9/30 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文件上传 upload-labs 1~20做题记录 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

pass-01:

解題思路:(繞開前端js檢測

(1):F12 ,直接修改js 允許文件的上傳類型 ,

(2):將webshell 文件后綴名改為允許上傳的,然后用 burp suite 攔截后修改 文件后綴名 ,

(3):利用 瀏覽器插件 Noscrip? 屏蔽js腳本?

pass-02:

操作過程: 1,禁用了js 腳本依舊不能上傳,猜測可能是 content-type 檢測

解題思路:(Content-type 檢測

(1):將webshell 文件的后綴名改為圖片類型 ,再利用 bs 抓包 修改文件后綴

(2):直接上傳 webshell 文件 ,利用 bs 修改 Content-type :為 image/gif? ?繞過

pass-03:

操作過程:修改了webshall 的后綴名,再利用bs 修改成原來的后綴名沒有上傳成功,猜測服務器端也有文件后綴名檢測

? ? ? ? ? ? ? ? ?查看源代碼發現有 文件后綴名的黑名單,以及大小寫的過濾

解題思路:(服務端 拓展名檢測? 之? 黑名單后綴名不全)

(1) ,? 用PHP 的別名進行黑名單繞過,如 php2, php3, php4, php5, phps, pht, phtm, phtml.

(2),?重寫文件解析規則繞過。上傳先上傳一個名為.htaccess文件,內容如下:

<FilesMatch "1.jpg"> SetHandler application/x-httpd-php </FilesMatch>

然后再上傳一個 1.jpg 此時1.jpg 就會被當作 PHP來執行

pass-04:

操作過程:查看源代碼 發現黑名單幾乎過濾了全部的違法后綴名 ,但少過濾了 .htaccess 后綴

解題思路:(拓展名檢測 之 繞過黑名單 之 后綴名缺少繞過

(1),上傳一個.htaccess 文件 重寫 服務器的文件解析??

創建一個.htaccess文件

內容可以是 :?AddType application/x-httpd-php .jpg,可將jpg文件解析為php文件.

或者是 :?SetHandler application/x-httpd-php,可將其他所有文件解析為php文件.

(2),利用PHP 和 Windows環境的疊加特性,以下符號在正則匹配時的相等性:

雙引號" = 點號. 大于符號> = 問號? 小于符號< = 星號*

先把4.php文件后綴改為4.jpg? 然后用bs 將文件名改為?4.php:.jpg,上傳成功后會生成4.php的空文件,大小為0KB.

然后再在bs 中把文件名 改為4.<或4.<<<或4.>>>或4.>><后再次上傳,重寫4.php文件內容,Webshell代碼就會寫入原來的4.php空文件中。

?

pass-05:

操作過程: 查看源代碼發現 黑名單里加上了 .htaccess 后綴 ,但是沒有 進行大小寫 過濾

解題思路:(拓展名檢測? 之? 黑名單繞過 之? 大小寫繞過
(1),可以利用 沒有進行大小寫 進行繞過 ,將1.php 改為 1.phP 上傳

? ? ? ? ? ? ??(在Linux沒有特殊配置的情況下,這種情況只有win可以,因為win會忽略大小寫)

(2)也可以用? pass-04 的(2)利用PHP 和 Windows環境的疊加特性,進行繞過

?

pass-06:

操作過程:查看原第阿瑪發現 在 pass-05 的基礎上 加上了 大小寫 過濾, 但發現 去掉了 收尾去空

查了一下:trim()函數 :?移除字符串兩側的空白字符或其他預定義字符.

Win下xx.jpg[空格] 或xx.jpg.這兩類文件都是不允許存在的,若這樣命名,windows會默認除去空格或點

解題思路:( 拓展名檢測? 之? 黑名單? ?之? ?收尾去空)

(1) 用bs 在1.php 后綴名后面加一個空格? 成功繞過

?

pass-07:

操作過程:查看源代碼后 發現沒有 刪除文件名末尾的點? 的過濾

解題思路:(拓展名檢測? 之 黑名單? 收尾去點)

(1),利用windows特性,會自動去掉后綴名中最后的”.”? 用bs 在文件名后加 “ .” 成功繞過

?

pass-08:

操作過程:查看源代碼后 發現? 黑名單過濾? 沒有 去字符串 ::$DATA?

解題思路:(拓展名檢測之? 黑名單 之 去字符串 ::$DATA)

(1),NTFS文件系統包括對備用數據流的支持。這不是眾所周知的功能,主要包括提供與Macintosh文件系統中的文件的兼容性。備用數據流允許文件包含多個數據流。每個文件至少有一個數據流。在Windows中,此默認數據流稱為:$ DATA。
上傳.php::$DATA繞過。(僅限windows)? 上傳后 自動保存為 1.php

?

pass-09:

操作過程:查看源代碼 發現 他把之前的漏洞都 補上了? ?但他 代碼本身就有問題? : 之過濾了? ?一個點? 和 一個 空格?

? ? ? ? ? ? ? ? ?還有PATH :

解題思路:(拓展名檢測? ?之? ?黑名單? ?之? 末尾 點和空格 過濾)

(1) 可以用 bs? 將1.php 改為? 1.php.? .? ?(點+空格+點)? 成功繞過

(2)這里發現$_FILES['upload_file']['name']獲取的是文件名中/后面的字符串,本來還想用move_uploaded_file會忽略/.的trick繞過

?

pass-10:

操作過程:查看源代碼 發現? 依舊是黑名單過濾? ? ?關鍵過濾就這兩句:

$file_name = trim($_FILES['upload_file']['name']);$file_name = str_ireplace($deny_ext,"", $file_name); #當file_name中出現deny_ext中存在的字符串,就把它去掉,但只處理了一次.

解題思路:(拓展名檢測? ? 之? ?黑名單? ?之? ?后綴名雙寫)

(1),可以用雙寫后綴名 進行繞過? 將1.php 改為? 1.pphphp? 成功繞過

?

pass-11:

操作過程:查看源代碼,發現是白名單過濾

$ext_arr = array('jpg','png','gif');

但是img_path直接使用點號拼接路徑,這里就存在風險.

$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

我們可以使用%00截斷來實現繞過.

但這東西有點過氣了,因為需要兩個條件

  • php版本小于5.3.4
  • php的magic_quotes_gpc為OFF狀態
  • 如果要完成這一個題目就必須要實現上面的兩個條件,但是現在都PHP7了,這東西也就很少見了,滿足上面的條件的時候php就是把它當成結束符,后面的數據直接忽略

    解題思路:(前臺檢測? 之? 白名單? ?之? ?img_path 直接用點號拼接)

    (1) 用bs? 將save_path 和文件名 filename 改為:

    save_path=../upload/1.php%00 filename="1.jpg"

    網頁顯示地址?<img src="../upload/1.php /4620180731010238.jpg" width="250px" />

    訪問地址 :?http://localhost/upload-labs/Pass-01/../upload/1.php

    這里可本地測試發現通過%00截斷,使得無法復制/4620180731010238.jpg" width="250px" />,即表明截斷成功.

    ?

    此方法沒有繞過

    ?

    pass-12:

    操作過程:產看源代碼 發現 此題在上題 將GET? 換為 POST? ,還是利用pass-11 的方法 ,但在url解碼中%00不會被解析.

    但是這里我們可以使用0x00進行截斷.

    解題思路:(前臺檢測? ?之? 白名單? 之? img_path 直接拼接? post傳參)

    (1)?

    ?

    pass-13:

    操作過程:查看源代碼 發現:

    代碼通過讀取上傳文件的前兩字節判斷是否為圖片.(漏洞)

    $bin = fread($file, 2); //只讀2字節fclose($file);$strInfo = @unpack("C2chars", $bin);

    所以我們可以將圖片和一句話木馬合并在一起上傳.

    解題思路:(圖片馬? ? 之? ?通過前兩個字節判斷是否為圖片? )

    (1)最最最簡單的圖片馬直接一條命令即可生成:生成一個名為 1.png 的圖片馬

    cope 2.jpg/b + 1.php/a 1.png

    上傳即可,但無法直接利用!

    查看upload文件夾? 發現? 上傳的1.png 的后綴名? 變成了原來的 .jpg

    ?

    pass-14:

    操作過程:查看源代碼 發現:

    關鍵代碼 :

    $info = getimagesize($filename); $ext = image_type_to_extension($info[2]);

    getimagesize通過檢查圖像文件的大小并返回圖像的尺寸以及文件類型.

    image_type_to_extension根據指定的圖像類型返回對應的后綴名.

    解題思路:(圖片馬? 之? ?使用getimagesize()檢查是否為圖片文件)

    (1)與pass-13 一樣直接上傳 圖片馬1.png 成功繞過

    查看upload 文件夾 發現? 文件的后綴名 變為:? .jpeg? ?原圖片為.jpg 都會被改為 .jpeg?

    ?

    pass-15:

    操作過程:查看源代碼 發現更換了函數:

    $image_type = exif_imagetype($filename);

    解題思路:(圖片馬 之?使用exif_imagetype()檢查是否為圖片文件)

    (1)解法同pass-13? ? 可能是環境有問題? 上傳后直接空白了

    ?

    pass-16:

    操作過程:查看源代碼,發現這一關對后綴名和文件類型啥的都進行了很嚴格的控制,而且在后面還對圖片進行了二次編譯

    解題思路:(二次渲染)

    (1)jpg和png很麻煩,gif只需要找到渲染前后沒有變化的位置,然后將php代碼寫進去,就可以了

    jpg? 和png? 的處理方法? 參照https://xz.aliyun.com/t/2657? ?講的很細致

    ?

    pass-17:

    操作過程:查看提示,發現是 條件競爭:

    條件競爭

    條件競爭是指一個系統的運行結果依賴于不受控制的事件的先后順序。 當這些不受控制的事件并沒有按照開發者想要的方式運行時,就可能會出現 bug。 尤其在當前我們的系統中大量對資源進行共享,如果處理不當的話,就會產生條件競爭漏洞。

    如果文件檢測是先保存后檢測,文件不合法再刪除的方式進行的,典型的“引狼入室”。

    就可以利用條件競爭的方式在木馬文件在被刪除之前訪問它,使他成功的執行

    具體的操作過程就是,利用工具,一邊不斷地快速上傳木馬文件,一邊不斷的請求訪問上傳的木馬文件,使一些來不及被刪除的木馬文件被成功執行

    解題思路:(條件競爭)

    $is_upload = false; $msg = null;if(isset($_POST['submit'])){$ext_arr = array('jpg','png','gif');$file_name = $_FILES['upload_file']['name'];$temp_file = $_FILES['upload_file']['tmp_name'];$file_ext = substr($file_name,strrpos($file_name,".")+1);$upload_file = UPLOAD_PATH . '/' . $file_name;if(move_uploaded_file($temp_file, $upload_file)){if(in_array($file_ext,$ext_arr)){$img_path = UPLOAD_PATH . '/'. rand(10, 99).date("YmdHis").".".$file_ext;rename($upload_file, $img_path);$is_upload = true;}else{$msg = "只允許上傳.jpg|.png|.gif類型文件!";unlink($upload_file);}}else{$msg = '上傳出錯!';} }

    可以看到文件先經過保存,然后判斷后綴名是否在白名單中,如果不在則刪除,此時可以利用條件競爭在保存文件后刪除文件前來執行php文件。

    先利用burp suite抓一個文件上傳的包,右鍵? Send to Intruder 》添加爆破點 》添加payload,先暫時不開始爆破

    我是在一句話后面加了個 爆破點,不影響一句話的執行,至于payload我隨便找了個相對較長的字典10000.txt

    然后再在瀏覽器上訪問 127.0.0.1/upload-labs/upload/1.php,利用 burpsuite抓包,右鍵 Send to Intruder 》添加爆破點 》添加payload字典, 字典還用 10000.txt

    ?

    然后兩個爆破 同時點擊 Start Attack ,一個上傳,一個訪問,然后你就會發現有成功訪問的包

    成功訪問到了還沒來得及刪除的非法文件

    ?

    pass-18:


    操作過程:根據apache的后綴名識別漏洞:從右往左依次識別后綴,遇到不能識別的后綴名便跳過?,因此可以文件名改為

    1.php.7z,然后利用bs 快速發包,

    本關對文件后綴名做了白名單判斷,然后會一步一步檢查文件大小、文件是否存在等等,將文件上傳后,對文件重新命名,同樣存在條件競爭的漏洞??梢圆粩嗬胋urp發送上傳圖片馬的數據包,因為move在rename之前,move操作進行了一次文件保存,然后rename進行了一次更改文件名,由于條件競爭,程序會出現來不及rename的問題,從而上傳成功

    解題思路:(條件競爭)

    (1)利用Apache 的漏洞,將webshell 腳本文件名改為1.php.7z (白名單中 有.7z 這個apache 不能識別的后綴,所以用.7z)

    然后利用bs 去不斷快速發包,實現條件競爭,進而保留了腳本名,使apache 將其識別為1.php

    (2)單純利用 條件競爭,利用bs 去不斷快速發包,實現條件競爭,進而保留了圖片馬的文件名,成功繞過

    ?

    pass-19:

    操作過程:發現move_uploaded_file()函數中的img_path是由post參數save_name控制的,因此可以在save_name利用00截斷繞過.? ?還有就是move_uploaded_file底層會調用tsrm_realpath函數導致,遞歸刪除文件名最后的/.導致繞過了后綴名檢測

    解題思路:(0x00截斷)

    (1), 利用00截斷進行繞過,將文件名改為:xx.php【二進制00】.x.jpg?

    (2)遞歸刪除文件名最后的/.導致繞過了后綴名檢測,在bs中將文件名改為:1.php/.? ?成功繞過

    (3),不知道怎么回事,用大小寫就成功繞過了,1.phP

    ?

    pass-20:

    操作過程:而最終的文件名后綴取的是$file[count($file) - 1],因此我們可以讓$file為數組。
    $file[0]為smi1e.php/,也就是reset($file),然后再令$file[2]為白名單中的jpg。
    此時end($file)等于jpg,$file[count($file) - 1]為空。
    而?$file_name = reset($file) . '.' . $file[count($file) - 1];,也就是smi1e.php/.,最終move_uploaded_file會忽略掉/.,最終上傳smi1e.php。

    解題思路:(數組 + /. 繞過)

    (1)

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    總結

    以上是生活随笔為你收集整理的文件上传 upload-labs 1~20做题记录的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。