3. 文件上传漏洞——漏洞总结笔记

打印 上一主题 下一主题

主题 829|帖子 829|积分 2487

一、文件上传漏洞



  • 前提条件:

  • 能上传webshell (若仅让上传图片,而又绕不已往,则不行)
  • webshell路径可知 (必要访问目标, 不知道则访问不了 )
  • webshell        可以被访问
  • webshell可以被解析(即可以显示页面; 若返回页面直接显示代码,并没有解析)


  • 判断

  • 确认是什么过滤?
    上传恣意文件,得到仅允许上传jpg  等图片文件
  • 上传木马图片,jpg+一句话木马文件
    发现上传错误----检测了文件内容
  • 加GIF89a, 后缀为txt
1. 底子操作


URL操作
执行webshell
url根目录后:
?id=phpinfo();

id=system(whoami);

id=system(ipconfig);
......
文件操作
底子代码


2. webshell

说明
一种恶意脚本 或网站后门
webshell分类
php/asp/jsp/木马等
大马/小马/一句话木马
打包马/拖库马/内存马


  • 一句话木马
代码:

表明:
数据传递:post 通过post接收cmd这个参数值
数据执行: 原代码:
执行:cmd=phpinfo();
变为:
等价post赋给cmd的值
3. 分类


  • post
post代码中有: @,用于隐蔽信息
post方式,不会被记录,记录了一样平常人也看不懂
操作
hackbar----开启post-----body中写kong=phpinfo(); ----执行----得到页面返回结果


  • get
get代码中没有@, 则直接显示代码(如果加上@,则也不会显示)
get方式会记录入侵者的操作,所以一样平常不消get

4. 检测文件方式



  • 判断c/s检测
操作
方式1:上传非法文件,返回结果是否很快?(上传非图片文件,立马错误提示)

快---客户端 ( 缘故原由: 因为不必要将这个文件发送给服务器 )
慢---服务端 (点击上传,欣赏器按钮刷新,缘故原由: 发送数据,服务端接收数据-返回响应-欣赏器接收响应-刷新页面)
方式2: 刷新按钮
客户端检测,刷新按钮不会刷新,
服务端检测,刷新按钮会刷新
方式3: bp抓包
客户端: bp抓不到相应包
服务端: bp可以抓到

4.1 客户端检测


检测方式
javascript检测

绕过方式

  • 手动禁用javascript  或使用 noscript插件(不推荐)
操作:
检查----三点(定制开发者工具及帮助)----设置----勾选禁用JavaScript-----点击上传


案例:
网页复制笔墨时----扫码交钱-----可以禁用JavaScript----再次复制

  • 删除onsubmit 等相关元素代码
操作

上传页面----检查----左上角箭头----点击上传位置的元素----查看器:找到onsubmit(上传按钮)
找到查看器中的return checkfile()----删除-----回车-----上传

上传乐成后, 复制图像链接----打开url----右键检查----hackbar----load----post data ---- cmd=phpinfo();-----返回页面-----说明上传乐成

限制
只能使用一次,再次打开return checkfile()函数又回来了
辅助查看

右键页面----查看页面源代码-----查找------script type="javascript/txt";
此中,checkfile 函数作用:判断文件名;
file== "" 或 file==null 文件名为空,说明没有上传文件

4.2 服务端检测


判断检测了后缀还是内容
操作
上传代码图片( 内容为代码, 后缀为图片后缀)

文件能上传: 仅检查后缀
文件不能上传: 检查了后缀和内容


  • other(逻辑)

mime类型检测

mime类型绕过方式
操作
bp抓包,  修改第二个content-type参数为-----content-type: image/png-------修改完直接关闭拦截

随意上传文件后缀,bp中抓包恣意更改mime类型
hackbar执行相关文件代码:  cmd=phpinfo();

常见mime类型
.gif  gif image/gif
.png  image/png
.jpg  image/jpeg  mime类型为jpeg

文件后缀检测

判断
操作:
上传恣意后缀文件

乐成:黑名单( 该文件在黑名单中,所以可以上传)
失败:白名单(该文件不在白名单中,所以不可上传; 只允许上传哪些东西)
黑名单检测


  • 后缀巨细写绕过
前提: 仅仅使用Windows, 对巨细写不敏感;  访问1.php 与 访问1.PHP一样
操作: bp中抓包,修改后缀为大写, 乐成上传; 这时文件名会被服务器修改,复制该文件名访问


  • 后缀双写绕过
操作: bp中抓包,修改后缀. 例如: x.php 修改为 x.phphpp


  • 其它可解析后缀绕过
前提: 后端配置文件httpd-conf中 配置了该后缀

后端配置: 后端疏忽操作(站在背景维护角度)-----phpstudy----其他选项-----打开配置文件-----httpd.conf 文件, 第403行加上该文件后缀后,就可以上传-----重启服务

操作:  更改差别服务器后缀为以下各种
PHP: php2、php3、php5、phtml、.pht(是否解析必要根据配置文件中设置类型来决定)
ASP:asa、cer、cdx
ASPX:ascx、ashx、asac
JSP:jspx、jspf


  • 图片+.htaccess配置文件绕过
操作:
上传 nn.png 与 .htaccess文件; .htaccess文件代码内容设置图片名为: nn.png ,则上传nn.png 文件

文件内容:
                 setHandler application/x-httpd-php                  

代码表明: 
调用解析器去解析图片nn.png

访问对象:
nn.png (http://127.0.0.1/upload-labs-master/upload/nn.png) ,非.htaccess文件

生效对象:
.htaccess该文件上传到某个目录,就对这个目录生效
httpd.conf文件为apache服务器整个网站的目录

留意: .htaccess文件(不能有文件名), 若有bp抓包修改

操作
bp抓包,修改后,访问response中地点:        http://127.0.0.1/upload-labs-master/upload/1.png
执行相关代码---- cmd=phpinfo();

白名单检测

判断
上传一张图片与上传一个本身构造的后缀. 如果只能上传图片不能上传其它后缀文件,说明是白名单检测
前提条件
php:php < 5.3.29且magic_quotes_gpc=off
java: jdk < JDK1.7.0_40
背景管理员误操作
后端误设置服务器版本: phpstudy------切换版本: 5.2.17
phpstudy----打开配置文件----php-ini
ctrl+F---- magic_quotes_gpc, 修改为: Off
保存-----重启


  • %00截断绕过
操作
bp抓包,修改参数
将  save_path=../upload/
修改为   save_path=../upload/test.php%00

访问: /upload/test.php ; ../upload/test.php/132023.png
执行: cmd=phpinfo(); -----乐成
原理
%00(空格) 是一个url编码, 当url中出现%00时就会认为读取已结束
response后
复制路径过来为: ../upload/test.php , test后有%00, 将后面内容删除了


  • 0x00截断绕过
操作
抓包-----
将   ../upload/
修改为   ../upload/cmd.php a ( 表明:空格+a, 表示添加一个标记)

切换到
十六进制HEX-----找到../upload/cmd.php a此中的空格,------ 将空格(16进制为20) 改为 00
原理
response中:   ../upload/ cmd.php空格a....  ,后面内容截断,复制不了
访问: /upload/cmd.php -----乐成

体系在对文件名进行读取时,如果遇到0x00,就会认为读取已经结束。00是文件的十六进制内容里的00,而不是文件名中的00


  • 文件包含漏洞+图片马进行绕过
操作
上传文件-----复制图像链接-----打开----复制文件名; 点击文件包含漏洞
url中输入: ?file=upload/6520231124134708.png
结果: 文件太大,出现错误
蚁剑连接时url为: png的url----http://127.0.0.1/upload-labs-master/include.php?file=upload/6520231124134708.png

文件内容检测

判断
操作
上传乐成后的图片和上传前的图片巨细,颜色和md5是否有变化?

有: 重新渲染
没有: 仅读取内容


  • 文件幻数检测
常见的图片文件幻数
  1. png (16进制) 文件幻数: 89 50 4E 47 0D 0A 1A 0A
  2. JPEG(jpg)   文件幻数:  FF D8 FF E0 00 10 4A 46
  3. GIF         文件幻数:  47 49 46 38 39 61 0A 00
复制代码
查看图片文件的幻数

操作
bp抓包-----hex---查看

使用hxd/010/Edjpgcom 等软件,拖动文件进来即可查看
差别的文件格式,如docx, png, zip等文件幻数都不相同


添加文件幻数
操作
php文件中添加gif文件幻数

代码如下
GIF89a


  • 软件/cmd 制作图片马

hxd64.exe

操作:
在Hxd工具右侧中直接添加一句话木马代码:
代码如下

或者修改hex中代码图片幻数

Edjpgcom  

条件:只能编辑jpg文件
操作: 拖动图片到Edjpgcom.exe图标中打开----右侧hex为00 的地方,添加一句话木马

010Editor.exe

操作: 拖动图片到Edjpgcom.exe图标中打开----右右侧hex为00 的地方,添加一句话木马

cmd制图片马

cmd下执行(必须在有图片和马的目录下):copy aaa.jpg/b + test.php/a shell.jpg

表明:
/b 以二进制方式打开
/a 以ASCII方式打开
生成shell.jpg文件(包含aaa.jpg和test.php文件内容),可以正常打开
两张图片都可以正常打开,而shell马文件会在最后加上一句话木马

手工制作图片马

操作:在正常图片中添加一句话木马


  • 二次渲染
操作

上传正常图片----上传后----右键-----将图片另存为;
之后,打开010 editor工具,在原始文件中都为00部分插入webshell马
原理

根据用户上传的图片,新生成一个图片. 将原始图片删除,将新图片添加到特殊的数据库中
例如: 网站根据用户上传的头像生成大中小差别尺寸的图像

其他


  • 组合上传
  • 文件上传: 前端验证+mime+黑名单/文件内容
  • 文件包含+白名单

文件上传


  • 1.php恶意代码文件 (php文件马)
可以直接进利用用, 只要服务器有php解析器就能解析


  • 2.代码图片 (php文件幻数马)
  • 3.带马正常图片 (图片马)
必须要配合其他的漏洞进利用用

1 文件包含漏洞解析
2 htaccess+1.jpg 解析
3 中间件+1.jpg解析
才能解析

二、其他底子本领


  • web日记开启
phptutorial\apache\logs\access.log
日记内容表明:
ip地点 访问时间 请求方法 访问的目录 状态码 内容长度


  • 题目
php文件可以上传,但是有php文件的一句话木马上传不了;
编辑在图片内里的一句话代码通过文件包含漏洞执行内里的PHP语句;
三、文件上传漏洞修复

1、 上传的目录设置为不可执行。只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。
2、 对文件后缀的判断中使用白名单的方式。
3、 文件服务器和web服务器分离,也就是上传的文件单独存放到其他的服务器之中。
4、 不必要返回文件路径的情况下,随机改写文件名
待续.......


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

梦见你的名字

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表