| |
|
开发:
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知识库]文件上传漏洞之白名单 |
白名单:只允许XX文件上传 文件上传流程:用户上传文件 ->服务器的缓存目录 ->移动到目标位置并且重命名 URL编码原理:把字符变成16进制,然后加上一个% URL编码的核心是为了更好的传参 1、%00截断[16进制] %00实际上代表的是经过了URL编码之后的16进制的00 00在电报中代表着结束,而在PHP某些版本中也代表着结束 我们查看源码可以知道,只允许上传jpg,png,gif后缀的文件
我们上传一个文件,然后用Burp抓包,可以看到有一个save_path=../upload/,我们分析源码可以知道,这个意思就是将上传的文件移动到上一层目录的upload的文件夹下,然后在后面会跟上一个/和随机值和当前的时间还有当前你传入文件的后缀名。如果我们在后面加上一个333.php%00,那么我们上传的文件名就会变为 /随机值333.php%00当前时间.jpg,而在php的理解中,在%00这个地方就会截止,实际的文件名就是 /随机值333.php,我们实际操作一下看一看 ?我们上传成功以后,复制图片地址,可以看到,因为编码问题,这个%00显示成了�,那我们可以截取http://zmie8016.ia.aqlab.cn/upload/333.php这一段,然后访问,可以看到,成功解析 http://zmie8016.ia.aqlab.cn/upload/333.php�/5620220912063600.jpg ?2、00截断 %00截断和00截断的区别就是传参方式不同,%00是GET传参,我们可以利用URL编码和16进制来直接传00,但是POST传参?他是不会进行URL编码的,查看源码我们可以知道
我们上传一个一句话木马的文件,用Burp抓包,在upload的后面加上一个555.phpa,然后点击Hex,这个模式就是以16进制的角度来看这个数据包,我们在右边找到我们刚才写的555.phpa,然后找到那一行的61,因为a的16进制数字是61,我们将它改为00 ?我们上传成功以后,复制图片地址,删除掉php后面多余的字符,即可成功访问 3、图片马绕过 我们之前所说的所有文件上传,都是在文件类型上面做文章,而这个图片马绕过,他是代码去检测图片的本身了,因为你上传一张图片,他是有图片的格式的,之前我们直接改后缀,它的格式是和图片的格式不一样的,我们随便打开一张JPG图片,以HEX模式查看,基本上每一个JPG图片的头部都会是JFIF ?那遇到这种检测怎么办呢?我们可以做一个图片马 我们打开cmd命令行,输入 copy 1.jpg/b + 1.txt? 66.jpg ,这个的意思就是将1.jpg和1.txt里面的东西黏到一起,/b的意思是以二进制的方法去黏,变为一个新的66.jpg的图片。注意,这个1.txt里面要放我们的一句话木马,图片的大小尽量要小一点,这个cmd命令行需要在你图片和一句话木马存放的文件夹里面打开 为了保险一点,我们可以给他再加一层, 输入copy 66.jpg/b + 1.jpg/b? 88.jpg 当然,我们也可以用这样的方法来藏文件,我们输入 copy 1.jpg + 1.zip? 2.jpg 完成之后,我们将后缀改为.zip,然后用好压或者其他的rar应用来打开,就会看到我们所藏的文件了,当然,图片的大小也会随之改变 另外,图片马的食用需要搭配解析漏洞来完成,这个后面会讲到 4、 二次渲染 ?二次渲染:获得图片后,给你重新加载,然后重新保存,相当于把你加进去的东西给你祛除了,只保留图片本身,可能是给你压缩、或者裁剪 我们可以用gif图去破,因为二次渲染他只会渲染画面部分,一般动态图片的头部四行不会渲染 我们随便打开一张GIF图片,点击用Hex模式查看,我们在第四行开始写我们的一句话木马 ?5、条件竞争 ?过滤一般有两种: ? ? ? ? 1、先上传,再检测 ? ? ? ? 2、先检测,再上传 如果是第一种过滤方法的话,就存在条件竞争,因为你检测是需要时间的,如果你上传的够快的话,你就可以利用检测的时间差,在删除之前可以访问得到上传的木马 要想能够访问的到2木马,我们得具备两个条件 ? ? ? ? 1、单身300年的手速(当然,这就需要一个工具了) ? ? ? ? 2、马生马(访问一个木马,生成另一个木马) 由于检测的是我们上传的文件,所以我们上传的文件,再生成的另一个文件,他是不会被检测的 这里我们需要用到一个函数 file_put_contents(文件地址,文件内容)? 可以将一个字符串写入文件 ????????例:file_put_contents('66.php','<?php eval($_REQUEST[8])?>'),这个文件地址就是当前文件夹下 所以我们只需要在上传的文件被删除之前访问到我们上传的文件,他就会再生成一个木马 我们点击上传文件,这里可以直接上传一个一句话木马的文件,然后用Burp抓包,把数据包放到跑包模块lntruder,然后随便框中一个不影响大局的数据,然后在Payloads的Payload type处选中Null payloads,然后在下图中输入一个不小于10000的次数,就可以进行跑包了,当然,访问的时候,我们就是访问我们上传的文件,跟这个操作是一样的,只不过抓的数据包需要换成访问的那个数据包 ?6、解析漏洞 上传漏洞的核心:上传一个.php的文件 解析漏洞的核心:让其他后缀的文件当作php来解析 一、IIS6.0解析漏洞: IIS是一个Web容器(Windows自带),6.0是他的一个版本 asa,cer,cdx的后缀都会默认被当做asp来执行 所以我们可以写一个asp的一句话木马,然后将他的后缀改为jpg,用Burp抓包,再将他的后缀改回cer或者asa或者cdx,知道地址之后,直接用蚁剑或者菜刀连马就好了 IIS解析文件的时候,是从左到右来解析的,如果遇到分号(;),他就会认为结束了,就和00截断是差不多的,我们的文件名需要写成66.asp;.jpg,这样就会被当做ASP来执行了 如果我们传入一个66.asp/1.jpg,IIS读取文件的时候会把66.asp当做文件夹来处理,但是在将这个我们传入的文件解析的时候,这个 / 符号又被当做了一个截断,又会被认为是66.asp,当然,这个利用是需要我们在后台进行文件上传,并且具备移动文件和新建文件夹的功能 二、CGI解析漏洞(PHP特有) IIS7.0、IIS7.5、Nginx可能存在 我们随便上传一张图片、复制图片地址,然后在末尾加上一个/.php,如果乱码了,那就是存在解析漏洞 我们直接上传一个图片马,复制图片地址,在末尾加上/.php,如果乱码,直接连菜刀就好了 |
|
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/23 6:22:15- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |