<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    無回顯的任意文件上傳

    VSole2022-11-25 11:08:35

    前言

    在某次攻防中,遇到了cms站一個上傳點,上傳正常圖片會回顯路徑,上傳其他文件提示上傳失敗,且沒有過多信息回顯,一度以為沒有漏洞。

    通過找源碼代碼審計后getshell。

    測試

    在某次測試過程中發現,通過泄漏的md5進入后臺,在后臺配置中有處“上傳logo”的功能。

    通過一頓測試,上傳文件為圖片后綴但內容非圖片(文件頭),會提示“上傳的不是一張圖片”。

    如果上傳圖片文件, 后綴改為php等  會提示“上傳失敗”。只有正常圖片+圖片后綴 會返回圖片路徑。

    一時陷入僵局。

    一頓百度找到了源代碼,那就從代碼審計入手吧。

    進行代碼審計

    首先找到上傳點的入口文件。

    第一行 導入命名空間“phpWeChat” 內的 Upload 類,下面是引用包含一些文件。

    再往下,$action是用于下面 switch函數內做索引匹配而調用不同功能的。

    $action的值是通過 GET方式獲取 “action”參數的值。如果空,就用預設的imageupload

    當url為 :get:url/index.php?action=imageupload  進入到“imageupload”代碼塊


    switch($action)  {  case 'imageupload':    $originalname=preg_replace('/[^a-z0-9_]/i','',$originalname);     //過濾文件名特殊字符作用,i:不區分大小寫模式    $image=Upload::imageUpload($upload_file,$originalname);      //圖片落地    if(is_image($image)) { 省略}  //is_image() 獲取文件后綴
    

    其中核心的代碼是$image 這一行。

    通過使用命名空間中Upload類的imageUpload()方法獲取并處理圖片后落地,將結果返回。

    返回的結果為在下一行if函數作為條件進行判斷 。而具體做了什么先看imageUpload()函數做了什么,返回什么結果。

    先看Upload類代碼如下:

    這里使用了命名空間,并在剛才的index.php文件內導入,來進行使用。

    Upload類下,定義了幾個靜態方法,主要是圖片、視頻、壓縮包上傳,圖片放大等方法

    主要看下被調用的imageUpload()方法

    在if中的表達式,通過文件上傳變量  $_FILES 獲取圖片用此方法文件上傳后,會被存儲在服務器臨時目錄內,

    上傳成功后將滿足if條件,進入if內代碼。前四行依次獲取上傳的圖片信息:文件名、臨時路徑、文件后綴、文件大小。

    再經過兩個if判斷,判斷是否post傳入圖片、判斷文件是否超過限制大小。

    到了209行這個關鍵點,會對文件進行檢查。

    此處的if判斷內使用了getimagesize()函數,并檢查結果是否為數組,結果并取反

    getimagesize()函數會文件頭進行檢查,來判斷文件是否為有效的圖片類型。并返回一個包含圖片信息的數組。如果上傳了非圖片內容,getimagesize()返回 false

    所以上傳非圖片內容時,getimagesize()返回 false 并取反 此處會執行exit并彈框"上傳的不是一張圖片"

    對該函數需要進行一個繞過

    此時就需要一個圖片馬進行繞過。或是利用gif文件的頭。

    下面是一個正常的gif文件頭。

    GIF89a圖形文件就是一個根據圖形交換格式(GIF)89a版(1989年7 月發行)進行格式化之后的圖形。在GIF89a之前還有87a版(1987年5月發行)

    可構造內容,進行繞過。


    GIF89a phpinfo();?>
    

    條件滿足后,代碼往下執行。

    前兩個變量分別賦值了,將要儲存到的 文件名和 目錄名

    文件名取客戶端提交時間+隨機值,目錄名取當前年月日,然后make_dir創建文件夾。

    到了218行,if內表達式 使用move_uploaded_file將文件從tmp臨時目錄移動到網站上傳目錄內,此時文件已經寫入硬盤目錄。move_uploaded_file執行成功后會返回 真值,進入if內進行圖片文件尺寸放大等操作。

    成功后,這時將返回一個文件路徑結果

    再回到index入口文件。$image結果是imageUpload()方法返回的文件路徑

    $image在if判斷的條件內,被is_image()處理。

    is_image()通過獲得后綴,然后在多個圖片后綴數組內進行匹配,匹配到返回真值,否則 假。

    如果不為'gif','jpg','jpeg','png','bmp'內后綴,結果為假的,前臺將返回上傳失敗提示。

    但其實在服務器端,文件已經落地,返回任何信息也只是掩耳盜鈴:

    總結

    1.文件寫入目錄前,文件的后綴直接使用用戶提交時的文件后綴,且未對后綴或文件類型進行檢查。

    2.文件落地后才進行后綴檢查,這時的后綴檢查完全是馬后炮。

    3.雖然對文件有有效性進行驗證,但getimagesize()函數是可通過文件頭(gif文件頭)繞過。

    4.move_uploaded_file()函數在php5部分版本中 可以使用 “%00”截斷路徑名,繞過后綴。

    5.文件名前綴,是取客戶端提交時間戳+四位隨機數,文件名可以被枚舉。

    上述問題造成了任意文件上傳漏洞。

    文件上傳文件頭
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    最近由于筆者所在的研發集團產品需要,需要支持高性能的大文件(大都數是4GB以上)的http上傳,并且要求支持http斷點續傳。筆者在以前的博客如何實現支持大文件的高性能HTTP文件上傳服務器已經介紹了實現大文件上傳的一些基本概念,其實非常簡單,這里在簡要歸納一下,方便記憶:
    通過找源碼代碼審計后getshell。測試在某次測試過程中發現,通過泄漏的md5進入后臺,在后臺配置中有處“上傳logo”的功能。會提示“上傳失敗”。只有正常圖片+圖片后綴 會返回圖片路徑。第一行 導入命名空間“phpWeChat” 內的 Upload 類,下面是引用包含一些文件。再往下,$action是用于下面 switch函數內做索引匹配而調用不同功能的。$action的值是通過 GET方式獲取 “action”參數的值。
    pass=''.$pass.'' and uname=''.$uname.''';可以構造萬能密碼 :username填 ' or 1=1#password 填 \'SQL語句變成了'select * from auth where ?
    Web安全-一句話木馬
    2022-07-27 06:43:56
    概述在很多的滲透過程中,滲透人員會上傳一句話木馬到目前web服務目錄繼而提權獲取系統權限,不論asp、php、jsp、aspx都是如此,那么一句話木馬到底是什么呢?
    文件上傳前端JS 防護,通過抓包修改,或插件js禁用來繞過。后端黑名單上傳陌生后綴 .php3 php5上傳配置文件 .htaccess通過 雙寫 ,大小寫,基于windows 特性
    此文章可以說是對于想研究“文件上傳漏洞”的新人是必看的內容,如果你不看此筆記,文件上傳漏洞實戰你能搞明白嗎?內部:掃描工具探針的上傳地址:后臺的上傳地址 3、學文件上傳漏洞篇要注意哪些關鍵地方?
    在對網站進行滲透測試過程中,經常會遇見WAF,從而導致直接封IP,無法上傳文件文件上傳漏洞對Web應用來說是一種非常嚴重的漏洞。 一般情況下,Web應用都會允許用戶上傳一些文件,如像、附件等信息,如果Web應用沒有對用戶上傳文件進行有效的檢查過濾,那么惡意用戶就會上傳一句話木馬等Webshell,從而達到控制Web網站的目的。 一般服務端WAF檢測原理包括 黑名單檢測:一般有個專門的 b
    A:在網絡傳輸不穩定的情況下,導致文件傳輸不完整,可能會導致誤報,除了這個之外很少有人會在上傳過程中改變原有的文件類型. Q:能否繞過檢測?
    今天就聊聊關于上傳繞過WAF的姿勢,WAF簡單的來說就是執行一系列針對HTTP/HTTPS的安全策略來專門為Web應用提供保護的一款產品。上傳繞過不算什么技術了,正所謂未知防,焉知攻,先來了解一下網站的防御措施吧!
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类