IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 文件上传漏洞原理与利用 -> 正文阅读

[网络协议]文件上传漏洞原理与利用

什么是文件上传
文件上传是-个网站的常见功能,多用于上传照片、视频、文档等许多类型文件。
一般文件上传的流程如下:
1.前端选择文件,进行提交。
2.浏览器形成POST MultiPart报文发送到服务器。
3.服务器中间件接受到报文,解析后交给相关后端代码进行处理。
4.后端代码将上传的文件内容写入到临时文件中(PHP特有) 。
5.写入到文件中,文件名为提交的文件名或以一定规则生成的文件名。

当文件上传点未对.上传的文件进行严格的验证和过滤时,就容易造成任意文件.上传,包括上传动态文件(asp/php/jsp等等)。

如果上传的目标目录没有限制执行权限,导致所上传的动态文件(比如webshell) 可以正常执行并
且可以访问,即造成了文件上传漏洞。

总之,存在上传漏洞的必要条件是
①存在上传点
②可以上传动态文件
③.上传目录有执行权限,并且.上传的文件可执行
④可访问到上传的动态文件
在这里插入图片描述
Burp Suite的使用
Burp Suite是一个集成化的渗透测试工具,它集合了多种渗透测试组件,使我们自动化地或手工地能更好的完成对web应用的渗透测试和攻击。在渗透测试中,我们使用Burp Suite将使得测试工作变得更加容易和方便,即使在不需要娴熟的技巧的情况下,只有我们熟悉Burp Suite的使用,也使得渗透测试工作变得轻松和高效。

下载地址: https://portswigger.net/burp/

推荐配合插件SwitchyOmega使用,Chrome与Firefox均支持。
BurpSuite监听8080端口,如果使用了Tomcat/Squid- -类默认监听8080端口的软件,可以修改BurpSuite的监听端口。

前端检测绕过

客户端检测绕过
①JavaScript检测:通过浏览器提交上传请求前,触发检测用JS脚本进行检测。
例如:普通的表单上传

②Flash AS脚本检测: . 上传用Flash中,
请选择个要强代通门上得面线提交上传请求前,触发检测用AS脚本进行检测。
例如: DZ的头像上传

③APP上传检测:
检测写在APP客户端代码中,或者所调用的HTML页面中

客户端检测一般只检测文件扩展名。
客户端进行的检测,可通过对客户端代码的一-些修改或直接拦截修改报文即可绕过,所以这种上传限制约等于没有。

前端JavaScript检测绕过
①查看onchange、onsubmit等事件
onchange事件会在域的内容改变时发生。
onsubmit事件会在表单中的确认按钮被点击时发生,如下图示例。
②删除掉相关事件中的检测函数

APP端BurpSuite抓包
APP端BurpSuite抓包(HTTPS抓包)
①将BurpSuite的代理端口监听IP设置为"All Interface"
②在wifi设置中将代理地址设置为burpip:8080
③访问http://burpip:8080下载证书
④(安卓) 将修改证书扩展名为.crt,设置->安全->凭据存储~>从SD卡安装,选择证书进行安装
④(iOS)按照提示-路下一步安装
⑤(iOS)进入设置->通用->关于本机->证书信任设置,将新添加的证书设置为信任

如果Android APP使用了证书校验,可以配合Xposed框架的JustTrustMe使用,iOS暂时没有办法。

Mumu模拟器打开Wifi配置的方法:
adb connect 127.0.0.1:7555
adb shell am start -a android.settings.WIFl SETTINGS

服务器检测绕过

MIME类型检测绕过
MIME (Multipurpose Internet Mail Extensions)是描述消息内容类型的因特网标准。
MIME消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。
浏览器会自动根据所上传的文件的扩展名,对应到相应的MIME类型上。

$uploaded type = $_ FILES[ 'upfile' ][ 'type' ];
if( ( $uploaded_type == "image/jpeg" | $uploadedt_type ==”image/png" || $uploaded type == "image/gif" ) ){ 

在这里插入图片描述
文件内容检测
1.简单文件头检测
文件头是位于文件开头的一段承担一定任务的数据,一般都在开头的部分。
文件头的起始部分中-般开头标记文件类型。
如gif的文件头为GIF89a或GIF87a。

2.完整文件结构检测
通过调用图像函数(如getimagesize/imagecreatefromgif/imagecreatefrompng) , 进行检测文
件是否为图像,需要文件内容保持相对完整,所以无法通过上种追加头部起始字节的方法进行绕过。

if( @imagecreatefromgif ($uploaded_tmp)) {
if (move_uploaded file($_FILES['upfile']['tmp_name'], $uploaddir . '/' . $_FILES['upfile']['name'])) {
echo '文件 上传成功,保存于:'. $uploaddir . $_FILES[ 'upfile' ]['name'] . "\n";

针对这种检测,可以将图片文件与欲上传的文件进行合并来绕过检测。
可通过copy命令进行文件合并。

合并后的文件只要未经过清洗或缩放等操作即可通过检测,并保持欲上传文件的完整

由于上传文件的图片部分在解析为PHP时会以乱码显示,建议与尽量小的图片文件进行合并,否则会有大量的乱码。

3.恶意文件内容检测
检测提交内容中是否包含Webshel等数据。
推荐使用强混淆的weevely进行尝试,Kali中自带。
https://github.com/sunge/Weevely

或者尝试开源的webshell收集项目:
https://github.com/tennc/webshell

恶意文件内容检测,常见关键字
eval(
base64 encode(
assert(
java.lang.Runtime
java.lang.ProcessBuilder

一些小技巧
1.文件参数多filename属性
文件上传过程种,如果存在waf拦截-些扩展名,可以通过尝试多个filename属性

2.目录可控时,可以尝试使用目录穿越的方法(…/)

<Directory "D: /WWW/ichunqiu/up1oad/">
<FilesMatch "\. (?i :php Iphp3 |php4)$">
Order A1low, Deny
Deny from a11
</Fi1esMatch>
</Directory>

扩展名检测类型可控
1、可以从后台修改允许/禁止的扩展名类型
2、提交参数中存在允许/禁止的扩展名类型
3、前端单独抽出了文件扩展名进行了提交

解析漏洞

1.IIS/Nginx+PHP fastcgi取值错误解析漏洞(配置错误)
开启了cgi.fix_ pathinfo,如果开启以后,所执行文件不存在,会继续查找上一级文件是否存在。
并且未设置security.limit extensions,该选项限制可以执行的文件类型。

2.Nginx文件名逻辑漏洞(CVE-2013-4547)
影响版本: Nginx 0.8.41 ~ 1.4.3/ 1.5.0~ 1.5.7
上传一个以空格(%20) 为结尾的文件,例如" abcde.jpg "
当访问abcde.jpg%20%00.php时,会将刚刚. 上传的"abcde.jpg "文件,当做PHP进行执行。
abcde.jpg%20%00.php
一般的php匹配正则: .php$
存在漏洞时,Nginx将abcde.jpg%20认当做了 脚本文件名

3.Apache解析漏洞(配置错误)
如果在Apache的conf文件中有如下配置
AddHandler application/x-httpd-php .php
则abcde.php.jpg也会被当做php去执行
如果在.htaccess中有如下配置,可以将扩展名.xx当做php执行
AddType application/x-httpd-php xxx

4.IIS 5.x/6.0解析漏洞
①上传文件名: abcde.asp;jpg
服务器默认不解析;号后面的内容,因此abcde.asp;jpg被当做了 asp文件解析。
②向xxx.asp目录下面.上传abcde.jpg
服务器会将xxx.asp目录下的文件都当做asp文件解析

文件上传高级利用

1.重绘图
应用调用图片库对.上传的文件进行了图像转换,所以即使将图片与文件合并,也会将尾部转换掉,无法使用前面所讲方法进行上传webshell
①将正常图片用目标使用的图形库进行转换
②寻找转换前后两次未变的部分
③将未变部分替换为欲上传的WebShell
④将替换后的文件进行图像转换,看是否转换后扔存在替换后部分
转换前: 12333333abcdefg[11111111233]sdas213

转换后: xsadssdsdsddssss[11111111233]2312443

2 PHPINFO与文件包含的利用
在这里插入图片描述
①PHP在解析multipart/form-data请求时,会创建临时文件,并写入上传内容,脚本执行结束后即
删除
②PHPINFO可以输出$_ FILES信息
③通过多种方式争取时间,在临时文件删除前进行执行包含。

通过在数据报文中加入大量的垃圾数据,使PHPINFO页面过大,导致PHP输出进入流式输出,并不一次输出完毕。

通过大量请求来延迟PHP脚本的执行速度。

3.在线解压缩的利用
存在上传压缩包并解压的上传点,可使用如下方式利用。

将Webshell打包到压缩包中
模板上传处常用压缩包.上传后进行自动解压。部分此类有检测压缩包中内容的,可尝试建立目录进行压缩。使用目录穿越(…/)的方法向上一级目录进行上传。

存在上传压缩包并解压的上传点,可使用如下方式利用。
将文件软链接打包到压缩包中
文件软链接到/etc/passwd等文件,达到任意文件读取

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:59:21  更:2022-05-18 18:01:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:33:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码