首页 > 其他分享 >upload-labs(11~12)通关笔记

upload-labs(11~12)通关笔记

时间:2022-12-12 15:57:00浏览次数:37  
标签:11 00 12 magic upload gpc quotes php

upload-labs(11~12)通关笔记

环境准备

1、php版本 < 5.3.4

2、magic_quotes_gpc = Off

php我用的是upload-labs官方推荐的5.2.17,搭建平台用的是phpStudy2018。

image-20221212110335468

修改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

image-20221212132800613

第11关

过关步骤

查看前端源码

F12直接定位到form表单处,我发现post请求里面携带了一个url参数,疑似是文件的上传路径

image-20221212134836177

废话少说,咱先测试一下,随便输入个参数进去,看看能不能提交成功,如果提交成功则说明这个参数是可控的,即<文件上传路径可控>,反之,就是不可控。

image-20221212135435657

可以看到,刚刚的图片文件已经上传成功了,如图

image-20221212135924741

查看后端源码

image-20221212141729232

什么是%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

抓包拦截

image-20221212145802485

image-20221212150037755

查看结果

可以看到,图片已经上传成功了

image-20221212150235188

image-20221212150639549

第12关

通关方法和第11关差不多,只不过传递save_path参数的方式变成了POST,接收参数的方式也变成了POST

后端接收参数的方式变为了POST

image-20221212151216808

这里提一点,因为第12关传递参数的方式为POST,POST是不会自动解码的,所以我们需要手动decode一下。

b4df8975f91a36e732009a9f7cf5184

image-20221212152454943

image-20221212152609075

查看结果

image-20221212152806511

【认真做好当下的每一件事情,加油,奥利给!】

标签:11,00,12,magic,upload,gpc,quotes,php
From: https://www.cnblogs.com/guoxian/p/16976259.html

相关文章