freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

DVWA文件上传高级源码分析详解
woshidatianguan 2023-06-17 20:32:16 167619
所属地 北京

DVWA文件上传高级源码分析详解

1.源码详解

<?php
if( isset( $_POST[ 'Upload' ] ) ) {
// post传参
$target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
//设定文件上传路径
$target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );
//上传后的文件路径=文件上传的路径+文件名
//上传文件的参数(名字,大小,后缀名)
$uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
$uploaded_ext  = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);
//输出后缀名
//strrpos()在这里的作用返回后缀名前一位的位数,即.前面的字母是整个文件名字符串的第几位。(例如:abc.jpg的j是整个字符串的第5位)
//substr()在这里的作用是分割字符串,例如将abc.jpg字符串从第5位开始分割,并将分割后的字符串返回(jbg)
$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 ) ) {
    // strtolower()将后缀名字符串转化为小写
    //if判断后缀名的格式,文件的大小(97kb),文件的文件头
   //getimagesize()函数用于获取图像大小及相关信息,即不仅后缀名要           符合上传要求,图像内容也要符合上传要求
   // Can we move the file to the upload folder?
   if( !move_uploaded_file( $uploaded_tmp, $target_path ) ) {
       // move_uploaded_file()检查并确保$uploaded_tmp是合法             的上传文件,如果文件合法,则将其移动为由 $target_path 指               定的文件
       echo '<pre>Your image was not uploaded.</pre>';
  }
   else {
       // Yes!
       echo "<pre>{$target_path} succesfully uploaded!</pre>";
  }
}
else {
   // 如果不是png,jpg,jpeg格式,小于97kb,文件内容不属于图片的,输出下列内容
   echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
}
}
?>

2.函数

函数解释
basename返回路径中的文件名部分
strrpos计算指定字符串在目标字符串中最后一次出现的位置
substr返回字符串的子串
strtolower将字符串转化为小写
getimagesize用于获取图像大小及相关信息
move_uploaded_file将上传的文件移动到新位置

3.案例

(1).basename

basename($path,  $suffix = "")

参数

path
一个路径。
在 Windows 中,斜线(/)和反斜线(\)都可以用作目录分隔符。在其它环境下是斜线(/)。
suffix
如果文件名是以 suffix 结束的,那这一部分也会被去掉。

1687004499_648da55358b2e6750ba9d.png!small?1687004499338

(2).strrpos()

strrpos($haystack, $needle,$offset)

参数

haystack,在此字符串中进行查找。
needle,指定该字符串
offset,如果为 0 或正数,则从左到右搜索,如果为负数,则从右向左执行搜索

1687004570_648da59a81586a7f39216.png!small?1687004570399

(3).substr()

substr($string, $offset, $length)

参数

string,输入字符串。 
offset,如果为 0 或正数,则从左到右搜索,如果为负数,则从右向左执行搜索,如果 string 的长度小于 offset,将返回空字符串
length,如果为正数,则从左到右搜索,如果为负数,则从右向左执行搜索,如果提供了值为 0 的 length,那么将返回一个空字符串。

1687004581_648da5a5ec979ba05c3cd.png!small?1687004581938

(4).strtolower()

strtolower($string)

参数

string,输入字符串

1687004590_648da5aecd9bcc56a15e1.png!small?1687004591140

(5).getimagesize

getimagesize($filename)

1687004606_648da5bec5bc73a7b0b04.png!small?1687004606827

(6).move_uploaded_file

move_uploaded_file($from,$to)

参数

from,上传的文件的文件名。       

to,移动文件到这个位置。

本函数检查并确保由from指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由to指定的文件。 这种检查显得格外重要,如果上传的文件有可能会造成对用户或本系统的其他用户显示其内容的话。

该函数需要与上传文件的函数配合使用,故不在此演示。

# 渗透测试 # 数据泄露 # web安全 # 漏洞分析 # 网络安全技术
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 woshidatianguan 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
woshidatianguan LV.5
这家伙太懒了,还未填写个人描述!
  • 34 文章数
  • 18 关注者
代码审计 | RuoYi4.6.2Thymeleaf模板注入详解
2024-12-13
代码审计ruoyi_v4.6.2 | SQL注入详解
2024-12-04
代码审计ruoyi_v4.6.1 | SQL注入详解
2024-11-29
文章目录