宿迁腾云网络网站建设公司

腾云网络 八年经验专注网站建设
  • 首页
  • 服务项目
    • 网站建设
    • 微信小程序
    • APP开发
    • SEO优化
  • 建站费用
  • 成功案例
    • 网站建设案例
    • 小程序案例
    • APP开发案例
    • SEO优化案例
  • 行业动态
    • 网站建设
    • SEO优化
    • 技术日志
  • 联系我们
    • 关于我们
首页 > 行业动态 > 技术日志 > 网站上传漏洞的前提是了解文件上传这个功能吗?

网站上传漏洞的前提是了解文件上传这个功能吗?

2021-10-17

PHP代码审计:(一)文件上传0x00概览

在网站运行过程中,不可避免地会更新网站的某些页面或内容,这时就需要使用网站上的文件上传功能。如果对上传的文件没有限制,或者绕过了限制,则可能会使用该功能将可执行文件和脚本上传到服务器,从而进一步导致服务器崩溃。

可见php文件上传代码,了解上传漏洞的前提是了解文件上传的功能及其原理。如果只知道有文件上传,而且可能有漏洞,那就和不知道一样。

具体来说,用户上传的一些文件仍然是PHP脚本。用户可以通过服务器直接访问这些上传到服务器上的PHP脚本,并且会执行其中包含的一些命令。文件上传功能如此强大,如果您的网站在文件上传方面没有很好的控制,它就会崩溃。

文件上传漏洞的原因有很多,主要包括:

其中开源编辑器漏洞和文件上传漏洞原理相同,只是多了一个编辑器。上传时,我们的脚本仍然会被上传。

松散过滤非常常见,我们将在以下示例中看到。比如大小写问题,网站只验证是否是小写,我们可以把后缀名改成大写。

然后是文件解析漏洞。比如系统会涉及到这种情况:文件名为1.php;.jpg,IIS 6.0 可能认为是jpg文件,但是当它执行被执行。我们可以利用这个解析漏洞进行上传。再比如php文件上传代码,有一些未知的后缀,比如a.php.xxx。由于后缀名无法识别,可能会被释放。如果攻击者再次执行该文件,则该网站可能被控制。

最后是路径截断,就是在上传的文件中使用一些特殊的符号,使文件在上传时被截断。比如a.php.jpg,在网站上验证时,后缀会被认为是jpg,但保存到硬盘时,会被截断为a.php,这是一个直接的php文件。

通常用于截断路径的字符有:

这些是可能导致截断的字符。需要注意的是,在实战中,由于网站的编解码规则不同,需要灵活应用。例如,\0 失败可以替换,或者你可以尝试各种编码,例如,或者,多试几次。

网站上传漏洞的前提是了解文件上传这个功能吗?(图1)

0x01 代码

文件上传首先需要一个表单,如下,我们称之为a.html:

这里有几个要素:

接下来是PHP脚本中的东西。在 PHP 中,通过 $ 对象读取文件,并使用以下属性:

t.php 中的代码是这样写的:

可以看到aaa是文件输入框中的name属性。

我们把这两个文件放在服务器的目录下,或者直接在目录下启动PHP自带的服务器。打开a.html,上传文件后,会得到这样的结果。这里我直接上传了a.html:

array(5) { 
    ["name"]=> string(6) "a.html" 
    ["type"]=> string(9) "text/html" 
    ["tmp_name"]=> string(44) "C:\Users\asus\AppData\Local\Temp\php43A1.tmp" 
    ["error"]=> int(0) 
    ["size"]=> int(133) 
}

需要说明的是,在处理文件上传的时候,不要相信文件类型的类型,因为浏览器生成后类型是可以改变的。您甚至可以手动构建类型与实际内容不匹配的数据包。

同时,不应信任文件名名称。相反,文件名和扩展名应该分开,并且扩展名应该被列入白名单。文件名根据需要丢弃并重新生成,或过滤并重新使用。

过度相信这些东西会产生一些隐患,我们将在下面看到。

0x02 实战

实战部分,我会用DVWA中的例子来演示。DVWA是一套用PHP+编写的WEB漏洞测试程序,用于常规WEB漏洞教学和检测。包含SQL注入、XSS、盲注等常见安全漏洞。项目主页在这里,源码也在这里。

下载部署后,我们打开///,这里是上传漏洞部分的源码,可以看到难度分为低、中、高三个级别。

先看低级难度low.php:

if( 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' ] );
    // Can we move the file to the upload folder?
    if( !move_uploaded_file( $_FILES[ 'uploaded' ][ 'tmp_name' ], $target_path ) ) {
        // No
        $html .= '
Your image was not uploaded.

';}else {// 是的!$html .=”

{$target_path} succesfully uploaded!

";}}

可以看到没有过滤,可以直接上传任何文件。

然后是.php:

if( 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 ) ) {
            // No
            $html .= '
Your image was not uploaded.

';}else {// 是的!$html .=”

{$target_path} succesfully uploaded!

";}}else {// file$html .= '

网站上传漏洞的前提是了解文件上传这个功能吗?(图2)

Your image was not uploaded. We can only accept JPEG or PNG images.

';}}

注意第10行和第11行,验证类型必须是jpg或png,大小必须小于某个值。后者可以忽略。刚才我说类型不可信,我们可以抓包,改类型,然后提交。

因为我想演示如何突破上传限制,而不是如何使用上传的脚本,所以我直接创建了一个新的PHP文件,并在其中写入了一些内容。打开抓包,我们会在请求体中看到类似这样的内容:

------WebKitFormBoundaryh4zhLV52OKhf6aJg
Content-Disposition: form-data; name="uploaded"; filename="a.php"
Content-Type: application/octet-stream

右键单击“发送到”并将该 /- 更改为 /jpeg。点击“前往”发送。

最后,高级high.php:

if( 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 ) ) {
            // No
            $html .= '
Your image was not uploaded.

';}else {// 是的!$html .=”

{$target_path} succesfully uploaded!

";}}else {// file$html .= '

Your image was not uploaded. We can only accept JPEG or PNG images.

';}}

观察同样的位置,这次改用后缀名来判断。这时候我们可以在后缀前插入\0,即a.php\0.jpg。请注意,它不是斜线加零,而是空字符。这样判断的时候,后缀是.jpg,写入磁盘时会被截断为a.php。它可以被上传或执行。

我们还捕获包裹并交付。先把a.php改成a.php.jpg,然后切换到十六进制编辑模式插入空字符。

鼠标拖动的范围是a.php.jpg,在第二个2e网格上右击,点击“byte”,会自动插入一个\0。然后点击“开始”,你就完成了。

注意这里插入的话,会上传成功,但是访问的时候会直接当作图片处理,里面的内容不会被执行。

0x03 解决方案

同目录下还有一个.php,里面有正确的做法。大家可以看看。里面的代码使用了$=md5(().$).'.'。$; 生成独立的文件名,使其不受原文件名中各种截断字符的干扰。

0x04 注意

Tag: php 文件上传 漏洞
网站制作公众号

宿迁腾云网络网站建设公司 | 网站开发 | 网站制作 | 网站优化

咨询电话:13160355545

上一篇

返回栏目

下一篇

免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。

热推

  • 一种源码加密技术:加密软件()下载地址介绍
  • 关于网站升级PHP版本的方法步骤介绍,你知道吗?
  • Andy'sBlog»编码,编码转换ת,批量转换
  • php源码加密工具 开源PHP语言的八大优势,你知道几个?(上)cms php开源源码
  • 依赖ZE内部管理2自己写内存管理#深圳PHP培训
  • 编程语言图案 操作视频油管优酷从开始.gif(这里有彩蛋)
  • 本站所发布的一切破解补丁、注册机和注册信息及软件的解密
  • 增加网站访问统计代码任务执行步骤和要求:任务名称
  • php框架有哪些上周将自己用C++开发的框架forC及C++代码php框架免费下载
  • 谷歌将语言取代JAVA作为安卓开发的一级编程语言

相关

了解常见PHP应用程序安全威胁,掌握6个常见安全性攻击

了解常见PHP应用程序安全威胁,掌握6个常见安全性攻击

如何查看php版本?多种方法助你快速知晓

如何查看php版本?多种方法助你快速知晓

PHP格式化:提升代码质量与协作效率的关键规则

如何查看虚拟主机上的 PHP 版本?这篇文章告诉你

Linux 系统管理员和 web 开发者必知:如何查看 PH

Linux 系统管理员和 web 开发者必知:如何查看 PH

免费开源的轻量级 PHP 开发框架 ThinkPHP,遵循

从零开始开发完整网站:前端、后端与 Web 服务器的关键技术

php框架 Java 与 PHP 之争:为何懂技术的大佬选

BitDefender 发布超级工厂病毒专杀工具,可清除所有

asp语言与php语言的区别 前端和后端的区别,你真的了解吗

标签

seo(1182) 市场营销(661) 网站制作(573) 网站建设(564) 搜索引擎(553) 网站(482) PHP(361) 编程语言(345) 建站(294) 关键词排名优化(267) 网站建设公司(245) 优化(216) seo排名(207) 域名(190) 软件(171) 网站优化(148) 搜索引擎优化(146) 外链(141) 科技(136) 网站关键词(124) 网站排名优化(123) 域名服务器(120) 网站排名(107) 时政(103) 排名优化(95) 搜索引擎收录(93) 网站设计(92) 电子商务(88) 引擎(86) 移动互联网(85) 开发框架(79) 开发(75) 网站服务器(74) 框架(68) 前端开发(68) 网站分析(66) 网站建设方案(65) 关键(64) 流量(63) 源码(62) 百度优化(62) 网站权重(61) 开放源代码(59) seo培训(53) 网页设计(51) 百度(51) php框架(50) 网站建设知识(50) 大数据(50) 谷歌(49)
宿迁腾云网络网站建设公司
网站建设
  • 私人定制
  • 标准模板建站
  • 经济模板建站
精品模板

宿迁腾云网络网站建设公司

联系电话:13160355545

公司地址:江苏省宿迁市丽景湾华庭北门都市花园公寓9楼907

联系邮箱:admin@tyweb.net

全国分站
  • 北京
  • 广东
  • 东莞 广州 中山 深圳 惠州 江门 珠海 汕头 佛山 湛江 河源 肇庆 潮州 清远 韶关 揭阳 阳江 云浮 茂名 梅州 汕尾
  • 山东
  • 济南 青岛 临沂 济宁 菏泽 烟台 泰安 淄博 潍坊 日照 威海 滨州 东营 聊城 德州 莱芜 枣庄
  • 江苏
  • 苏州 徐州 盐城 无锡 南京 南通 连云港 常州 扬州 镇江 淮安 泰州 宿迁
  • 河南
  • 郑州 南阳 新乡 安阳 洛阳 信阳 平顶山 周口 商丘 开封 焦作 驻马店 濮阳 三门峡 漯河 许昌 鹤壁 济源
  • 上海
  • 河北
  • 石家庄 唐山 保定 邯郸 邢台 沧州 秦皇岛 张家口 衡水 廊坊 承德
  • 浙江
  • 温州 宁波 杭州 台州 嘉兴 金华 湖州 绍兴 舟山 丽水 衢州
  • 陕西
  • 西安 咸阳 宝鸡 汉中 渭南 安康 榆林 商洛 延安 铜川
  • 湖南
  • 长沙 邵阳 常德 衡阳 株洲 湘潭 永州 岳阳 怀化 郴州 娄底 益阳 张家界 湘西
  • 重庆
  • 福建
  • 漳州 泉州 厦门 福州 莆田 宁德 三明 南平 龙岩
  • 天津
  • 云南
  • 昆明 红河 大理 文山 德宏 曲靖 昭通 楚雄 保山 玉溪 丽江 临沧 思茅 西双版纳 怒江 迪庆
  • 四川
  • 成都 绵阳 广元 达州 南充 德阳 广安 阿坝 巴中 遂宁 内江 凉山 攀枝花 乐山 自贡 泸州 雅安 宜宾 资阳 眉山 甘孜
  • 广西
  • 贵港 玉林 北海 南宁 柳州 桂林 梧州 钦州 来宾 河池 百色 贺州 崇左 防城港
  • 安徽
  • 芜湖 合肥 六安 宿州 阜阳 安庆 马鞍山 蚌埠 淮北 淮南 宣城 黄山 铜陵 亳州 池州 巢湖 滁州
  • 海南
  • 三亚 海口 琼海 文昌 东方
  • 江西
  • 南昌 赣州 上饶 吉安 九江 新余 抚州 宜春 景德镇 萍乡 鹰潭
  • 湖北
  • 武汉 宜昌 襄樊 荆州 恩施 孝感 黄冈 十堰 咸宁 黄石 仙桃 随州 天门 荆门 潜江 鄂州 神农架
  • 山西
  • 太原 大同 运城 长治 晋城 忻州 临汾 吕梁 晋中 阳泉 朔州
  • 辽宁
  • 大连 沈阳 丹东 辽阳 葫芦岛 锦州 朝阳 营口 鞍山 抚顺 阜新 本溪 盘锦 铁岭
  • 黑龙江
  • 齐齐哈尔 哈尔滨 大庆 佳木斯 双鸭山 牡丹江 鸡西 黑河 绥化 鹤岗 伊春 大兴安岭 七台河
  • 内蒙古
  • 赤峰 包头 通辽 呼和浩特 乌海 鄂尔多斯 呼伦贝尔
  • 贵州
  • 贵阳 黔东 黔南 遵义 黔西 毕节 铜仁 安顺 六盘水
  • 甘肃
  • 兰州 天水 庆阳 武威 酒泉 张掖 陇南 白银 定西 平凉 嘉峪关 临夏 金昌 甘南
  • 青海
  • 西宁 海西 海东 海北 果洛 玉树 黄南
  • 新疆
  • 乌鲁木齐 伊犁 昌吉 石河子 哈密
  • 西藏
  • 拉萨 山南 林芝 日喀则
  • 吉林
  • 长春 白山 白城 延边 松原 辽源 通化 四平
  • 宁夏
  • 银川 吴忠 中卫 石嘴山 固原
SiteMap
网站地图
TAG标签
Copyright © 2017-2025 TYWEB.NET 宿迁腾云网络科技有限公司 ALL RIGHTS RESERVED.   苏ICP备17033535号-1

热门搜索

百度 下载 2025 2024 2026 货源 货货源 虚拟 禅道 报名 金蝶KIS旗舰版
  • 客服

    在线客服

  • 电话

    13160355545

  • 微信

精品模板
建站费用
成功案例
联系我们