日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP-代码审计-文件上传

發布時間:2024/6/3 php 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP-代码审计-文件上传 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

函數

move_uploaded_file
move_uploaded_file ( string $filename , string $destination ) : bool

  • $filename 上傳的文件的文件名。

  • $destination 移動文件到這個位置。

  • 本函數檢查并確保由 filename 指定的文件是合法的上傳文件(即通過 PHP 的 HTTP POST
    上傳機制所上傳的)。如果文件合法,則將其移動為由 destination 指定的文件。

  • move_uploaded_file—>傳送門1
    move_uploaded_file—> 傳送門2

文件上傳漏洞

  • 文件上傳漏洞是最早的漏洞,也是最容易理解的漏洞,代碼都寫再文件里面執行,如果能吧文件上傳到管理員或者應用程序不想讓你上傳的目錄,那就存在文件上傳漏洞。

挖洞經驗

  • 文件上傳中的上傳點都是調用一個上傳類,上傳函數為move_uploaded_file()

  • 而文件上傳又只有這一個函數,所以文件上傳在代碼審計的時候,最快的方式就是去搜索 move_uploaded_file()函數

幾個文件上傳漏洞代碼分析

未過濾或本地過濾

move_uploaded_file($_FILES["file"]["tmp_name"],$FILES["file"]["name"])
  • move_uploaded_file 函數直接吧上傳的臨時文件copy到新文件

黑名單擴展名過濾

PHPCMSv9限制

1. 限制擴展名不夠全

  • 上傳文件格式不可預測的性質導致了可能有漏魚之網擴展名
  • 不同的WebServer 默認有不同的可以解析的
  • 下面的驗證就有了漏魚之網,并沒過濾cdx,存在繞過
$savefile = preg_replace("/(php|php3|php4|jsp|exe|dll|asp|cer|asa|shtml|shtm |aspx|asax|cgi|fcgi|p1)(\.|$)/i","_\\1\\2",$savefile);

2. 限制擴展名的方式有文件

function getExt($filename){return substr($filename,strripos($filename,'.'+1));$disallowed_types =array("php","asp","aspx"); //獲取文件擴展名 $FilenameExt = strtolower(getExt($_FILES["file"]["name"])); #判斷是否在允許的擴展名里面 if(in_array($FilenameExt,$disallowed_types)){die("disallowe type");} else {$filename = time().".".$FilenameExt;move_uploaded_file($_FILES["file"]["tmp_name"],"upload/".$FileName); }
  • 這段diamond的問題在獲取文件擴展名與驗證擴展名。
  • 如果我們上傳文件名 的時候為 " 1.php",注意后面有一個空格,則這里$FilenameEXT的值為"php空格",后面有一個空格,
  • 這時候inarray(FilenameExt,FilenameExt,FilenameExt,disallowed_types) 是返回false,最終成功上傳文件

文件頭content-type驗證繞過

  • 只要在文件頭中加上GIF89a后上傳,則通過,這是因為程序用了一先不可靠的函數去判斷是不是圖片文件,比如getmagesize()函數
  • 找一段段存在該漏洞的代碼 可以看到就驗證了contet-type類,我們抓包修改為該類型也許就繞過了
$type = $_Files['img']['type']; if(($type == "image/pjpeg") || ($type == "image/jpg") || ($type == "image/jpeg") || ($type == "image/gif") || ($type == "image/bmp") || ($type == "image/png") || ($type == "image/x-png") {//uploading }

條件競爭上傳

傳送門—>條件競爭

FUZZ文件上傳

傳輸門—>在該文章實驗七

還有更多繞過姿勢,該文章只是講一下上傳代碼分析基本思路

總結

以上是生活随笔為你收集整理的PHP-代码审计-文件上传的全部內容,希望文章能夠幫你解決所遇到的問題。

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