3. 文件上传漏洞——漏洞总结笔记
一、文件上传漏洞[*]前提条件:
[*]能上传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类型
.gifgif image/gif
.pngimage/png
.jpgimage/jpegmime类型为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是否有变化?
有: 重新渲染
没有: 仅读取内容
[*]文件幻数检测
常见的图片文件幻数
png (16进制) 文件幻数: 89 50 4E 47 0D 0A 1A 0A
JPEG(jpg) 文件幻数:FF D8 FF E0 00 10 4A 46
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企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]