0%

文件上传题总结

前端检验

这是最简单的绕过方式,该方式只在前端检验文件后缀是否为php,若是则退回,不是则上传。

绕过方式很简单,将php格式的一句话木马后缀改为png,然后上传抓包,修改文件后缀为php即可。

后端检验文件格式

这种检验方式同样可以用上传图片,抓包改后缀的方式绕过,也是比较基础的

后端检验文件格式和后缀

这次再上传图片改后缀就不行了,这里就有必要解释一下.htaccess文件和.user.ini文件了。

这类题的思路就是上传局部配置文件,

.htaccess : 使得phtml等文件能够被当作解析,从而执行php木马

.user.ini : 使得原本的php文件包含上传的php文件得内容,从而执行恶意代码

注意:有时候还会过滤php,可以尝试用大写绕过

.htaccess

httpd-conf 是 Apache 的系统配置文件,一个全局的配置文件,对整个 web 服务起作用;而.htaccess 也是 Apache 的配置文件,不过相当于一个局部配置文件,只对该文件所在目录下的文件起作用。

Apache配置文件
httpd-conf 全局配置文件
.htaccess 局部配置文件

实例

在绕过文件上传的限制中,通常在 Apache 全局配置文件 httpd.conf 中有这样一条配置:

AddType application/x-httpd-php .php .phtml

这条配置的意思就是将.php、.phtml 文件后缀的文件当做 php 文件执行,如果开启了这条配置,就可以上传.phtml 文件在执行 php 代码,这也就是为什么在文件上传时可以尝试上传.phtml,不过在高版本中这条配置默认是关闭的,也就是只能解析.php 文件后缀。

或者这条配置:

SetHandler application/x-httpd-php

将所有文件都解析为 php 文件。

通常全局文件我们都是不可更改的,而 Apache 还有一个局部配置文件.htaccess,这个配置文件只对该目录所在的 web 目录起作用,例如:我们在 www 目录下有一个.htaccess 配置文件,配置内容为

AddType application/x-httpd-php .jpg

将 jpg 文件当做 PHP 文件解析。这样就可以直接解析 jpg 后缀的 webshell。

1
2
3
4
5
// .htaccess文件中的内容
AddType application/x-httpd-php .jpg

// 1.jpg文件中的内容
<?php phpinfo();?>

这时访问 1.jpg,1.jpg会被当做 PHP 解析

局限

.htaccess配置文件只会在Apache服务器种起作用

.user.ini

php.ini 是 php 的一个全局配置文件,对整个 web 服务起作用;而**.user.ini 和.htaccess 一样是目录的配置文件,.user.ini 就是用户自定义的一个 php.ini,通常用这个文件来构造后门和隐藏后门。**

php配置文件
php.ini 全局配置文件
.user.ini 局部配置文件

实例

php 配置项中有两个配置可以起到一些作用

1
2
auto_prepend_file = <filename>         //包含在文件头
auto_append_file = <filename> //包含在文件尾

这两个配置项的作用相当于一个文件包含,比如

1
2
3
4
5
6
7
// .user.ini中的内容
auto_prepend_file = 1.jpg //包含1.jpg文件

// 1.jpg中的内容
<?php phpinfo();?>

// 该目录下存在任意.php文件(这里以11.php为例)

也就是在一个目录下有.user.ini 这个配置文件,配置内容为上,有 1.jpg,同时该目录下还需要有.php 后缀的文件,auto_prepend_file = 1.jpg 这个配置的意思就是在当前目录下的.php 文件包含 1.jpg 这个图片,在此处相当于在 11.php 文件头插入了 require('1.jpg') 这条语句,也就是说相当于文件包含
另一条配置包含在文件尾,如果遇到了 exit 语句的话就会失效。

.user.ini 使用范围很广,不仅限于 Apache 服务器,同样适用于 Nginx 服务器,只要服务器启用了 fastcgi 模式 (通常非线程安全模式使用的就是 fastcgi 模式)。

局限

在.user.ini 中使用这条配置的使用也说了是在同目录下的其他.php 文件中包含配置中所指定的文件,也就是说需要该目录下存在.php 文件,通常在文件上传中,一般是专门有一个目录用来存在图片,可能小概率会存在.php 文件

短标签的应用

有时候,我们遇到有php文件且能上传.user.ini的题目时,但是php却被严格过滤(大小写都不行),这时候我们就要考虑到短标签,也就是在.user.ini文件中添加

short_open_tag = On,然后其余和上一种方法相同即可,这样我们的木马就可以不包含php。从而可以执行恶意代码

短标签的四种风格

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
echo1111111111111 <br>”;
?>

<?
echo222222222222 <br>”;
?>


<%
echo333333333333 <br>”;
%>


(注释:这种写法在php配置中默认关闭了的,所以不能输出一行3.如果要正常输出,需要配置php.ini文件。在配置文件中找到asp_tags=off ,将off改为on。改动配置文件后需要重启apache。)

<script language=”php”>
echo444444444444 <br>”
</script>

几种常见的后端过滤

  1. 过滤小写,可用大写绕过
  2. 过滤php的大小写,可用短标签绕过
  3. 过滤[ ],可用{ }绕过
  4. 过滤php,可以尝试php3、phtml等