文件上传upload-labs
文件上传upload-labs
相关函数
- move_upload_file(file,newloc)、
file:要移动的文件
newloc:规定文件的位置
将上传的文件移动到新位置
通过HTTP POST 上传文件
如果目标文件已存在,则会被覆盖
- unlike(file)
删除文件
- in_array(search,array)
search:规定在数组中搜索的值
array:数组
搜索数组中是否存在指定的值
- pathinfo
以数组形式返回文件路径信息,可以提取后缀,但存在绕过风险
explode()
- 将字符串打散成数组
reset(array)
- 返回数组中第一个元素并输出
empty()
- 检查变量是否为空
count(array)
- 返回数组中元素的数目
Pass-01(前端JS绕过/客户端校验绕过)
Tips:
查看网页源代码是否有限制的js代码,点击上传后直接弹框提示,但是没有发送数据包,即用了客户端认证方法
方法:
删掉前端jscheck函数
开启火狐插件过滤前端上传
bp修改文件后缀上传
Pass-02(MIME绕过)
bp抓包修改MIME类型
- 源码分析
服务器对文件的扩展进行了判断
Pass-03(黑名单绕过)
查看源码黑名单
服务器需对绕过的文件进行解析,其apache配置文件httpd.conf中有如下配置(这里为了演示手动添加!)
重启服务
修改后缀phtml上传成功
Pass-04(黑名单绕过 .htaccess攻击)
黑名单限制大部分后缀文件
由于上传的文件名未经过处理,这里使用.htaccess文件攻击
Tips:
.htaccess:apache服务器配置文件,负责相关网页针对目录下的配置,即在一个特定目录下放置一个包含指令的文件,其中的指令作用于此目录及其所有子目录。
先上传.htaccess文件
SetHandler application/x-httpd-php
在上传木马bp修改后缀名png上传成功解析
Pass-05(黑名单绕过 大小写文件名混淆)
与上一关相比,将.htaccess添加到黑名单里,并且没有大小写转换
抓包修改成大写
Pass-06(黑名单绕过 后缀双写逻辑绕过)
较上关多了转换小写
利用双写点与空格绕过
Pass-07(黑名单绕过 填点绕过)
源码
抓包
Tips:
利用windows下文件后添加的.会自动忽略
Pass-08(黑名单绕过 Win文件流特性绕过)
看源码
Tips:
采用windows流特性绕过,在这里意思是php运行在windows上+"::DATA"会把::DATA之后的数据当作文件流处理,不会检测后缀名,且保持"::$DATA"之前的文件名,目的即使不检查后缀名
上传php文件,修改文件后缀添加::$DATA
Pass-09(黑名单绕过 点空格点代码逻辑绕过)
看代码,黑名单严格,删除文件名末尾点,大小写转换,去除字符串,首尾去空
绕过方法:
Tips:
代码逻辑绕过(这里代码逻辑先删除文件名末尾点,再首尾去空都只进行一次,因此可构造点空格绕过,利用windows特性)
抓包修改
Tips:
目标服务器是windows皆可用此方法绕过
Pass-10(黑名单绕过 双写绕过)
上传,正常,文件被切掉后缀
查看源码
绕过方法:
str_ireplace()函数不区分大小写,因此不适用大小写,使用双写文件名绕过
Pass-11(白名单绕过 00截断GET型绕过)
看源码
构造文件存储路径使用get传入,导致服务器最终存储文件名可控
绕过方法:使用00截断绕过
条件:
php版本<5.3.4
php.ini的magic_quotes_gpc为OFF
所以我们要设置下小皮
php扩展及设置---参数开关设置---把magic_quotes_gpc关闭
版本切换成5.3.29
Pass-12(白名单绕过 00截断POST型绕过)
post差别是post不会自行解码,我们需要对%00编码,
Pass-13(图片马+文件包含绕过)
制作图片马
test.php内容
<?php @eval($_POST[1]); phpinfo();?>
不在桌面cmd使用copy都不会报错
使用010查看