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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文件上传漏洞——DVWA练习

發布時間:2024/9/30 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文件上传漏洞——DVWA练习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:文件上傳漏洞是很常見的漏洞,也非常有趣,接下來就在DVWA靶場中邊學邊練。

文件上傳漏洞

文件上傳漏洞是指由于程序員在對用戶文件上傳部分的控制不足或者處理缺陷,而導致的用戶可以越過其本身權限向服務器上上傳可執行的動態腳本文件。這里上傳的文件可以是木馬,病毒,惡意腳本或者WebShell等。這種攻擊方式是最為直接和有效的,“文件上傳”本身沒有問題,有問題的是文件上傳后,服務器怎么處理、解釋文件。如果服務器的處理邏輯做的不夠安全,則會導致嚴重的后果。

具體的原理可以看大師傅的講解
Smi1e_——文件上傳漏洞 學習筆記
文件上傳漏洞
low級別


觀察源碼

<?phpif( isset( $_POST[ 'Upload' ] ) ) {// Where are we going to be writing to?$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] ); # $_FILES["file"]["name"] - 被上傳文件的名稱 # $_FILES["file"]["tmp_name"] - 存儲在服務器的文件的臨時副本的名稱 # basename() 函數返回路徑中的文件名部分// Can we move the file to the upload folder?if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {# move_uploaded_file() 函數將上傳的文件移動到新位置// Noecho '<pre>Your image was not uploaded.</pre>';}else {// Yes!echo "<pre>{$target_path} succesfully uploaded!</pre>";} }?>

通過對源碼的分析,我們發現沒有任何防護和限制,那就構造一句話木馬

進行上傳

根據相應的路徑進行菜刀連接即可

Medium級別

上傳剛才一句話木馬試一下,發現

只能上傳JPG或者是PNG,那就來查看一下源碼

<?phpif( isset( $_POST[ 'Upload' ] ) ) {// Where are we going to be writing to?$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );// File information$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];$uploaded_type = $_FILES[ 'uploaded' ][ 'type' ];$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];// Is it an image?if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&( $uploaded_size < 100000 ) ) {// Can we move the file to the upload folder?if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {// Noecho '<pre>Your image was not uploaded.</pre>';}else {// Yes!echo "<pre>{$target_path} succesfully uploaded!</pre>";}}else {// Invalid fileecho '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';} }?>

通過分析源碼,發現只有這一段代碼進行了限制

if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&( $uploaded_size < 100000 ) )

只能上傳jpeg或png的圖像,限制了大小,其他沒有任何防護,那就可以用
一句話木馬圖片

一句話木馬圖片的制作
一、建立一個bat文件,用記事本打開輸入cmd

二、將上傳的圖片和一句話php文件執行以下命令即可

copy 圖片1.jpg/b+PHP文件2.php/a 自定義圖片名3.jpg



發現一句話確實已經插入圖片中

上傳成功,用菜刀連接

結果連接不上去,這里我們上傳的是一張圖片,那對方服務器就認為我們上傳的是一張很正常的圖,因此只會當做圖片來解析,所以圖片里的php代碼不會被解析了,這里需要了解文件包含漏洞才能將圖片進行解析。因為文件包含漏洞也是很好玩的知識,這里就不詳細寫了,之后單獨總結出一篇博客來學習文件包含漏洞

我這里上傳的是3.jpg
在url地址欄中輸入

http://127.0.0.1/DVWA/vulnerabilities/fi/?page=file://D:\PHPstudy\PHPTutorial\WWW\DVWA\hackable\uploads\3.jpg

發現圖片已經被解析了,那么PHP代碼也肯定被服務器解析了,用菜刀進行連接

結果還是連不上去,發現有三行警告

警告:無法修改頭信息

做到這里實在連不上去,不知道是什么原因,這種方法就暫時先留到這,等找到解決方法了再繼續做

除下這種方法還可以用抓包修改文件的type
通過觀察這兩段代碼

if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&( $uploaded_size < 100000 ) ) {

只是限制了Content-Type,沒有限制后綴名,所以這里可以直接抓包修改Content-Type即可

發包,上傳成功

訪問成功

這里為了方便就不連接菜刀了,將一句話木馬改為

<?php phpinfo(); ?>

High級別
查看源碼

<?phpif( isset( $_POST[ 'Upload' ] ) ) {// Where are we going to be writing to?$target_path = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );// File information$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];$uploaded_ext = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);$uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];$uploaded_tmp = $_FILES[ 'uploaded' ][ 'tmp_name' ];// Is it an image?if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&( $uploaded_size < 100000 ) &&getimagesize( $uploaded_tmp ) ) {// Can we move the file to the upload folder?if( !move_uploaded_file( $uploaded_tmp, $target_path ) ) {// Noecho '<pre>Your image was not uploaded.</pre>';}else {// Yes!echo "<pre>{$target_path} succesfully uploaded!</pre>";}}else {// Invalid fileecho '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';} } #$_FILES['myFile']['name'] 顯示客戶端文件的原名稱。 #$_FILES['myFile']['type'] 文件的 MIME 類型,例如"image/gif"。 #$_FILES['myFile']['size'] 已上傳文件的大小,單位為字節。 #$_FILES['myFile']['tmp_name'] 儲存的臨時文件名,一般是系統默認。 #$_FILES['myFile']['error'] 該文件上傳相關的錯誤代碼。以下為不同代碼代表的意思: #strtolower() 函數把字符串轉換為小寫 #getimagesize() 函數將測定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 圖像文件的大小并返回圖像的尺寸以及文件類型及圖片高度與寬度。 #strrpos() 函數查找字符串在另一字符串中最后一次出現的位置 ?>

觀察源碼發現,代碼中增加了一段代碼

$uploaded_ext = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);

并且修改了這一段代碼

if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&( $uploaded_size < 100000 ) &&getimagesize( $uploaded_tmp ) )

先來解讀一下第一段代碼,strrpos()函數查找.出現在$uploaded_name的位置然后加1,再利用substr()函數從變量$uploaded_name的指定位置截取部分字符串。所以這段代碼的作用就是為了截取上傳文件的后綴名

第二段代碼,strtolower()函數將無論是大寫或小寫的后綴名全改為小寫,以防大小寫繞過,并且getimagesize() 函數用于獲取圖像大小及相關信息,所以這里再用之前的php文件后綴名改為jpg或png就不可行了,不過也可以利用這個函數的漏洞進行繞過,既然對文件的開頭內容進行了檢測并且通過二進制識別是否為圖像,那么就可以利用文件頭欺騙,來讓getimagesize()函數檢測無效。

先了解一下常用圖片的文件頭標識
通過文件頭標識判斷圖片格式
文件頭欺騙

getimagesize() 函數在這里作用就是檢測是否為圖像的作用,這里就用最簡便的GIF的文件頭,在一句話木馬前加上GIF的文件頭標識

上傳

上傳成功,說明成功繞過

用文件包含來進行訪問

http://127.0.0.1/DVWA/vulnerabilities/fi/?page=file:///D:\phpStudy1\PHPTutorial\WWW\DVWA\hackable\uploads\2.jpg

但應該是我配置有問題,我的文件包含報錯,但這種方法沒錯

除此之外那,也可以上傳圖片馬,然后用文件包含進行解析,由于我這里配置的有問題就不再演示了,不過這種方法確實是可行的,看過許多大師傅們都是這樣做的

總結:雖然遇到了很多問題,不過也初步了解了文件上傳漏洞的原理和一些姿勢,接下來通過Upload-labs進行學習。

總結

以上是生活随笔為你收集整理的文件上传漏洞——DVWA练习的全部內容,希望文章能夠幫你解決所遇到的問題。

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