渗透测试之文件上传绕过

通过是否抓到包来验证是前端验证还是后端验证,前端验证是不发数据包的,而后端验证是会发数据包的,所以可以通过抓包工具进行判断。再通过不同的验证方式,选择绕过方式。

前端验证:通过禁掉js代码,使验证文件格式等代码段失效,从而实现绕过,但是有一定局限性,当上传按钮和js代码绑定时,无法点击上传,从而无法绕过。

这时候可以尝试更改后缀,绕过前端验证,若此时后端没有验证就可以绕过,上传成功后找文件上传路径。

前端验证实例

1、先上传一个php脚本,看是否可以上传

发现报错,进行抓包判断是前端验证还是后端验证

打开抓包工具,进行抓包

没有抓到数据包,说明这里很有可能是前端验证,通过禁掉js进一步确认

后端验证:通过抓包更改后缀的方式进行绕过。先上传一个被允许的后缀抓包,将content-type置空看是否可以正常返回,可以正常返回说明不对content-type有验证,如果发生错误说明对content-type有验证,当对content-type有验证时,上传不合法的文件后缀可以通过修改content-type内容进行绕过。(同理通过控制变量,可能对content-type进行验证,可能对文件内容进行验证,也有可能对文件的后缀名进行验证)通过判断具体的验证方式,选择不同的改包方式。

后端验证中有黑名单和白名单,如何确定他的具体验证方式呢?

可以通过将后缀改成根本不存在的后缀,如:jpgxxxxxxxx,如果成功绕过说明是黑名单,如果不成功说明是白名单验证。

黑名单验证的绕过方式:

1、大小写文件后缀

2、在后缀名后加一个空格进行绕过(抓包后在文件名的后面加上一个空格)

3、在后缀名后加一个点,在windows系统中文件名最后一个字符是点会被丢弃

4、在后缀名后加点空格点  '. .'

5、在后缀名后加上双冒号dollar符data   '::$DATA'

(在php+Windows的情况下如果是文件名+::$DATA之后的数据当成文件流处理不会检测后缀名,且保持:$DATA前的文件名)

先上传一个php脚本

报错文件类型不符合,抓包对文件后缀进行修改

成功绕过上传

6、用特殊后缀进行绕过如:php3、php5、php4、pht、phtml、phps都等于php(运用的前提条件需要修改配置文件使其可以解析对应文件)

7、利用.user.ini绕过

先编写一个配置文件具体内容如下

再将需要执行的脚本放在test.txt中

首先将.user.ini上传至目标服务器

成功上传

再上传test.txt

再访问目录下存在的php文件就可以执行脚本文件了

8、.htaccess配置文件绕过

9、复写绕过 pphphp中间的php置空后剩余的还是php

白名单验证的绕过方式:

1、00截断绕过

截断条件:php版本有固定要求(大于5.6.9的版本漏洞修复了)。php的magic_quotes_gpc为OFF状态。(magic_quotes_gpc会在敏感字符前加反斜杠进行转义)

%00是空格

(get型00截断)

上传成功

对上传位置进行访问

(post型00截断)

save_path在data中

将2b改成00,进行00截断

修改后在php的后面就有一个空格存在

成功绕过后,访问上传文件

2、图片马(文件包含漏洞和文件上传结合)

getimagesize()函数会对目标文件的16进制进行读取,读取前几个字符是否满足图片的要求,所以不能通过content-type来达到目的。文件内容前加上GIF89a,构成伪图片从而绕过。或者制作图片马进行绕过。

GIF89a的方式

再将这个文件上传,上传成功!

生成图片马:

用文本的方式打开加马图片,在最后可以看到写入的脚本

上传成功后进入文件包含点验证

相关推荐

  1. 27-3 文件漏洞 - 文件类型(后端

    2024-02-20 12:56:03       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-20 12:56:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-20 12:56:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-20 12:56:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-20 12:56:03       20 阅读

热门阅读

  1. Qt中的事件该如何学习?(附带案例)

    2024-02-20 12:56:03       22 阅读
  2. vue常见的继承有哪些

    2024-02-20 12:56:03       21 阅读
  3. 【C++】STL中List的详细实现解析

    2024-02-20 12:56:03       22 阅读
  4. C++八股—怎么把左值变成右值

    2024-02-20 12:56:03       27 阅读
  5. mysql数据库自动生成默认时间不正确进行校正

    2024-02-20 12:56:03       31 阅读
  6. docker的底层原理二:容器运行时环境

    2024-02-20 12:56:03       30 阅读
  7. 学习 学习

    2024-02-20 12:56:03       40 阅读
  8. 新建一个flask项目

    2024-02-20 12:56:03       33 阅读
  9. 关于Spring中管理Bean的杂谈

    2024-02-20 12:56:03       30 阅读