函数

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-代码审计-文件上传相关推荐

  1. [网络安全提高篇] 一〇九.津门杯CTF的Web Write-Up万字详解(SSRF、文件上传、SQL注入、代码审计、中国蚁剑)

    这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步.这篇文章主要介绍5月9日参加津门杯CTF题目知识,包括power_cut.hate_ ...

  2. 文件上传/JS/MIME/黑名单/白名单/htaccess/00截断详解篇[代码审计]

    文件上传漏洞定义 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力,这种攻击方式是最为直接和有效的,"文件上传"本身没有问题,有问题的是 ...

  3. 通达OA V11.3 代码审计 (文件上传、文件包含、任意用户登录漏洞)

    因为这段时间比较忙,抽出时间写博客很不容易,所以就简单的吧印象笔记里面的内容站上俩,没有写太多具体的分析过程,尽量都在截图中说明了 附件 通达OA11.3源码(未解码,可以自己去下SeayDzend解 ...

  4. 代码审计:YCCMS 代码执行 文件上传 任意文件删除

    代码审计:YCCMS 代码执行 文件上传 任意文件删除 YCCMS 审计准备 代码审计 代码执行漏洞 文件上传漏洞 任意文件删除漏洞 YCCMS YCCMS是一款PHP版轻量级CMS建站系统,程序页面 ...

  5. 任意文件上传mysql_[代码审计]XiaoCms(后台任意文件上传至getshell,任意目录删除,会话固定漏洞)...

    0x00 前言 这段时间就一直在搞代码审计了.针对自己的审计方法做一下总结,记录一下步骤. 审计没他,基础要牢,思路要清晰,姿势要多且正. 下面是自己审计的步骤,正在逐步调整,寻求效率最高. 0x01 ...

  6. 【代码审计-2】PHP框架MVC类文件上传断点测试挖掘

    1.文件上传漏洞挖掘: (1)关键字搜索(函数.键字.全局变量等):比如$_FILES,move_uploades_file等 (2)应该功能抓包:寻找任何可能存在上传的应用功能点,比如前台会员中心, ...

  7. 代码审计--CatfishCMS文件上传漏洞

    声明:本公众号大部分文章来黑白之间安全团队成员的实战经验以及学习积累,文章内公布的漏洞或者脚本都来自互联网,未经授权,严禁转载. 请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作 ...

  8. 【代码审计】CLTPHP_v5.5.3 前台任意文件上传漏洞分析

      0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...

  9. PHP代码审计7—文件上传漏洞

    文章目录 一.文件上传漏洞基础 1.漏洞原理 2.常见的防御方法与绕过技巧 3.近期公布的文件上传漏洞 二.Upload-Labs 部分代码分析 1.Pass-4 后缀名黑名单检测 2.文件头白名单检 ...

  10. 【渗透测试】一次运气很好的文件上传

    文件上传 发现源代码泄露 打开自己珍藏已久的辣鸡字典,扫描发现存在bin.zip信息泄露,尝试进行代码审计 文件位置:SimpleDataPlatform.SimpleDataPlatform.fil ...

最新文章

  1. 安装envi出现cannot find lincese_Ubuntu 16.04 安装 CUDA10.1 (解决循环登陆的问题)
  2. boost::hana::make_map用法的测试程序
  3. 转载一个不错的Scrapy学习博客笔记
  4. 那些大学简称背后的“爱恨情仇”:东西南北中,就剩北大没人抢了
  5. html自动给图片加上水印 代码_如何给一千张图片去水印?还好我会python,100行代码轻松搞定...
  6. bzoj4419 [Shoi2013]发微博 差分
  7. 持续集成:什么应该自动化?
  8. android ui设计最新字体,UI设计常用字体规范
  9. 数据结构 图的邻接表
  10. 均匀分布取某一点概率_统计概率思维
  11. 电脑如何查看wifi密码?
  12. 笔记本 安装服务器系统,笔记本电脑安装Windows Server 2016之我见
  13. 树莓派4+普通机械硬盘+Netatalk搭建家用Nas+苹果TimeMachine
  14. GShutDown:自动化关机鄙吝材
  15. 论文解读:K-BERT:Enabling Language Representation with Knowledge Graph(AAAI-20)
  16. MyBatis中如何使用insert标签呢?
  17. Linux Raid相关知识
  18. css整理 -- 右箭头,上下箭头,三角形
  19. Codeforces 1428E Carrots for Rabbits
  20. 聊聊浏览器的标准模式和怪异模式

热门文章

  1. Java计算一段程序的运行时间
  2. 使用DBLink方式同步远程数据库中含Blob、Clob字段表的问题解决
  3. solaris下同一机器2个实例之间切换
  4. linux中find查找命令的mtime参数使用方法说明
  5. 域渗透基础之环境搭建(单域到组件域林)
  6. eclipse自动补全
  7. PHP中被忽略的性能优化利器:生成器
  8. 动态生成的DOM做点击事件无效
  9. listview侧滑删除
  10. editActionsForRowAtIndexPath(iOS8) tableview编辑(删除、插入、移动)