您当前的位置: 首页 > 

葫芦娃42

暂无认证

  • 3浏览

    0关注

    75博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

文件上传漏洞学习

葫芦娃42 发布时间:2022-04-20 22:22:04 ,浏览量:3

概述

漏洞产生原因:服务端代码未对客户端上传的文件进行严格的验证和过滤,就容易造成可以上传任意文件的情况。

文件上传绕过

(1)js检测绕过

1.删除js中检测文件的代码;

2.上传的文件改为允许的后缀绕过js检测后再抓包,把后缀名改为可执行的文件。

(2)文件后缀名绕过

1.绕过服务器限制上传文件的后缀

2.有些Apache是允许解析其他文件后缀名,例如httpd.conf中配置以下代码:

AddType application/x-httpd-php .php .phtml

3.Apache解析文件的顺序是从右到左的,遇见不认识的后缀会继续像左判断。

(3)文件类型绕过

可以上传一个符合的文件,然后burp抓包,再更改后缀。这样Content-Type是符合的。

或者抓包,直接更改Content-Type绕过。

(4)截断

%00截断。只有在数据包中含有文件上传目录时才能利用。

        NULL字符截断是最有名的截断漏洞之一,其原理是,PHP内核是由c语言实现的,因此使用了c语言中的一些字符串处理函数,在遇到NULL(\x00)字符时,处理函数就会将它当作结束标记。这个漏洞能够帮助我们去掉变量结尾不想要的字符。例如:

       正常逻辑的话,这段代码并不能直接包含任意文件。但是在NULL字符的帮助下,我们只需要提交:

        ?file= . . / . . / . . /etc/passwd%00

        即可读取到passwd文件,与之类似的是利用路径长度绕过。例如:

        ?file= . . / . . / / / / / /{*N}/etc/passwd

        系统在处理过长的路径的时候会选择主动截断它。不过这两个漏洞随着PHP版本的更新主见消逝了。真正用到的情况越来越少。

        另一个造成截断的情况是 不正确的使用iconv函数:

        在遇到file变量中包含非法UTF-8字符时,iconv函数就会截断这个字符串。

        所以在这个情况,我们只需提交 ?file = shell.jpg%ff   即可,因为在utf-8字符集中,单个“\x80-\xff" 都是非法的。 这个漏洞Windows系统存在,在新版的PHP中也得到修复。

::$DATA绕过

必须是Windows系统,必须是php环境,必须是那个源文件

原理:php在windows系统的时候如果文件名+“::$DATA”会把该词之后的数据当成文件流处理不会检测文件后缀名

例如: shell.php --  shell.php::$DATA

%00截断GET用法:

%00截断:php5.3版本以下GET提交不需要解码,直接在get文件目录处截断

%00截断POST用法

当是POST接收情况的时候,正确的用法应该是我们需要对 %00 做一个URL解码

[ACTF2020 新生赛]Upload

上传一个一句话木马php文件,发现被过滤。

 所以更改其后缀为.jpg上传,更改filename后缀为.php 。

 看见 nonono bad file。 我们再试一试php3,php4,phtml。发现phtml可以。

写入我们的一句话木马,发现存在[] 或者;就没有response。那直接命令执行。

构造

得到flag。

` `命令执行符,作用相当于shell_exec().

关注
打赏
1658420143
查看更多评论
立即登录/注册

微信扫码登录

0.0862s