前端检验
这是最简单的绕过方式,该方式只在前端检验文件后缀是否为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 | // .htaccess文件中的内容 |
这时访问 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 | auto_prepend_file = <filename> //包含在文件头 |
这两个配置项的作用相当于一个文件包含,比如
1 | // .user.ini中的内容 |
也就是在一个目录下有.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 |
|
几种常见的后端过滤
- 过滤小写,可用大写绕过
- 过滤php的大小写,可用短标签绕过
- 过滤[ ],可用{ }绕过
- 过滤php,可以尝试php3、phtml等