实验步骤一
任务描述:通过修改MIME类型,使其符合$_FILES[‘upload_file’][‘type’]的白名单,达到上传恶意文件的目的。
- 在桌面写一个简单的一句话木马eval.php:
 2. 在实验机内打开浏览器访问http://10.1.1.100/upload-labs/index.php,查看源码可以发现是白名单判断,只允许上传$_FILES[‘upload_file’][‘type’]为’image/jpeg’、'image/png’及’image/gif’的文件。 3. 上传eval.php并用burpsuite抓包:  此时的MIME类型为application/octet-stream
- 修改Content-Type为image/gif,点击‘go’之后在Response处查看响应内容:

实验步骤二
任务描述:
i
m
g
p
a
t
h
直
接
拼
接
,
利
用
可
以
看
到
是
白
名
单
判
断
,
但
是
img_path直接拼接,利用%00截断进行绕过,上传恶意文件并通过浏览器连接webshell。 可以看到是白名单判断,但是
imgp?ath直接拼接,利用可以看到是白名单判断,但是img_path直接对上传的文件名拼接,使用$_GET传参,我们可以利用%00截断进行绕过。
注:%00截断的条件:
1)PHP版本小于5.3.4; 2)打开PHP的配置文件php-ini,将magic_quotes_gpc设置为Off。 2. 桌面写一个test.jpg文件: 3. Windows中修改PHP配置文件php.ini: 保存后重启phpStudy。
- 上传test.jpg并使用burpsuite抓包,save_path改为…/upload/test.php%00:
 - 点击‘go’之后查看响应内容,最后保存下来的文件会是test.php:

实验步骤三
任务描述:0x00截断绕过,利用burpsuite的hex功能将save_path改成…/upload/test.php[二进制00]形式,上传恶意文件并通过菜刀浏览器连接webshell。
- 通过源码提示进行文件上传:
 'save_path’是通过post传进来的,需要在二进制文件中进行修改,因为post不会像get那样对%00进行自动解码。 - 上传test.jpg并使用burpsuite抓包,利用burpsuite的hex功能将save_path改成…/upload/test.php[二进制00]形式:
 在…/upload/后添加test.php (.php后面加空格),filename不用修改,然后点击‘Hex’: 0x0a是十六进制表示方法,表示ASCII码为/n的换行字符,具体为换行至下一行行首起始位置;而0x0d表示ASCII码为/r的回车字符,回车的作用只是移动光标至该行的起始位置。 - 将0d前面的20改为00,然后点击‘go’查看响应内容:

实验步骤四
任务描述:本关考察CVE-2015-2348,move_uploaded_file() 00截断,上传webshell同时自定义保存名称,上传成功后用菜刀连接。
-
点击右上方‘显示源码’,根据源码提示进行文件上传:  发现move_uploaded_file()函数中的$img_path是由post参数save_name控制的,可以在save_name中利用00截断进行绕过。 -
上传test.jpg并使用burpsuite抓包: 保存名称修改为‘test.php+空格.1.jpg’,点击‘上传’; -
在‘Hex’中将20(表示php后的那个空格)改为00,然后点击‘go’查看响应内容:  最终上传的是test.php文件。 -
通过菜刀连接webshell:
|