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

CTF-PWN: WEB_and_PWN [第一届“吾杯”网络安全技能大赛 Calculator] 赛后学习(不会)

附件

calculate.html

<!DOCTYPE html>
<html lang="en">
<head><!-- 设置字符编码为 UTF-8,支持多语言字符集 --><meta charset="UTF-8"><!-- 设置响应式视图,确保页面在不同设备上自适应显示 --><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- 网页标题,显示在浏览器标签栏 --><title>Calculation Result</title>
</head>
<body><!-- 页面主标题 --><h1>Calculation Result</h1><!-- 显示计算结果的段落,默认显示 'Loading...' --><p id="result">Loading...</p><!-- 返回计算器页面的链接 --><a href="/index.html">Back to Calculator</a>
</body>
</html>

index.html

<!DOCTYPE html>
<html lang="en">
<head><!-- 设置字符编码为 UTF-8,支持多语言字符集 --><meta charset="UTF-8"><!-- 设置响应式视图,确保页面在不同设备上自适应显示 --><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- 网页标题,显示在浏览器标签栏 --><title>Calculator</title>
</head>
<body><!-- 页面主标题 --><h1>Simple Calculator</h1><!-- 表单用于计算操作,提交方式为 GET 请求 --><form action="/calculate.html" method="get"><!-- 输入框:第一个数字,带有标签 --><label for="a">Number 1:</label><input type="number" id="a" name="a" required><br><br><!-- 输入框:第二个数字,带有标签 --><label for="b">Number 2:</label><input type="number" id="b" name="b" required><br><br><!-- 下拉框:选择运算符,支持加法、减法、乘法和除法 --><label for="op">Operation:</label><select id="op" name="op" required><option value="+">+</option><option value="-">-</option><option value="*">*</option><option value="/">/</option></select><br><br><!-- 提交按钮,触发计算操作 --><button type="submit">Calculate</button></form>
</body>
</html>

保护

❯ checksec --file=./pwn
[*] '/home/a5rz/Desktop/pwn/file/pwn'Arch:       amd64-64-littleRELRO:      Full RELROStack:      No canary foundNX:         NX unknown - GNU_STACK missingPIE:        PIE enabledStack:      ExecutableRWX:        Has RWX segmentsSHSTK:      EnabledIBT:        Enabled

sudo运行

❯ sudo ./pwn
Server started on port 80

此html向服务器发送了这样的东西

D:/calculate.html?a=1&b=1&op=%2B

a是数字1,b是数字2,op是选择加减乘除

请添加图片描述

找到调用Page not found!的地方

__int64 __fastcall sub_1843(unsigned int a1, const char *a2) {// 本地变量定义,用于存储各种数据size_t v3; // 用于存储缓冲区的长度size_t v4; // 用于存储 HTTP 响应的长度size_t v5; // 用于存储 HTTP 错误响应的长度size_t v6; // 用于存储页面未找到的响应长度char s[512]; // 用于存储处理过的查询字符串char buf[256]; // 用于存储 HTTP 响应内容char nptr[32]; // 用于存储第一个参数(a)char v10; // 用于存储操作符(+、-、*、/)char v11[47]; // 用于存储第二个参数(b)char v12; // 用于存储操作符__int64 v13; // 用于存储第一个数字(a)__int64 v14; // 用于存储第二个数字(b)char *v15; // 用于指向查询字符串中的位置__int64 v16; // 用于存储计算结果// 判断请求的 URL 是否是“GET /index.html”或“GET / ”,如果是,则返回一个 HTML 文件if ( !strncmp(a2, "GET /index.html", 0xFuLL) || !strncmp(a2, "GET / ", 6uLL) ) {return sub_1532(a1, "index.html");}// 如果请求 URL 是“GET /calculate.html?”,则进一步处理计算逻辑if ( !strncmp(a2, "GET /calculate.html?", 0x14uLL) ) {// 找到查询字符串("?" 后面的部分)v15 = strchr(a2, 63); // 63 是 "?" 的 ASCII 值if ( v15 ) {// 从查询字符串开始处提取数据snprintf(s, 0x200uLL, "%s", ++v15); // 复制查询字符串到 ssub_1744(s); // 可能是对字符串 s 进行某些处理(具体实现不明)// 清空缓存nptr[0] = 0;v11[0] = 0;v10 = 0;// 解析查询字符串中的参数if ( (unsigned int)__isoc99_sscanf(s, "a=%31[^&]&b=%31[^&]&op=%256s", nptr, v11, &v10) == 3 ) {// 将参数转换为整数v14 = atoll(nptr); // 将第一个参数(a)转换为长整型v13 = atoll(v11); // 将第二个参数(b)转换为长整型v12 = v10; // 将操作符保存到 v12v16 = 0LL; // 默认结果为 0// 根据操作符执行相应的计算if ( v10 == 43 ) { // 如果操作符是 "+",进行加法v16 = v14 + v13;} else if ( v12 == 45 ) { // 如果操作符是 "-",进行减法v16 = v14 - v13;} else if ( v12 == 42 ) { // 如果操作符是 "*",进行乘法v16 = v13 * v14;} else if ( v12 == 47 && v13 ) { // 如果操作符是 "/" 且第二个数不为零,进行除法v16 = v14 / v13;} else {v16 = 0LL; // 如果操作符无效,结果为 0}// 生成成功响应,包含计算结果snprintf(buf, 0x100uLL, "HTTP/1.1 200 OK\r\n""Content-Type: text/html\r\n""\r\n""<!DOCTYPE html><html><head><title>Result</title></head><body><h1>Result: %lld</h1><a href=\"/index.html\">Back"" to Calculator</a></body></html>", v16);// 获取响应内容的长度v3 = strlen(buf);// 发送响应send(a1, buf, v3, 0);return sub_1679(v16); // 可能是处理计算结果的函数(具体实现不明)} else {// 如果查询参数不正确,返回 400 错误响应snprintf(buf, 0x100uLL, "HTTP/1.1 400 Bad Request\r\n\r\nInvalid query!");v4 = strlen(buf);return send(a1, buf, v4, 0);}} else {// 如果没有查询字符串,返回 400 错误响应snprintf(buf, 0x100uLL, "HTTP/1.1 400 Bad Request\r\n\r\nMissing query!");v5 = strlen(buf);return send(a1, buf, v5, 0);}} else {// 如果请求的 URL 不匹配,返回 404 错误响应snprintf(buf, 0x100uLL, "HTTP/1.1 404 Not Found\r\n\r\nPage not found!");v6 = strlen(buf);return send(a1, buf, v6, 0);}
}

加上calculate.html

请添加图片描述

patch反调试!(这东西卡了我好久,没注意他,我一直以为调试不上是gdb的问题)

请添加图片描述

发现一个非常奇怪的函数

__int64 __fastcall sub_1679(__int64 a1)
{// 定义一个指向无参函数返回__int64类型的指针 v2__int64 (*v2)(void); // [rsp+28h] [rbp-8h]// 调用 mmap 函数映射一个 8 字节的内存区域// mmap(0LL, 8uLL, 7, 34, -1, 0LL) 中的参数:// 0LL        - 映射地址从操作系统自动选择// 8uLL       - 映射的大小为 8 字节// 7          - 映射保护标志 (PROT_READ | PROT_WRITE)// 34         - 映射映射类型(MAP_ANONYMOUS | MAP_PRIVATE)// -1         - 不关联任何文件(-1 表示匿名映射)// 0LL        - 映射偏移量为 0v2 = (__int64 (*)(void))mmap(0LL, 8uLL, 7, 34, -1, 0LL);// 检查 mmap 是否成功,如果返回值为 -1,表示映射失败if (v2 == (__int64 (*)(void))-1LL){perror("mmap failed"); // 输出错误信息exit(1); // 退出程序,返回错误代码 1}// 将传入的参数 a1 存储在映射区域的起始位置*(_QWORD *)v2 = a1;// 调用映射区域开始处的函数并返回其结果// v2 是一个指向函数的指针,因此 v2() 表示调用此函数并返回其返回值return v2(); // 调用并返回函数指针 v2 指向的函数结果
}

再加上栈可执行,估计出题人是想让我们利用这里,这个函数能执行任意指针

跟上一道题一样不给基地址?这题到底怎么做的爆破吗?

相关文章:

CTF-PWN: WEB_and_PWN [第一届“吾杯”网络安全技能大赛 Calculator] 赛后学习(不会)

附件 calculate.html <!DOCTYPE html> <html lang"en"> <head><!-- 设置字符编码为 UTF-8&#xff0c;支持多语言字符集 --><meta charset"UTF-8"><!-- 设置响应式视图&#xff0c;确保页面在不同设备上自适应显示 --&…...

【数据结构与算法】排序算法(上)——插入排序与选择排序

文章目录 一、常见的排序算法二、插入排序2.1、直接插入排序2.2、希尔排序( 缩小增量排序 ) 三、选择排序3.1、直接选择排序3.2、堆排序3.2.1、堆排序的代码实现 一、常见的排序算法 常见排序算法中有四大排序算法&#xff0c;第一是插入排序&#xff0c;二是选择排序&#xff…...

Linux操作系统性能优化

Linux操作系统性能优化 1. TCP连接出现大量ESTABLISHED连接解决方法 1. TCP连接出现大量ESTABLISHED连接解决方法 TCP协议规定&#xff0c;对于已经建立的连接&#xff0c;网络双方要进行四次握手才能成功断开连接&#xff0c;如果缺少了其中某个步骤&#xff0c;将会使连接处于…...

iOS与Windows间传文件

想用数据线从 windows 手提电脑传文件入 iPhone&#xff0c;有点迂回。 参考 [1]&#xff0c;要在 windows 装 Apple Devices。装完、打开、插线之后会检测到手机&#xff0c;界面&#xff1a; 点左侧栏「文件」&#xff0c;不是就直接可以传&#xff0c;而是要通过某个应用传…...

在数据库设计中同步冗余字段的思考与实践

目录 前言1. 冗余字段设计的背景与场景1.1 场景描述1.2 冗余字段的必要性 2. 冗余字段设计的优点2.1 提高查询效率2.2 简化应用逻辑 3. 冗余字段设计的缺点与挑战3.1 数据不一致问题3.2 更新开销增加3.3 数据冗余占用存储空间 4. 如何同步更新冗余字段4.1 手动更新方式4.2 使用…...

Qt 带数据库功能的项目部署之后,数据库无法打开问题解决方法

前言&#xff1a;最近项目添加了sqlite数据库功能&#xff0c;在qtcreator直接运行时&#xff0c;打开数据库正常&#xff0c;但是部署之后&#xff0c;发现数据库打开会失败&#xff0c;提示“driver not loaded”错误&#xff0c;后来发现是因为sqldrivers文件夹目录不对导致…...

汇编语言学习-二

好吧&#xff0c;已经隔了两天&#xff0c;下完班看了两天&#xff0c;在电脑上装了虚拟机版的MS_DOS,主要是怕折腾坏我的电脑系统&#xff1b; 这个第二天应该是称为第二章更为合适&#xff0c;目前第二章已经看完&#xff0c;基本的命令也是敲了敲&#xff1b; 下面就进行一…...

【嘟嘟早教卡】 小程序源码分享带后台管理

【嘟嘟早教卡】是专门为 3-6 岁婴幼儿童学习普通话、英语研发的早教启蒙认知识字的小程序 小程序由 Taro 及 Tailwind CSS 构建而成&#xff0c;后台管理使用 Laravel 及 Tailwind CSS 想法源于小时候玩的认知卡片&#xff0c;基本大部分家庭都买过认知卡片&#xff0c;我按照…...

JavaEE-经典多线程样例

文章目录 单例模式设计模式初步引入为何存在单例模式饿汉式单例模式饿汉式缺陷以及是否线程安全懒汉式单例模式基础懒汉式缺陷以及是否线程安全懒汉式单例模式的改进完整代码(变量volatile) 阻塞队列生产者消费者模型生产者消费者模型的案例以及优点请求与响应案例解耦合削峰填…...

从 HTML 到 CSS:开启网页样式之旅(五)—— CSS盒子模型

从 HTML 到 CSS&#xff1a;开启网页样式之旅&#xff08;五&#xff09;—— CSS盒子模型 前言一、盒子模型的组成margin&#xff08;外边距&#xff09;&#xff1a;border&#xff08;边框&#xff09;&#xff1a;padding&#xff08;内边距&#xff09;&#xff1a;conten…...

数据分析(一): 掌握STDF 掌握金钥匙-码农切入半导体的捷径

中国的半导体行业必然崛起&#xff01;看清这个大势&#xff0c;就会有很多机会。 今天&#xff0c;我们一起来了解一下半导体行业的一朵金花&#xff1a;STDF。 实际上这只是一种文件格式&#xff0c;但是当你熟练掌握解析这种文件的时候&#xff0c;你就已经打开在这个基础…...

HCIA-openGauss_1_4基本功能介绍

openGauss支持标准SQL SQL是用于访问和处理数据库的标准计算机语言&#xff0c;SQL标准的定义分成核心特性以及可选特性&#xff0c;绝大部分的数据库都没有100%支撑SQL标准。openGuass支持SQL2003标准语法&#xff0c;支持主备部署的高性能可用关系型数据库。openGauss数据库…...

医学临床机器学习中算法公平性与偏差控制简析

摘要 随着医疗领域中数据的不断积累和计算能力的提升&#xff0c;临床机器学习技术发展迅速&#xff0c;但算法不公平性和偏差问题凸显。本文深入探讨了临床机器学习算法公平性的重要性、概念与定义、在临床应用中的影响、偏差来源、降低偏差方法及提升公平性策略。通过对不同…...

Leetcode打卡:棋盘上有效移动组合的数目

执行结果&#xff1a;通过 题目&#xff1a;2056 棋盘上有效移动组合的数目 有一个 8 x 8 的棋盘&#xff0c;它包含 n 个棋子&#xff08;棋子包括车&#xff0c;后和象三种&#xff09;。给你一个长度为 n 的字符串数组 pieces &#xff0c;其中 pieces[i] 表示第 i 个棋子的…...

生产看板到底在看什么?

说起生产看板&#xff0c;可能很多人脑海里冒出来的画面是&#xff1a;车间里一块挂在墙上的大板子&#xff0c;上面贴满了各式各样的卡片、表格&#xff0c;甚至还有几个闪闪发光的指示灯。但是&#xff0c;无论是精益生产方式代表——丰田&#xff0c;还是当下以“智能制造”…...

12,攻防世界simple_php

simple_php 题目来源:Cyberpeace-n3k0 题目描述: 小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。 进入靶场 这段PHP代码是一个简单的web应用示例&#xff0c;让我们逐步分析这段代码&#xff1a; show_source(__FILE__);&#xff1a;这行代码会显示当前文件的…...

解决Jupyter Notebook无法转化为Pdf的问题(基于Typora非常实用)

笔者在完成各项作业和做笔记时&#xff0c;经常用到jupyter notebook&#xff1b;其因为可以同时运行python并提供格式化的数字公式的输入方式&#xff0c;得到了广大用户的喜爱。 当我们想要将.ipynb文件导出为pdf时&#xff0c;有两种常用方法。 1.Ctrlp 2.通过File ->…...

齐护机器人ModbusRTU RS485转TTL通信模块与ESP32 Arduino通信可Mixly的图形化编程Scratch图形化编程

齐护机器人ModbusRTU RS485-TTL通信模块 一、概念理解 Modbus协议是一种由Modicon公司&#xff08;现为施耐德电气Schneider Electric&#xff09;于1979年发表的网络通信协议&#xff0c;旨在实现可编辑逻辑控制器&#xff08;PLC&#xff09;之间的通信。 1.1 什么是Mod…...

python学习笔记15 python中的类

上一篇我们介绍了python中的库 &#xff0c;学习了一些常见的内置库。详细内容可点击–>python学习笔记14 python中的库&#xff0c;常见的内置库&#xff08;random、hashlib、json、时间、os&#xff09; 这一篇我们来看一下python中的类 创建一个类 class 类的名称():de…...

PMP–一、二、三模、冲刺–分类–10.沟通管理

文章目录 技巧十、沟通管理 一模10.沟通管理--1.规划沟通管理--文化意识--军事背景和非军事背景人员有文化差异5、 [单选] 项目团队由前军事和非军事小组成员组成。没有军事背景的团队成员认为前军事团队成员在他们的项目方法中过于结构化和僵化。前军事成员认为其他团队成员更…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...