渗透测试-文件上传/下载/包含

渗透测试-文件上传/下载/包含

概述

文件上传漏洞是指用户上传了一个可执行的脚本文件,

并通过此脚本文件获得了执行服务器端命令的能力。

常见场景是web服务器允许用户上传图片或者普通文本文件保存,
而用户绕过上传机制上传恶意代码并执行从而控制服务器。

这种漏洞是getshell最快最直接的方法之一
上传文件操作本身是没有问题的,问题在于文件上传到服务器后,服务器怎么处理和解释文件。

一.常见校验上传文件的方法

客户端校验

1.通过javascript来校验上传文件的后缀是否合法,可以采用白名单,也可以采用黑名单的方式

  • 判断方式:在浏览加载文件,但还未点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包 。

服务器端校验

1.校验请求头 content-type字段

  • 用PHP检测
    在这里插入图片描述

2. 正则匹配来判断文件幻数(文件头)内容是否符合要求

一般来说属于白名单的检测,常见的文件头(文件头标志位)如下

1.JPEG;.JPE;.JPG,”JPGGraphicFile”(FFD8FFFE00)

(2.gif,”GIF89A”(474946383961)

(3.zip,”ZipCompressed”(504B0304)

(4.doc;.xls;.xlt;.ppt;.apr,”MSCompoundDocumentv1orLotusApproachAPRfile”(D0CF11E0A1B11AE1

3. 文件加载检测:

一般是调用API或函数去进行文件加载测试,例如图像渲染测试,当测试结果正常的时候才允许上传

一次渲染(代码注入)
二次渲染

4. 后缀名黑名单、白名单 后缀名校验

5. 自定义

6. WAF校验

即使用不同的WAF产品来进行过滤,通常是独立与服务程序的一段中间程序或者硬件

二.对应校验的绕过方法

1.客户端校验绕过:

直接修改js代码或者使用抓包的方法修改请求内容绕过
先上传一个gif木马,通过抓包修改为 jsp/php/asp,只用这种方法来检测是肯定可以绕过的。

2. 服务端绕过

校验请求头content-type字段绕过
通过抓包来修改Http头的content-type即可绕过,也肯定是可以绕过这种检测




POST /upload.php HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: localhost
User-Agent: libwww-perl/5.803
Content-Type: multipart/form-data; boundary=xYzZY
Content-Length: 155
--xYzZY
Content-Disposition: form-data; name="userfile"; filename="shell.php"
Content-Type: image/gif (原为 Content-Type: text/plain)
<?php system($_GET['command']);?>
--xYzZY-  

文件幻数(文件头)检测绕过:

在木马内容的前面插入对应的文件头内容,

例如:GIF89a ,

更保险的方法是在可上传的文件中插入木马代码,然后修改后缀

文件加载检测

通过例如加载文件进行图像渲染的方式来测试,
这个时候就一般需要在正常的文件中插入木马代码了

例如图像,那么插入的代码一般会放在图像的注释区

因此不会影响图像正常渲染绕过这种检测,

此时可以使用工具(称为插马器)来进行插入

例如edjpgcom,或者直接用copy命令来合成也可以。

当然这种检测不一定能够完全绕过

后缀名检测

后缀黑名单检测:找查blacklist(黑名单列表)的漏网之鱼,例如

大小写:

如果检测的时候不忽略大小写,那么可以改变后缀名的大小写绕过

扩展名:列表中如果忽略了某些后缀

能被解析的文件扩展名列表:

jsp jspx jspasp asa cer aspx

php php php3 php4 pht

exe exee

后缀白名单检测:

白名单检测还是会比黑名单强一点,常见的绕过方法有%00截断,还有服务器的解析漏洞

%00截断漏洞:

如果存在这类漏洞,那么后缀名的检测都可以绕过,此时我们可以如下命名一个上传文件
在这里插入图片描述

解析漏洞:

这类漏洞是本身服务器的中间件产生的,例如apache,nginx都被爆出过存在解析漏洞,存在解析漏洞的话,上传的安全性几乎就完全失去了 。

和其他漏洞结合的上传

服务器解析漏洞

IS5.x-6.x解析漏洞

使用iis5.x-6.x版本的服务器,
大多为windows server 2003,网站比较古老,开发语句一般为asp;
该解析漏洞也只能解析asp文件,而不能解析aspx文件。

目录解析(6.0)

形式:www.xxx.com/xx.asp/xx.jpg

原理: 服务器默认会把.asp,.asp目录下的文件都解析成asp文件。

文件解析

形式:www.xxx.com/xx.asp;.jpg
原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了。

解析文件类型

IIS6.0 默认的可执行文件除了asp还包含这三种 :

/test.asa
/test.cer
/test.cdx

apache解析漏洞

漏洞原理

Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。

比如 test.php.qwe.asd “.qwe”和”.asd” 这两种后缀是apache不可识别解析,
apache就会把wooyun.php.qwe.asd解析成php。

漏洞形式

www.xxxx.xxx.com/test.php.php123

其余配置问题导致漏洞

1.如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php
这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。

2.如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .jpg
即使扩展名是 jpg,一样能以 php 方式执行。

修复方案

1.apache配置文件,禁止.php.这样的文件执行,配置文件里面加入



2.用伪静态能解决这个问题,重写类似.php.*这类文件,打开apache的httpd.conf找到LoadModule rewritemodule modules/modrewrite.so 把#号去掉,重启apache,在网站根目录下建立.htaccess文件

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .(php.|php3.) /index.php
RewriteRule .(pHp.|pHp3.) /index.php
RewriteRule .(phP.|phP3.) /index.php
RewriteRule .(Php.|Php3.) /index.php
RewriteRule .(PHp.|PHp3.) /index.php
RewriteRule .(PhP.|PhP3.) /index.php
RewriteRule .(pHP.|pHP3.) /index.php
RewriteRule .(PHP.|PHP3.) /index.php
</IfModule>

nginx解析漏洞

漏洞原理

Nginx默认是以CGI的方式支持PHP解析的,

普遍的做法是在Nginx配置文件中通过正则匹配设置 SCRIPT_FILENAME。
当访问 www.xx.com/phpinfo.jpg/1.php这个URL时

$fastcgi_script_name会被设置为 “phpinfo.jpg/1.php”,
然后构造成 SCRIPT_FILENAME传递给PHP CGI,

但是PHP为什么会接受这样的参数,并将phpinfo.jpg作为PHP文件解析呢?

这就要说到fix_pathinfo这个选项了。

如果开启了这个选项,那么就会触发在PHP中的如下逻辑:

PHP会认为SCRIPTFILENAME是phpinfo.jpg,
而1.php是PATHINFO,所以就会将phpinfo.jpg作为PHP文件来解析了

漏洞形式

www.xxxx.com/UploadFiles/image/1.jpg/1.php
www.xxxx.com/UploadFiles/image/1.jpg %00.php
www.xxxx.com/UploadFiles/image/1.jpg/ %20.php

另外一种手法:上传一个名字为test.jpg,
然后访问test.jpg/.php,在这个目录下就会生成一句话木马shell.php。

IIS7.5解析漏洞

IIS7.5的漏洞与nginx的类似,都是由于php配置文件中,开启了 cgi.fix_pathinfo,
而这并不是nginx或者iis7.5本身的漏洞。

操作系统相关

1.上传不符合windows文件命名规则的文件名

test.asp.
test.asp(空格)
test.php:1.jpg
test.php::$DATA
shell.php::$DATA…….

会被某些版本的windows系统自动去掉不符合规则符号后面的内容。

2.linux下后缀名大小写

linux是大小写敏感的,因此一般检测也会区分大小写,
但某些解析器是不区分大小写的,例如PHP,上传php不被解析,可以试试上传pHp后缀的文件名。

CMS、编辑器漏洞

CMS漏洞:可以针对不同CMS存在的上传漏洞进行绕过。

编辑器漏洞:比如FCK,ewebeditor等,可以针对编辑器的漏洞进行绕过。

可参考以下链接

https://www.leavesongs.com/PENETRATION/UseOfFckeditor.html

https://docs.google.com/document/d/1w_61xR8U7nmn4Y0CvBHpG1uFIU2ORx69QnqTxQt8Km0/edit?pli=1

常见WAF绕过姿势

1.大小上限:WAF对校验的用户数据设置大小上限,此时可以构造一个大文件的木马,前面都是填充的垃圾内容

2.filename:针对早期版本的安全狗,可以多加一个filename来绕过

在这里插入图片描述
或者可以通过吧filename放在非常规的位置来绕过
(这里的filename指在http请求头中上传的文件名字)

在这里插入图片描述

post/get:

如果WAF规则是:只检测特定请求类型的数据包,
但服务端接收的时候却用了request来,此时通过修改请求头的请求方法就可以绕过

利用waf本身的缺陷

对于不同的waf产品可以搜索其对应的漏洞缺陷,进行绕过

利用NTFS ADS特性

ADS是NTFS磁盘格式的一个特性,用于NTFS交换数据流。
在上传文件时,如果waf对请求正文的filename匹配不当的话可能会导致绕过

文件重命名绕过:

如果web程序会将filename除了扩展名的那段重命名的话,那么还可以构造更多的点、符号等等。

其他规则结合

截断:

例如 %00, 0x00等

test.php(0x00).jpg
test.php%00.jpg

路径/upload/1.php(0x00),文件名1.jpg,结合/upload/1.php(0x00)/1.jpg

伪代码演示:

name= getname(httprequest) //假如这时候获取到的文件名是 help.asp.jpg(asp 后面为 0x00)
type =gettype(name)        //而在 gettype()函数里处理方式是从后往前扫描扩展名,所以判断为 jpg
if(type == jpg)
   SaveFileToPath(UploadPath.name, name)   //但在这里却是以 0x00 作为文件名截断
//最后以 help.asp 存入路径里

可上传.htaccesss

上传当前目录的.htaccess 文件然后修改为以下内容:

AddType application/x-http-php .jpg   #(上传的jpg 均以php执行)

把.htaccess 上传后,且上传成功后,再上传内容为一句话的jpg文件

文件校验的建议

文件扩展名服务端白名单校验。

文件内容服务端校验。

上传文件重命名。

隐藏上传文件路径。

以上几点,可以防御绝大多数上传漏洞,但是需要跟服务器容器结合起来。

如果解析漏洞依然存在,那么没有绝对的安全。

参考文章:

http://www.cnblogs.com/shellr00t/p/6426945.html

http://www.freebuf.com/vuls/128846.html

https://thief.one/2016/09/22/%E4%B8%8A%E4%BC%A0%E6%9C%A8%E9%A9%AC%E5%A7%BF%E5%8A%BF%E6%B1%87%E6%80%BB-%E6%AC%A2%E8%BF%8E%E8%A1%A5%E5%85%85/

文件 包含 基本操作

 https://www.hetianlab.com/expc.do?ec=ECIDef72-03b9-4edc-8626-d1e623989ecb

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

利用目录穿越反弹SHELL

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述


实战测试

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述 在这里插入图片描述在这里插入图片描述在这里插入图片描述 在这里插入图片描述

  • 一句话 不行
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
---- 开机启动

在这里插入图片描述

  • windows 10 的启动目录
  • 注意免杀的 问题就可以

上传漏洞原理利用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

02 文件上传漏洞原理与利用

在这里插入图片描述

第一章:文件上传漏洞原理与流程

在这里插入图片描述

1.1 文件上传漏洞原理

在这里插入图片描述

在这里插入图片描述
post urldecode发送 报文
上传文件 multipart

  • php 特有 临时目录

在这里插入图片描述
在这里插入图片描述
编码形式 为 multipart/form-data 报文

放过

在这里插入图片描述
在这里插入图片描述

  • 上传报文
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
  • php 生命周期之后 删除几秒 特有 将 文件内容 写入 临时文件

利用phpinfo信息LFI临时文件 高级利用

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

  • 本地文件包含 上传漏洞 利用

1.2 文件上传检测流程

  • 绕过 检测点
    在这里插入图片描述

文件名
文件内容 检测

恶意代码 webshell 检测

隔离区

*(跟解析漏洞 00截断配合)

读取文件内容 ----未知位置

在这里插入图片描述
在这里插入图片描述


答案:
1、正确答案:A
2、正确答案:B
3、正确答案:B
4、正确答案:A
5、正确答案:A

第二章:前端检测绕过

第一节 客户端检测绕过

在这里插入图片描述
在这里插入图片描述

  • 提交包 校验 app 签名

在这里插入图片描述
ajax 检测

删除 检测函数 审查元素

在这里插入图片描述
在这里插入图片描述

ctrl + U
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 提交报文修改检测

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
打开代理
选择 白名单 类型 文件
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以对 历史 进行 重放

在这里插入图片描述

APP 下 burp 抓包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

安卓 进行 代理 抓包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述




答案:
1、正确答案:D
2、正确答案:D
3、正确答案:B
4、正确答案:A
5、正确答案:A

第三章:服务端检测绕过

3.1 MIME类型检测绕过

服务端绕过 需要我们 去猜程序员的 检测方法
不像前端 很简单 操作 就绕过去

在这里插入图片描述

  1. 扩展名 黑白名单
  2. MIME/type 浏览器生成的 也是根据 拓展名
  3. 文件内容 图片 文本 evel system phpinfo 不是很正常内容的

找到盲点
组合 上传

在这里插入图片描述
w3school

关注 白名单 的 mime 类型

php里的 $_FILES数组 文件参数 MIMEtype

判断 是否为 图像类型

在这里插入图片描述
在这里插入图片描述
MIMEtype 浏览器自动生成
在这里插入图片描述
可以修改 不影响上传内容


在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 文件内容检测绕过

在这里插入图片描述

检测 文件中 是否 有 恶意内容

开头 有 魔术标记

在这里插入图片描述
GIF89a

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三位 的 16进制 3个字节

JPG
在这里插入图片描述
%ff %d8%ff
url 编码 形式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完整文件结构 检测

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
动态 混淆

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

测试 被 匹配的 关键字
替换 关键字

第三节 文件上传小技巧

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小技巧

filename 多个
目录可控 穿越

禁止访问 php

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查看 目录 是否被 禁止
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
文件夹 验证 避免 路径要打全

绕过 waf …/ …/
在这里插入图片描述
…/./…/

在这里插入图片描述

在这里插入图片描述
拿到后台 之后的 操作 白名单

  • 允许上传的 参数 提示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


答案
1、正确答案:A
2、正确答案:B
3、正确答案:A
4、正确答案:A
5、正确答案:B

第四章:解析漏洞

第一节 常见解析漏洞

服务器 访问 静态文件非动态文件 --解析成–> 动态文件 一种错误

iis/nginx + php fastcgi 取值错误 解析漏洞 (配置错误)

在这里插入图片描述
伪静态

默认配置

新版的fastcgi 默认 只有 默认 php 可以解析

在这里插入图片描述
环境 php7

在这里插入图片描述
图片 里有 phpinfo 检测了 图片 内容
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

新版的 fastcgi 不会出现 。

nginx 文件名逻辑漏洞 CVE-2013-4547

在这里插入图片描述
看版本 可以看 响应报文

在这里插入图片描述
加一个空格

C+S+U url解码

在这里插入图片描述
在这里插入图片描述

apache 解析漏洞

在这里插入图片描述
配置错误

也是 留后门 的 方法

在这里插入图片描述

IIS 5.x/6.0 解析漏洞

在这里插入图片描述
FckEditor

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

加 ;.jpg

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可进行修改

第五章:文件上传高级利用

5.1 图片重绘

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
取到 temp_name

img_info 文件检测

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
清洗掉了 转换脚本

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在上面 加上了 phpinfo

php 是 字节流 机械
unicode 合并 还是可以解析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2 PHPINFO与文件包含的利用

没有找到 上传点

在这里插入图片描述
在这里插入图片描述
多线程
垃圾数据

在这里插入图片描述
构造 上传报文 和 包含报文

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.3 在线解压缩漏洞利用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模板上传 等 解压上传到 固定文件夹
可以在 模板的基础上 进行修改

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

zip 目录穿越
安卓库 可以 写入文件 替换关键系统文件 命令执行

ios zip解压漏洞

在这里插入图片描述

软连接
当前文件 指向一个 绝对路径 类似于 快捷方式
在这里插入图片描述
在这里插入图片描述
symlinks 进行将 软连接 压缩

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

上传漏洞 挖掘分析

在这里插入图片描述

# 废话没有直接干货

# PHP $_FILES 函数

在这里插入图片描述

  • 测试下

在这里插入图片描述在这里插入图片描述


PHP move_uploaded_file() 函数

  • ——将上传的文件移动到新位置。

若成功,则返回 true,否则返回 false。在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

  • 上传 MIME 文件头/后缀 是否存在

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_33608000/article/details/125476982