我的编程空间,编程开发者的网络收藏夹
学习永远不晚

深入浅出带你了解文件上传白名单绕过

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

深入浅出带你了解文件上传白名单绕过

引文

之前文章给大家带来了文件上传的基础内容,今天我给大家带来文件上传漏洞的进阶知识,白名单绕过的总结文章,接下来会详细的带大家解说白名单绕过的一些小套路。

文件包含

文件包含想必大家都已经学过了,所谓包含就是包含可以代码执行的文件,利用包含函数会解析代码的特性去进行命令执行。

文件包含图片马

所谓的图片马,就是在图片中插入一句话木马来达到绕过检测后缀文件WAF的目的。通常图片马都是配合文件包含去用的。图片马制作命令:

copy1.jpg/b+1.php/a2.jpg 

来一个例子展示一下:

我们写一个phpinfo命令执行图片马去查看PHP版本信息,我们上传图片马了之后去访问:

成功包含了图片马。

文件包含日志

有时候网站日志网站会记录我们的请求,我们这时候可以想到一个套路,通过构造恶意请求然后去包含日志。日志文件路径举例:

 /proc/self/environ /var/log/auth.log /var/log/apache2/access.log 

具体运用方法和上面类似,这里就不演示了。

包含SESSION

PHP中的session.upload_progress功能作为跳板,从而进行文件包含

在php.ini有以下几个默认选项

enabled=on表示upload_progress功能开始,也意味着当浏览器向服务器上传一个文件时,php将会把此次文件上传的详细信息(如上传时间、上传进度等)存储在session当中 ;

cleanup=on表示当文件上传结束后,php将会立即清空对应session文件中的内容,这个选项非常重要;

name当它出现在表单中,php将会报告上传进度,最大的好处是,它的值可控2;

prefix+name将表示为session中的键名

  

可以发现,存在一个文件包含漏洞,但是找不到一个可以包含的恶意文件。其实,我们可以利用session.upload_progress将恶意语句写入session文件,从而包含session文件。前提需要知道session文件的存放位置。

利用条件

存在文件包含漏洞

知道session文件存放路径,可以尝试默认路径

具有读取和写入session文件的权限

以POST的形式发包,传的文件随意

抓包,这里我们添加一个 Cookie :PHPSESSID=flag ,PHP将会在服务器上创建一个文件:/tmp/sess_flag” (这里我们猜测session文件默认存储位置为/tmp),并在PHP_SESSION_UPLOAD_PROGRESS下添加一句话木马,修改如下:

00截断

之前应该也讲过这个知识点,可以00截断原理是因为白名单判断的时候是判断后缀,在进行路径拼接的时候用的其他值,然后在进行move_uploaded_file的时候,这个函数读取到hex值为00的字符,认为读取结束,出现00截断。

Get00截断

get 方式传输可以使用 00 截断,我们拿靶机举一个例子,先上传一个shell文件,抓包,添加00截断:

然后尝试上传成功,下一步就是用菜刀去连接我们的shell。

Post00截断

当是POST接收情况的时候,正确的用法应该是我们需要对 %00 做一个URL编码,也就是URL-decode,与GET不同的点是在 POST 中 %00 不会被 url 解码,所以只能通过 burpsuite 修改 hex 值为 00截断。

具体做法就是抓包,在hex处修改。

解析漏洞

文件解析漏洞,是指Web容器(Apache、Nginx等)在解析文件时将文件解析成脚本文件格式并得以执行而产生的漏洞。攻击者可以利用该漏洞实现非法文件的解析。

这里就举几个常见的例子:

Nginx PHP CGI解析漏洞

因为Nginx的特性,当我们访问phpinfo.jpg/1.php 如果PHP中开启了fix_pathinfo这个选项,PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了,只要URL中路径名以.php结尾,直接交给php处理 。

应用范围:phpstudy <= 8.1.0.7 phpstudy 存在 nginx php cgi 解析漏洞

payload举例:

/x.jpg/shell.php/x.jpg/.php/x.jpg%00.php/x.jpg/%20\shell.php 

IIS 5.0 和 6.0 解析漏洞

文件解析

xx.asp;.jpg 

服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件。

.user.ini

如果你目录下有.user.ini会先去识别里面的配置,但是只有 PHP_INI_PERDIR 和 PHP_INI_USER 模式可以找到这两个auto_append_file和auto_prepend_file,作用: 一个相当于在每个php文件尾加上include(“xxxx”) 一个相当于文件头加上 include(“xxx”) 其中xxx就是 auto_append_file的值。因为.user.ini只对他同一目录下的文件起作用,也就是说,只有他同目录下有php文件才可以。

auto_prepend_file =  //包含在文件头auto_append_file = //包含在文件尾 

.htaccess

与上面php.ini解析文件漏洞相似,这里之前讲过就不具体说了,举一个文件构造代码的例子:

setHandler application/x-httpd-php #在当前目录下,所有文件都会被解析成php代码执行 

当然我们也可以设置成精准匹配:

setHandler application/x-httpd-php #在当前目录下,如果匹配到xino.jpg文件,则被解析成PHP代码执行 

结语

今天比较详细的讲了文件上传白名单绕过原理以及应用方法,可能刚开始学不太好理解。有兴趣的小伙伴可以自己去搭建靶机来进行测试,喜欢的小伙伴不妨一键三连。

学习计划安排


我一共划分了六个阶段,但并不是说你得学完全部才能上手工作,对于一些初级岗位,学到第三四个阶段就足矣~

这里我整合并且整理成了一份【282G】的网络安全从零基础入门到进阶资料包,需要的小伙伴可以扫描下方CSDN官方合作二维码免费领取哦,无偿分享!!!

①网络安全学习路线
②上百份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥HW护网行动经验总结
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析

来源地址:https://blog.csdn.net/Candour_0/article/details/128995457

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

深入浅出带你了解文件上传白名单绕过

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录