Upload-labs十六和十七关

news2025/1/15 20:55:14

目录

  • 第十六关
  • 第十七关

第十六关

直接上传php文件判断限制方式:

同第十五关白名单限制

第十六关源码:
在这里插入图片描述
代码逻辑判断了后缀名、content-type,以及利用imagecreatefromgif判断是否为gif图片,最后再做了一次二次渲染

第71行检测 f i l e e x t 和 fileext和 fileextfiletype是否为gif格式.

然后73行使用move_uploaded_file函数来做判断条件,如果成功将文件移动到$target_path,就会进入二次渲染的代码,反之上传失败.

在这里有一个问题,如果作者是想考察绕过二次渲染的话,在move_uploaded_file( t m p n a m e , tmpname, tmpname,target_path)返回true的时候,就已经成功将图片马上传到服务器了,所以下面的二次渲染并不会影响到图片马的上传.如果是想考察文件后缀和content-type的话,那么二次渲染的代码就很多余.(到底考点在哪里,只有作者清楚.哈哈)

由于在二次渲染时重新生成了文件名,所以可以根据上传后的文件名,来判断上传的图片是二次渲染后生成的图片还是直接由move_uploaded_file函数移动的图片.

我看过的writeup都是直接由move_uploaded_file函数上传的图片马.今天我们把move_uploaded_file这个判断条件去除,然后尝试上传图片马.

上传gif
将<?php phpinfo(); ?>添加到gif的尾部.
在这里插入图片描述
成功上传含有一句话的111.gif,但是这并没有成功.我们将上传的图片下载到本地.
可以看到下载下来的文件名已经变化,所以这是经过二次渲染的图片.我们使用16进制编辑器将其打开
在这里插入图片描述
可以发现,我们在gif末端添加的php代码已经被去除.

关于绕过gif的二次渲染,我们只需要找到渲染前后没有变化的位置,然后将php代码写进去,就可以成功上传带有php代码的图片了.

经过对比,蓝色部分是没有发生变化的
在这里插入图片描述
我们将代码写到该位置.
上传后在下载到本地使用16进制编辑器打开,可以看到php代码没有被去除.成功上传图片马

绕过思路:

1、把经过二次渲染的图片进行捆绑webshell图片马,文件上传时候 文件名为.gif后缀、文件类型content-type:image/gif、文件头GIF89a

推荐使用gif格式,十六进制编辑图片文件找到二次渲染未修改的图片区域插入一句话木马

第十七关

第十七关源码:
在这里插入图片描述
代码逻辑:

这里先将文件上传到服务器,然后通过rename修改名称,再通过unlink删除文件,因此可以通过条件竞争的方式在unlink之前,访问webshell

绕过思路:

1、条件竞争绕过上传webshell

上传一个fputs写入shell文件功能的webshell,通过python或者burpsuite访问该文件

f.php文件内容

<?php fputs(fopen('shell.php','w'),'<?php @assert($_POST[c]);?>'); ?>

burpsuite抓包:通过爆破形式不断的进行文件上传

burpsuite抓包:通过爆破形式不断的访问该文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/998496.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络第四章——网络层(中)

提示&#xff1a;待到山花烂漫时&#xff0c;她在丛中笑。 文章目录 需要加头加尾&#xff0c;其中头部最重要的就是加了IP地址和MAC地址&#xff08;也就是逻辑地址和物理地址&#xff09;集线器物理层设备&#xff0c;交换机是物理链路层的设备&#xff0c;如上图路由器左边就…

Vue使用ts的枚举类型

vue项目中要使用ts的枚举类型需要为script标签的lang属性添加ts属性值 <script lang"ts" setup></script > 首先要声明一下&#xff08;我这里是声明了一个名称一个颜色&#xff09;&#xff1a; 接下来是页面中的标签使用&#xff08;用的是element表格…

Linux系统编程--IO系统调用

文章目录 一、I/O系统调用1.open() 打开文件1.1 所需基础知识1.2. open() 详解1.3 示例代码 2.read() 读取文件2.1.基础知识2.2.read() 详解2.3. 读入所有字节 3.write() 写文件3.1. 基础背景知识3.2.write() 详解3.3.示例代码3.4.注意点3.4.1.同步IO1. fsync() 和fdatasync()2…

MySQL高可用搭建方案之(MMM)

有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top 注意&#xff1a;这篇转载文章&#xff0c;非原创 首发博客地址 原文地址 前言 MySQL的高可用有很多种&#xff0c;有我们经常说的MMM架构、MHA架构、…

内网隧道代理技术(二十三)之 DNS隧道反弹Shell

DNS隧道反弹Shell DNS隧道 DNS协议是一种请求、应答协议,也是一种可用于应用层的隧道技术。DNS隧道的工作原理很简单,在进行DNS查询时,如果查询的域名不在DNS服务器本机缓存中,就会访问互联网进行查询,然后返回结果。如果在互联网上有一台定制的服务器,那么依靠DNS协议…

标准C库IO函数和Linux系统IO函数

linux系统的io函数更加偏底层&#xff0c;更加建议使用C库的函数&#xff0c;效率较高&#xff08;有缓冲区&#xff09; 磁盘满了或者手动fflush或者关闭文件才会io一次&#xff0c;效率提高&#xff0c;但是linux没有缓冲区 主要通过file *fp指针操作文件&#xff0c;文件描…

COSCon'23 社区召集令

一年一度的开源盛会&#xff0c;COSCon23 第八届中国开源年会&#xff0c;将于10月28~29日&#xff0c;在四川成都市高新区菁蓉汇召开&#xff01;本次大会的主题是&#xff1a;“开源&#xff1a;川流不息、山海相映”&#xff01; 三年新冠疫情没有将我们击垮&#xff0c;开源…

记录socket的使用 | TCP/IP协议下服务器与客户端之间传送数据 | java学习笔记

谨以此篇&#xff0c;记录TCP编程&#xff0c;方便日后查阅笔记 注意&#xff1a;用BufferedWriter write完后&#xff0c;一定要flush&#xff1b;否则字符不会进入流中。去看源码可知&#xff1a;真正将字符写入的不是write()&#xff0c;而是flush()。 服务器端代码&#…

运维学习之部署Alertmanager-0.24.0

参考《监控系统部署prometheus基本功能》先完成prometheus部署。 参考《运维学习之采集器 node_exporter 1.3.1安装并使用》安装node_exporter。 下载 nohup wget https://github.com/prometheus/alertmanager/releases/download/v0.24.0/alertmanager-0.24.0.linux-amd64.ta…

SecureCRT ssh链接服务器

SecureCRT通过密钥进行SSH登录 说明&#xff1a; 一般的密码方式登录容易被密码暴力破解。所以一般我们会将 SSH 的端口设置为默认22以外的端口&#xff0c;或者禁用root账户登录。其实可以通过密钥登录这种方式来更好地保证安全。 密钥形式登录的原理是&#xff1a;利用密钥…

day34 集合总结

集合总结 一、概述 作用&#xff1a;存储对象的容器&#xff0c;代替数组的&#xff0c;使用更加的便捷 所处的位置&#xff1a;java.util 体系结构 二、Collection 内部的每一个元素都得是引用数据类型 常用方法 add(Object o) 添加元素 addAll(Collection c) 将指定集…

【LeetCode周赛】LeetCode第362场周赛

LeetCode第362场周赛 与车相交的点判断能否在给定时间到达单元格将石头分散到网格图的最少移动次数 与车相交的点 给你一个下标从 0 开始的二维整数数组 nums 表示汽车停放在数轴上的坐标。对于任意下标 i&#xff0c;nums[i] [starti, endi] &#xff0c;其中 starti 是第 i…

讯飞星火认知大模型,多种应用一键体验整合

分享几个可以&#xff0c;直接可以使用的AI应用&#xff0c;依托于讯飞星火大模型实现的&#xff1b; 现在讯飞星火认知大模型&#xff0c;使用已经完全开放&#xff0c;可以直接使用&#xff1b; AI抖音商品种草文案 功能&#xff1a; 通过将商品信息输入到讯飞星火AI大模…

IntelliJ IDEA工具常用插件汇总

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;IntelliJ IDEA 、常用插件☀️每日 一言&#xff1a;人的一生其实都在偏见和走出偏见中度过 文章目录 一、前言二、Plugins1.Key Promoter X2.CodeGlance3.Git Integration&#xff1a;4.Markdow…

SpringBoot整合Mybatis-Plus(含自动配置分析)

目录 1. Mybatis-Plus介绍2. 创建Mysql表和添加测试数据3. 添加pom.xml依赖4. 自动配置分析5. 代码实现5.1 User类实现5.2 指定MapperScan扫描路径5.3 Mapper接口实现5.4 Service实现5.5 UserMapper测试 1. Mybatis-Plus介绍 Mybatis-Plus是一个Mybatis的增强工具&#xff0c;…

Rich Bowen: 无论你在创造什么,最终交付的是信任。

早在开源被我们称之为开源&#xff0c;Rich Bowen 就已经参与其中。作为 Apache 软件基金会的成员&#xff0c;Rich 目前担任董事会成员、会议副总裁。此外&#xff0c;他还是亚马逊云科技的开源策略师。这些多重角色赋予了他对开源的更广泛和深刻的理解。 在他于 2023 年 Com…

远程连接mysql报错“Host xxx is not allowed to connect to this MySQL server“解决办法

在一台服务器上安装了mysql后使用dbeaver远程连接不上报错&#xff1a; 可以看到&#xff0c;报错原因是不许远程连接到mysql服务器 所以&#xff0c;修改访问权限。 首先&#xff0c;进入mysql命令行&#xff0c;查看访问权限&#xff1a; use mysql; select user,host from…

【ProxySql】Mysql如何实现读写分离?看这一篇就够了

&#x1f332;其他工具对比 其实市面上有很多关于读写分离的优秀的工具&#xff0c;例如 工具优势劣势ProxySQL- 高性能的负载均衡和连接池管理- 支持MySQL和MariaDB- 灵活的配置和规则定义- 只支持MySQL和MariaDB数据库- 功能相对专注&#xff0c;适用性可能有限- 学习和配置…

K线学习001-早晨之星1

K线定义 早晨之星&#xff0c;顾名思义&#xff1a;就是在太阳尚未升起的时候&#xff0c;黎明前最黑暗的时刻&#xff0c;一颗明亮的启明星在天边指引着那些走向光明的夜行人&#xff0c;前途当然看好。 早晨之星&#xff0c;即预示着跌势将尽&#xff0c;大盘处于拉升的前夜&…