upload-labs(11~12)通关笔记
环境准备
1、php版本 < 5.3.4
2、magic_quotes_gpc = Off
php我用的是upload-labs官方推荐的5.2.17,搭建平台用的是phpStudy2018。
修改magic_quotes_gpc
magic_quotes_gpc的作用是对get请求、post请求、cookie...传入的数据进行转义处理,它只存在于php5.3.4版本及以下版本,比如当我们传入url编码%00
时,%00
就会被转义成0
,也就是说当magic_quotes_gpc为On的状态下,url编码是不会被解析的,而我们又恰恰需要url编码被解析,所以我们得把magic_quotes_gpc的状态改为Off。
到php的根目录找到php.ini文件, 接着打开并修改为Off
第11关
过关步骤
查看前端源码
F12直接定位到form表单处,我发现post请求里面携带了一个url参数,疑似是文件的上传路径
废话少说,咱先测试一下,随便输入个参数进去,看看能不能提交成功,如果提交成功则说明这个参数是可控的,即<文件上传路径可控>,反之,就是不可控。
可以看到,刚刚的图片文件已经上传成功了,如图
查看后端源码
什么是%00截断?
在url中%00
表示ascii
码中的0
,而0
作为特殊字符保留,表示字符结束,也就是说,在保存文件的时候,如果路径参数(例: $img_path
)中出现了%00
,就会认为路径到这里就已经结束了,从而忽略后面一系列的参数,比如$img_path = ../upload/test.php%00/test.jpg
,此时,路径参数的后半部分就会被%00
给截断,从而变成$img_path = ../upload/test.php
使用%00截断有两个要求:
1、php的版本 < 5.3.4
2、php.ini中的magic_quotes_gpc的状态为Off
补充:在保存文件的时候,如果路径结尾的文件名称和实际要保存的文件名称重名了的话,那么则会以路径结尾的文件名称为准。
例:../upload/test.php # 保存路径
test.jpg # 文件名
实际保存以后的文件名:test.php
抓包拦截
查看结果
可以看到,图片已经上传成功了
第12关
通关方法和第11关差不多,只不过传递save_path参数的方式变成了POST,接收参数的方式也变成了POST
后端接收参数的方式变为了POST
这里提一点,因为第12关传递参数的方式为POST,POST是不会自动解码的,所以我们需要手动decode一下。
查看结果
【认真做好当下的每一件事情,加油,奥利给!】
标签:11,00,12,magic,upload,gpc,quotes,php From: https://www.cnblogs.com/guoxian/p/16976259.html