| |
|
开发:
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知识库]上传漏洞-绕过上传 |
目录 绕过内容检查实现文件上传文件上传漏洞简介 通常web站点会有用户注册功能,而当用户登录之后大多数情况下会存在类似头像上传、附件上传之类的功能,这些功能点往往存在上传验证方式不严格的安全缺陷,导致攻击者通过各种手段绕过验证,上传非法文件,这是在web渗透中非常关键的突破口。 文件上传漏洞危害 攻击者绕过上传验证机制上传恶意文件,通过上传的web后门获得整个web业务的控制权,复杂一点的情况是结合web服务器的解析漏洞来获取权限。 文件上传检测流程 通常一个文件以HTTP协议进行上传时,将以POST请求发送至web服务器,web服务器收到请求并同意后,用户与web服务器将建立连接,并传输数据。 制作图片马木 图片马制作方法:copy test.gif /b + eval.php /a eval.gif 将PHP一句话追加到gif图片末尾,b表示二进制文件,a表示ASCII码文件,形成一个包含webshell代码的新gif文件eval.gif。 任务描述:绕过文件头检查,添加GIF图片的文件头绕过GIF图片检查,上传图片木马,配合文件包含漏洞执行webshell。 显示源码,根据源码提示进行文件上传: 上传eval.gif并用burpsuite抓包: ?可以看到图片马最后包含webshell代码;添加GIF图片的文件头GIF89a: 点击go后查看响应: ?配合文件包含漏洞执行webshell: 在upload目录下写一个include.php文件,内容为: 菜刀连接webshell: 点这个‘+’号,输入webshell地址:http://10.1.1.100/upload-labs/upload/include.php?page=7820200101163204.gif ?在后面的post数据输入框里输入:test=phpinfo(); ?点击post数据输入框后面的提交键,即可连接webshell: 任务描述:突破getimagesize(),配合文件包含漏洞执行webshell。 这里使用getimagesize()获取文件类型,直接上传图片马,添加GIF图片的文件头绕过GIF图片检查。 上传eval.gif并用burpsuite抓包,添加GIF图片的文件头GIF89a,点击‘go’之后查看响应内容: ?利用菜刀,配合文件包含漏洞连接webshell: 任务描述:还可以通过上传.php文件,修改Content-Type,添加GIF图片的文件头GIF89a进行绕过。 写一个PHP一句话木马eval.php: 上传eval.php并用burpsuite抓包,修改Content-Type为image/gif,添加GIF图片的文件头GIF89a: ?利用菜刀,配合文件包含漏洞连接webshell: ? 成功连接。 绕过白名单检查实现文件上传常见的MIME类型
00截断 1.0x00截断 ??? ? ? 0x00是十六进制表示方法,表示ASCII码为0的字符,在一些函数处理时,会把这个字符当作结束符。 ???? ?? 0x00可以用在对文件名的绕过上,具体原理:系统在对文件名进行读取时,如果遇到0x00,就会认为读取已经结束。但要注意是文件的十六进制内容里的00,而不是文件名中的00。也就是说系统是按二进制或十六进制读取文件,遇到ASCII码为0的位置就停止,而这个ASCII码为0的位置在十六进制中是00。 ????? 总之就是利用ASCII码为0这个特殊字符,让系统认为字符串已经结束。 2.%00截断 ? ?? ?? url发送到服务器后被服务器解码,这时还没有传到验证函数,也就是说验证函数里接收到的不是%00字符,而是%00解码后的内容,即解码成了0x00。总之就是%00被服务器解码为0x00发挥了截断作用。 3.0x0a ? ? ??? 0x0a是十六进制表示方法,表示ASCII码为/n的换行字符,具体为换行至下一行行首起始位置。 任务描述:通过修改MIME类型,使其符合$_FILES['upload_file']['type']的白名单,达到上传恶意文件的目的。 在桌面写一个简单的一句话木马eval.php: 查看源码可以发现是白名单判断,只允许上传$_FILES['upload_file']['type']为'image/jpeg'、'image/png'及'image/gif'的文件。 ?上传eval.php并用burpsuite抓包: ?修改Content-Type为image/gif,点击‘go’之后在Response处查看响应内容: ?成功上传木马文件到upload文件夹。 任务描述:$img_path直接拼接,利用%00截断进行绕过,上传恶意文件并通过浏览器连接webshell。 根据源码提示进行文件上传: 可以看到是白名单判断,但是$img_path直接对上传的文件名拼接,使用$_GET传参,我们可以利用%00截断进行绕过。 注:%00截断的条件:
桌面写一个test.jpg文件: Windows中修改PHP配置文件php.ini: ?保存后重启phpStudy。 上传test.jpg并使用burpsuite抓包,save_path改为../upload/test.php%00: 连接webshell: 任务描述:0x00截断绕过,利用burpsuite的hex功能将save_path改成../upload/test.php[二进制00]形式,上传恶意文件并通过菜刀浏览器连接webshell。 通过源码提示进行文件上传: ?和之前不同的是,'save_path'是通过post传进来的,需要在二进制文件中进行修改,因为post不会像get那样对%00进行自动解码。 上传test.jpg并使用burpsuite抓包,利用burpsuite的hex功能将save_path改成../upload/test.php[二进制00]形式: ?在../upload/后添加test.php (.php后面加空格),filename不用修改,然后点击‘Hex’: 0x0a是十六进制表示方法,表示ASCII码为/n的换行字符,具体为换行至下一行行首起始位置;而0x0d表示ASCII码为/r的回车字符,回车的作用只是移动光标至该行的起始位置。 ?最终上传的是test.php文件。使用菜刀连接webshell: 任务描述:本关考察CVE-2015-2348,move_uploaded_file() 00截断,上传webshell同时自定义保存名称,上传成功后用菜刀连接 发现move_uploaded_file()函数中的$img_path是由post参数save_name控制的,可以在save_name中利用00截断进行绕过。 保存名称修改为‘test.php+空格.1.jpg’,点击‘上传’; ?在‘Hex’中将20(表示php后的那个空格)改为00,然后点击‘go’查看响应内容: ?最终上传的是test.php文件。 ?通过菜刀连接webshell: 菜刀连接webshell成功。 绕过黑名单检查实现文件上传任务描述:后缀大小写绕过实现文件上传。 通过源码提示进行文件上传: ?可以看出此处对后缀名为. php等的文件做了限制,但是没有将后缀进行大小写统一,我们可以通过大小写绕过上传恶意文件。 在桌面写一个简单的一句话木马eval.php: 上传eval.php并用burpsuite抓包,将文件后缀改为.phP,点击‘go’之后在Response处查看响应内容: 可以看到文件已经成功上传,但是文件名已经变成了202204020052033933.phP。一些网站会对上传的文件进行文件名随机修改,以防攻击者通过原文件连接webshell,如果不通过burpsuite抓包检测很难发现这一点。 Firefox浏览器访问脚本http://10.1.1.100/upload-labs/upload/201904101753558013.phP,并开启post data: 任务描述:空格绕过实现文件上传。 通过源码提示进行文件上传: 发现还是黑名单检测,但是没有对后缀名进行去空处理,可以通过在后缀名后加空进行绕过。 还是上传之前的PHP一句话木马eval.php并用burpsuite抓包,将文件后缀改为.php+空格: 利用菜刀进行webshell连接: 任务描述:利用Windows系统的文件名特性,通过点绕过实现文件上传。 通过查看源码可以发现没有对后缀名进行去‘.’处理,利用Windows系统的文件名特性,会自动去掉后缀名最后的‘.’,通过在文件名后加‘.’进行绕过。 上传eval.php并用burpsuite抓包,将文件名改为‘eval.php.’: 虽然在burpsuite里看到的是.php.文件,但是在Windows里保存的会是.php文件 通过菜刀连接: 任务描述:利用Windows特性,通过::$DATA绕过实现文件上传。 通过源码提示进行文件上传: 发现没有对后缀名进行去‘::$DATA’处理,利用Windows下NTFS文件系统的一个特性,即NTFS文件系统存储数据流的一个属性$DATA,当我们访问aa.asp::$DATA时,就是请求aa.asp本身的数据。可以在后缀名后加‘::$DATA’,绕过对黑名单的检测。 上传eval.php并使用burpsuite抓包,修改后缀名为.php::$DATA,点击‘go’之后查看响应内容: ?成功上传文件到upload文件夹下。 Windows文件流特性绕过,上传成功后实际保存的文件名是202204020245414181.php 使用菜刀连接webshell: 任务描述:配合解析漏洞,构造‘点+空格+点’的形式实现文件上传。 ? 还是黑名单过滤,注意第15行和之前不太一样,路径拼接的是处理后的文件名,直接上传.php、.php+点、.php+空都会被当成黑名单过滤掉,因为源代码做了删除文件名末尾的点和首尾去空处理。可以配合解析漏洞,构造‘点+空格+点’的形式,绕过黑名单的检测上传恶意文件。 上传eval.php并使用burpsuite抓包,修改后缀名为.php. .(点+空格+点): 成功上传文件至upload文件夹,而Windows系统存在文件名特性,最终保存的文件名为eval.php。 通过菜刀连接webshell: 任务描述:双后缀名绕过实现文件上传。 通过源码提示进行文件上传: 依然是黑名单限制,注意到这里将问题后缀名替换为空,我们可以利用双写绕过,进行恶意文件的上传。 上传eval.php并使用burpsuite抓包,修改后缀名为pphphp,点击‘go’之后查看文件是否上传成功: ?通过菜刀连接webshell: |
|
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:33:07- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |