day31WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性

目录

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(方便演示)

关于哥斯拉的使用和安装请参考这篇文章:哥斯拉安装和使用

day31WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性_第1张图片

上传png文件成功,上传hm.php文件失败

day31WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性_第2张图片

day31WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性_第3张图片

F12修改前端代码

day31WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性_第4张图片

day31WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性_第5张图片

复制php文件路径(http://localhost/upload-labs/upload/hm.php ),用哥斯拉尝试连接

day31WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性_第6张图片 day31WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性_第7张图片

2.JS验证+MIME 

upload-labs靶场第二关

这里直接F12修改后是没有用的

day31WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性_第8张图片

通过抓包发现上传png文件时和上传php文件时,Content-Type的值不一样

day31WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性_第9张图片 day31WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性_第10张图片

现在我们将上传php文件时的Content-Type值修改为image/png,我们发现上传成功

day31WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性_第11张图片 day31WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性_第12张图片

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_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,然后将这两个文件上传

day31WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性_第13张图片

现在我们尝试一下用readme.php连接哥斯拉

day31WEB攻防-通用漏洞&文件上传&js验证&mime&user.ini&语言特性_第14张图片测试连接成功 

4.JS验证+.user.ini+短标签 (ctfshow154,155关)

user.ini:auto_prepend_file=text.png
text.png:

后台对文件后缀以及短标签

这里有几种替换短标签

1.  //前提是开启配置参数short_open_tags=on

2.    //不需要开启参数设置

将替换成

3.<% echo '123';%>  //前提是开启了配置参数asp_tags=on

4. //不用修改参数开关

5.JS验证+.user.ini+短标签+过滤 [ ]

过滤[],用{}替代(ctfshow156关)

user.ini:auto_prepend_file=hm.png
hm.png:

过滤了后门语句的分号;和php(ctfshow157关)

zm.png:<?=system('tac ../fl*')?>    

过滤了;,php,() (ctfshow158,159关)

zm.png:

基本都过滤了(ctfshow160关)

包含默认日志,日志记录UA头,UA头写后门代码

user.ini:auto_prepend_file=zm.png
zm.png:

6.JS验证+.user.ini+短标签+加过滤+文件头

文件头部检测是否为图片格式文件(ctfshow161关)

user.ini:GIF89A auto_prepend_file=zm.png
zm.png:GIF89A 

你可能感兴趣的:(小迪安全-2022年,前端)