| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> PHP知识库 -> 详细 | 文件上传利用总结 -> 正文阅读 |
|
[PHP知识库]详细 | 文件上传利用总结 |
目录 getimagesize()、exif_imagetype()函数检查 目录 getimagesize()、exif_imagetype()函数检查 找到上传点,先初步判断一下做了什么防御手段: 客户端检查利用burp抓包改包,先上传一个jpg类型的木马,然后通过burp将其改为asp/php/jsp后缀名即可 服务端后缀黑名单上传特殊可解析后缀
上传.htaccess.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过 .htaccess文件,可以实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能IIS平台上不存在该文件,该文件默认开启,启用和关闭在 httpd.conf 文件中配置。 ?.htaccess 文件生效前提条件为: mod_rewrite 模块开启 AllowOverride All 上传.user.ini原理: 1、.user.ini 有点像.htaccess,php运行时,会检索加载所有目录下的.ini配置文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。 2、.user.ini是一个能被动态加载的ini文件,这点和php.ini不同。也就是说修改了.user.ini后,不需要重启服务器中间件,只需要等待user_ini.cache_ttl所设置的时间(默认为300秒),即可被重新加载。 利用: 上传.user.ini:
或者
上传一个包含webshell代码的1.gif:
访问本目录下任意文件附带参数?a=xxx 就可以实现命令执行
配合解析漏洞IIS: 目录解析漏洞(/test.asp/1.jps) 文件名解析漏洞(test.asp;.jpg) 畸形解析漏洞(test.jpg/*.php) Nginx: 畸形解析漏洞(test.jpg/*.php) %00空字节代码解析漏洞 CVE-2013-4547(%20%00) Apache: 文件名解析漏洞(test.php.owf.xdx) 详细参考:文件解析漏洞总结(IIS,APACHE,NGINX) - yokan - 博客园 利用NTFS ADS特性其他点绕过、空格绕过、后缀双写绕过、后缀大小写绕过、%00绕过、0x00绕过 GET: shell.php%00.jpg POST: (hex里面改)
服务器后缀白名单00截断、MIME、点、空格、点空格点、::$DATA
GET:
POST: (hex里面改)
检查内容文件头检查木马文件中插入 允许上传的文件类型的文件头。 如gif 1.php
MIME正常上传木马文件,burp抓包修改 Content-Type:image/jpg 等 getimagesize()、exif_imagetype()函数检查生成图片马:
也可以使用edjpgcom.exe工具 然后结合文件包含漏洞利用 二次渲染(1)上传gif图片:先将普通的gif图片上传,会被渲染,渲染之后再下载下来,与原git图片对比,找到渲染前后没有变化的位置,然后在这些位置插入php一句话,再上传即可。 (2)上传jpg、png图片:这两种格式图片的二次渲染绕过要难很多很多:png(索引类型图,写入 PLTE 数据块或写入IDAT数据块),jpg(成功性不大),具体参考???https://xz.aliyun.com/t/2657#toc-3 技巧点:在目标网站渲染的过的图片再修改,修改后的再传两次 条件竞争由于代码逻辑问题,其先将我们上传的图片保存,然后再进行处理,删除原图片,因此我们可以利用条件竞争,在我们上传的图片马被删除之前触发它。 方法: 利用burp不断发包,不断触发 1.php
绕过WAF云WAF通过寻找域名真实IP,使用真实IP进行文件上传,绕过waf限制 例如 传shell时发现存在某云WAF,需进一步绕过 通过寻找域名真实IP,使用真实IP进行文件上传,绕过waf限制 构造畸形的数据包,“打乱”waf的检测WAF如何拦截: 文件名: 解析文件名,判断是否在黑名单内 文件内容 解析文件内容,判断是否为webshell 目前,市面上常见的是解析文件名,少数WAF是解析文件内容,比如长亭。下面内容,都是基于文件名解析。 绕过: 获取文件名的地方在Content-Disposition: form-data; name="file_x"; filename="xx.php"和Content-Type里,所以绕过的地方也就在这两个地方了。 1、去掉引号 2、双引号变单引号 3、多加一个引号 4、大小写 对这三个固定的字符串进行大小写转换 比如name转换成Name,Content-Disposition转换成content-disposition。 5、空格 在:?;?=添加1个或者多个空格,不过测试只有filename在=前面添加空格,上传失败。 在filename=后面添加空格上传成功 6、去掉或修改Content-Disposition值 有的WAF在解析的时候,认为Content-Disposition值一定是form-data,造成绕过。 7、删掉content-type 同上 8、交换name和filename的顺序 规定Content-Disposition必须在最前面,所以只能交换name和filename的顺序。 有的WAF可能会匹配name在前面,filename在后面,所以下面姿势会导致Bypass: Content-Disposition: form-data; filename="xx.php"; name=file_x 9、多个boundary 最后上传的文件是test.php而非test.txt,但是取的文件名只取了第一个就会被Bypass。 10、多个filename 最终上传成功的文件名是test.php。但是由于解析文件名时,会解析到第一个。正则默认都会匹配到第一个。 11、多个分号 文件解析时,可能解析不到文件名,导致绕过。 12、header头,Content-Type :? multipart/form-DATA 这种绕过应该很少,大多数都会忽略大小写。php和java都支持。 13、header头在boundary前添加任意字符 php支持,java不支持 14、filename换行
15、filename文件名添加单引号(‘)分号(;)等
16、filename==或者filename===绕过 17、name 和filename之间添加任意字符或者是大量字符 18、form-data用+拼接 19、Content-Disposition:* 20、filename="1.jpg .Php"类似这种的各种尝试 上传成功后寻找返回路径正常情况下,在返回包中可以找到文件上传路径,如果未返回路径或找不到,可以尝试以下方法: 1、 刷新, f12? network/浏览器history搜索shell名字,或点击下载文件可能就知道了路径或相似路径。有些时候改名字的wordpress插件,编辑器等等,就可以通过这种方式发现 2、 返回了一些参数但不包括路径的情况,比如file_id 等等,那么文件路径可能存储在数据库中,可以结合sql注入?sqlmap的--search -C参数找到字段和值 3、 什么都没返回的情况,只返回了ok,true等等。重新加载,抓包看响应,或许某个接口的响应就包括对应的路径。 比如头像位置上传上去了,但是没有返回路径,那么想办法让他在加载一遍,比如退出重新登陆,一个包一个包的放。可能有些包的响应中就包含路径。 ???? 另外可能存在其他服务器、或者其他站点的其他路径,也是抓包查看,看一下加载过程的路径在哪或者看一下html、js 4、 只返回了文件名,没有路径 一种是fuzz,看其他同类型文件的路径,f12或者如果有文件下载的地方,下载抓包,看文件地址。 另一种是 尝试上传的时候目录穿越,一次一次尝试,看能否穿到站点根目录或者知道的目录下面。修改不如表单的其他参数、或者filename参数的值 5、 尝试访问日志文件,看能否发现一些敏感目录或上传目录 比如泛微 6、 上传上去没有访问直接下载,当前文件夹没有执行权限 这种情况,尝试目录穿越的方式,穿到其他目录下,比如根目录,来绕过限制
其他一些情况1、当前上传接口无法绕过时,注意观察文件名,fuzz相似接口
temp、test等等接口 fck编辑器的漏洞就是这样的, 例子: 2、尝试修改表单其他字段,看是否会影响后缀,(参数的优先级) 例子: 测试中发现了一个上传点,但waf拦截jsp、html等后缀,更改后缀重放数据包会导致reset,如下: fileName和fileType参数可控,且当存在两个不同的后缀时,最上层的filename参数优先级为最高,可导致任意文件上传 发现上传成功的jsp文件其回显的type类型为image/png类型 删除最下层filename的Content-Type: image/png,文件上传类型即可被绕过 技术交流?关注微信公众号 Z20安全团队 , 回复 加群 ,拉你入群 一起讨论技术。 |
|
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年12日历 | -2024/12/27 5:36:38- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |