文件上传知识

文件上传漏洞原理

一句话木马

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

POST用来接收前端的post的请求里面的一个变量值

eval作用把一串字符串作为php的代码去执行,允许执行任意代码

@符号的意思是不报错,即使执行错误,也不报错。

system函数,用来执行操作系统命令

wuya为密码

文件上传漏洞是指用户上传了一个可执行的脚本文件,而且通过这个脚本文件获得了执行服务器端命令的能力。

文件上传前提:

(1)网站上传功能能正常使用  (2)文件类型允许上传  (3)上传路径可以确定   (4)文件可以被访问,可以被执行或者被包含

黑客会上传什么?

后门文件简介

WebShell:网站后门

WebShell就是以asp,php,jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其成为一种网页后门。黑客在入侵了一个网站后,通常会将asp或者php后门文件与网站服务器WEB目录下正常的网页文件混在一起,以达到控制网站服务亲的目的。

了解后门文件WebShell

WebShell分为大马,小马,一句话木马。

大马:体积小,功能全,会调用系统的关键函数,以代码加密进行隐藏

小马:体积小,功能少,只有一个上传功能

一句话木马:代码短,只有一行代码,使用场景大,可单独生成可插入文件,安全性高,隐匿性强,可变形免杀,框架不便,数据执行

了解后门文件 PHP一句话木马

<?php eval($_GET['pass'];?>

防御

uniqid 更改文件名

文件上传绕过

(1)本地限制

(2)突破上传:修改MIME类型检测;修改目录路径检测;修改文件扩展名检测;修改文件内容检测;

(3)服务端防御:服务MIME类型检测;服务端目录路径检测;服务端文件扩展名检测;服务端文件内容检测;

绕过客户端的检测:

原理:通常在上传页面里含有专门检测文件上传的JavaScript代码,最常见的就是检测文件类型和扩展名是否合法

方法:在本地浏览器客户端禁用JS即可

测试题:upload-labs/Pass-01

绕过服务端检测:

服务端的代码通常检测三个点:MIME类型,文件后缀(分为黑名单和白名单),文件内容(文件幻数,文件相关信息,图片渲染,二次渲染)

常见MIME类型:

超文本标记语言。html文件:text/html

普通文本.txt文件:text/plain

PDF文档.pdf:application/pdf

Microsoft.word文档:application/msword

PNG图像.png:image/png

GIF图像.gif:image/gif

MPEG文件.mpg:video/mpeg

AVI文件.avi:video/x-msvideo

绕过文件后缀检查-黑名单

文件扩展名在黑名单中为不合法,一般有个专门的黑名单列表,里面会包含常见的危险脚本文件。

1.后缀大小写绕过:(.Php)

2.空格绕过:(.php )

3.点绕过:(.php.)

4.::$DATA绕过:

如果黑名单没有对后缀名进行去::$DATA处理,可以在后缀名加上::$DATA,绕过黑名单

5.配合Apache漏洞(现在基本没有了)

Apache解析有一个特点,解析文件时是从右往左判断,如果为不可识别解析再往左判断,例如aa.php.owf.rar文件,Apache不可以识别解析‘.owf’和‘.rar’这两种后缀,会解析成.php文件

6.  .htaccess文件

配合名单列表绕过,上传一个自定义的.htaccess,就可以轻松绕过各种检测(可以自己规定文件解析成什么样子)

.htaccess文件(或者 分布式配置文件),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法,即,在一个特定的文档目录中一个包含一个会多个指令的文件,以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。

SetHandler application/x-httpd-php //所有的文件当做php文件来解析

AddType application/x-httpd-php .png //.png文件当作php文件解析

7.通过上传特殊文件名来绕过黑名单检测。

如php,php2,php3,php5,phtml,asp,aspx,ascx,ashx,cer,jsp,jspx这些特殊文件名能否被解析,关键查看apache的conf/httpd.conf文件,如果包含AddType application/x-httpd-php.php.phtml.phps.php5.pht等,则这些特殊文件可以被解析。

绕过文件后缀检测-白名单(基本无解,目前最安全)

白名单策略:文件扩展名不在白名单中为不合法

绕过方法:

服务端判断文件类型是从后往前解析,而对文件解析是从前往后解析,可以利用00截断的方式进行绕过,包括%00截断与0x00截断。(00截断的一个条件是PHP必须小于5.3)

绕过文件内容检测:

主要通过两种方法来判断上传文件内容是否合法:

1.通过检测上传文件内容开始处的文件幻数来判断。

通常情况下,通过判断前10个字节,基本就能判断出一个文件的真实类型

2.文件加载检测

一般是调用API或者函数对文件进行加载测试。常见的是图像渲染测试,在严格点的是进行二次渲染。

绕过文件内容检测-文件幻数检测

常见图片类型的文件幻数如下:

1.要绕过jpg文件幻数检测就要在其文件十六进制开头写上下面的值:

Value=FF D8 FF E0 00 10 4A 46 49 46

2.要绕过gif文件幻数检测就要在其文件十六进制开头写上下面的值:

Value=47 49 46 38 39 61

3.要绕过png文件幻数检测就要在开头写下下面的值:

Value=89 50 4E 47

然后在文件幻数后面加上自己的一句话木马代码就行了

绕过文件内容检测-文件加载检测

一般是调用API或者函数对文件进行加载测试。常见的是图像渲染测试,在严格点的是进行二次渲染。

对渲染/加载测试的攻击方式是:代码注入绕过

对二次渲染的攻击方式是:攻击文件加载器自身

1.对渲染/加载测试攻击 - 代码注入绕过

可以用图像处理软件对一张图片进行代码注入

这类攻击的原理是:在不破坏文件本身的渲染情况下找一个空白区进行填充代码,一般是图片的注释区,这样能保证本身文件结构是完整的,对于渲染测试基本上都能绕过。

2.二次渲染的攻击方式 - 攻击文件加载器自身

这种情况下无法用代码注入绕过,二次渲染相当于把原本属于图片数据的部分抓出来,再用自己的API或者函数进行重新渲染,而非图像数据部分直接被隔离开了。

我们可以用溢出攻击对文件加载器进行攻击,上传自己的恶意文件后,服务器上的文件加载器会主动进行加载测试,加载测试时被溢出攻击执行shellcode。

(另外方法:1.用一张大的gif图片找到一个空白的地方写shell然后绕过;2.复制下面这段

#define test_width 16

#define test_height 7

<?php echo 'it worke';?>

static char test_bite[ ]={

0x13, 0x00, 0x93, 0xcd, 0x55, 0xa5, 0x93, 0xc5, 0x00, 0x80, 0x00, 0x60};) 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值