CTFHb-文件上传解析
做了一下REC,那我们来整一下文件上传漏洞,一点一点来吧
1.无验证
首先我们先开一下靶场
无限制,这就说明上传什么文件都是可以的并没有什么限制,那我们就可以上传一个一句话木马,然后使用蚁剑来连接一下。
成功上传
蚁剑连接成功,从中可以找到flag
2.前端验证
现在是前端验证,这次上传php文件就不成功了,不允许的文件,我们查看源代码可以知道只有jpg文件等是被允许上传的
那我们就需要bp来抓一下包,先来上传一个jpg文件
然后我们需要将filename处的.jpg改成php,再运行
这样就上传成功了,那我们放开一下,
确实是上传成功,那我们再用蚁剑连接一下找到flag
3.MIME绕过
我们先来说一下什么是MIME
MIME:客户端软件,区分不同种类的数据,例如web浏览器就是通过MIME类型来判断文件是GIF图片,还是可打印的PostScript文件。web服务器使用MIME来说明发送数据的种类, web客户端使用MIME来说明希望接收到的数据种类。
MIME检测原理
服务端MIME类型检测是通过检查http包的Content-Type字段中的值来判断上传文件是否合法的。
那好我们上传一个带有一句话木马的jpg文件,然后来抓包一下
然后将Content-Type:改成image/jpeg;文件改成php文件
go一下,上传成功。再用蚁剑连接一下,找到flag
4.00截断
00截断原理
0x00是字符串的结束标识符,攻击者可以利用手动添加字符串标识符的方式来将后面的内容进行截断,而后面的内容又可以帮助我们绕过检测。
用法
这个时候需要我们使用bp抓包,而数据包中必须含有上传后文件的目录情况才可以用,比如数据包中存在path:uploads/,那么攻击都就可以通过修改path值来构造Pyload,比如:uploads/1.php%00
解释
为什么需要修改Path才可以,因为程序中检测的是文件的后缀名,如果后缀合法则拼接路径和文件名,那么攻击者修改了path以后的拼接结果为:uploads/1.php%001.jpg,这样就不会再执行%00后面的数据。
解题
这题是关于00截断,那么我们首先上传.jpg文件,而后抓包。
发现了有关路径,那我们构造Pyload:1.php%00
然后go一下,成功。放开包,运用蚁剑连接一下,便可获得flag
5.双写后缀
原理
黑名单会给出一些不可使用的后缀名。这样就识别不了php文件。
解决
这个时候我们就可以将php文件,进行一写双写绕过改成pphphp(当时不止这一种)这样在进行上传的时候检测的时候他就会绕过使用得上传成功。
解题
我们检查源代码的时候,发现已经禁止好多文件上传了,这个时候我们也是可以使用双写后缀绕过的。
这样就上传成功了,然后再使用蚁剑连接一下便可找到flag
6. .htaccess
解析
这个htaccess是apache服务器中的一个配置文件,它非常有用,能实现很多功能,具体可以去百度了解一下,这里我们只需要知道.htaccess文件能够设置服务器解析文件的格式 比如:设置匹配到1.jpg就用php的格式来解析
使用
我们可以写入代码:
<FilesMatch "1.jpg">//注意要指定你上传的文件名和此文件名相同,这样它才能被当作php文件解析
SetHandler application/x-httpd-php
</FilesMatch>
//创建的htaccess文件,编辑内容为:
SetHandler application/x-httpd-php
然后再上传1.jpg的木马, 这样1.jpg就可解析为php文件
解题
我们依靠前面所了解的,来进行一个实例,
首先我们先上传一个编辑好了的.htaccess文件,然后再上传同名的jpg文件便可成功
这样1.jpg便通过htacess文件便可被 当作php代码解析了。使用蚁剑来连接一下,我们就可以得到flag了
7.文件头检查
说明
文件内容检测是文件头检测,不同的文件不同的文件头,后台根据文件头判断文件类型,如果检测的比较好,攻击就比较困难了
我们经常使用的如下:
PEG (jpg),文件头:FFD8FF
PNG (png),文件头:89504E47
GIF (gif),文件头:47494638
它其实也是文件内容检测的一种,除了文件头检测还有文件相关信息检测和文件加载检测。都是绕过服务端检测
使用
至于它怎么用呢,就是需要我们把文件头改成可以传的文件头,用HXD,把文件头修改一下就可以。具体我们看一下实例,来具体了解一下
解题
首先,我们需要将php一句话木马修改一下,将文件头修改成可上传文件。拿HXD来,
将Png的文件头copy到我们要上传的文件上,修改文件头
然后再使用bp抓包,修改成php文件,
这样就能上传成功,使用蚁剑,就可以得到flag