CTFshow-pwn入门-前置基础pwn5 - pwn12

news2024/11/15 10:03:13

pwn5-pwn12的题目全是关于汇编语言的知识,pwn5-pwn12的汇编文件的代码都是一样的。
我们将可执行文件和汇编文件托到ctfshow-pwn专用虚拟机里,给可执行文件加上执行权限并查看其信息。
在这里插入图片描述
32位的,直接扔到ida中去。
在虚拟机中使用cat命令读取下asm文件的源汇编代码。

section .data
    msg db "Welcome_to_CTFshow_PWN", 0

section .text
    global _start

_start:

; 立即寻址方式
    mov eax, 11         ; 将11赋值给eax
    add eax, 114504     ; eax加上114504
    sub eax, 1          ; eax减去1

; 寄存器寻址方式
    mov ebx, 0x36d      ; 将0x36d赋值给ebx
    mov edx, ebx        ; 将ebx的值赋值给edx

; 直接寻址方式
    mov ecx, [msg]      ; 将msg的地址赋值给ecx

; 寄存器间接寻址方式
    mov esi, msg        ; 将msg的地址赋值给esi
    mov eax, [esi]      ; 将esi所指向的地址的值赋值给eax

; 寄存器相对寻址方式
    mov ecx, msg        ; 将msg的地址赋值给ecx
    add ecx, 4          ; 将ecx加上4
    mov eax, [ecx]      ; 将ecx所指向的地址的值赋值给eax

; 基址变址寻址方式
    mov ecx, msg        ; 将msg的地址赋值给ecx
    mov edx, 2          ; 将2赋值给edx
    mov eax, [ecx + edx*2]  ; 将ecx+edx*2所指向的地址的值赋值给eax

; 相对基址变址寻址方式
    mov ecx, msg        ; 将msg的地址赋值给ecx
    mov edx, 1          ; 将1赋值给edx
    add ecx, 8          ; 将ecx加上8
    mov eax, [ecx + edx*2 - 6]  ; 将ecx+edx*2-6所指向的地址的值赋值给eax

; 输出字符串
    mov eax, 4          ; 系统调用号4代表输出字符串
    mov ebx, 1          ; 文件描述符1代表标准输出
    mov ecx, msg        ; 要输出的字符串的地址
    mov edx, 22         ; 要输出的字符串的长度
    int 0x80            ; 调用系统调用

; 退出程序
    mov eax, 1          ; 系统调用号1代表退出程序
    xor ebx, ebx        ; 返回值为0
    int 0x80            ; 调用系统调用

ida反编译结果:

void __noreturn start()
{
  int v0; // eax
  int v1; // eax

  v0 = sys_write(1, &dword_80490E8, 0x16u);
  v1 = sys_exit(0);
}

pwn5

在这里插入图片描述
运行文件计科输入flag,有这好事必须占便宜!
在这里插入图片描述
按照题目描述:flag为 ctfshow{Welcome_to_CTFshow_PWN}。

pwn6

在这里插入图片描述
这道题问的是立即寻址结束后eax寄存器的值为多少?
那我们先看一下立即寻址的时候的汇编代码。

; 立即寻址方式
    mov eax, 11         ; 将11赋值给eax
    add eax, 114504     ; eax加上114504
    sub eax, 1          ; eax减去1

mov eax,11这条汇编指令就是将11这个数值放到eax寄存器中,跟eax=11差不多。
OK,此时eax寄存器的值为11。
add eax,114504这条汇编指令是将eax中的内容加上114504,跟eax = eax+114504差不多,此时eax寄存器的值为114515
sub eax,1这条汇编指令是将eax中的内容减去1,相当于eax = eax-1,此时eax寄存器的置为114514。
所以本题flag为ctfshow{114514} 。

pwn7

在这里插入图片描述
本题问的是寄存器寻址方式结束后edx寄存器的值为多少?
寄存器寻址方式的汇编代码:

; 寄存器寻址方式
    mov ebx, 0x36d      ; 将0x36d赋值给ebx
    mov edx, ebx        ; 将ebx的值赋值给edx

mov ebx,0x36d这条汇编指令是将0x36d赋给ebx,此时ebx寄存器的值为0x36d,edx寄存器的值未知。
mov edx,ebx这条汇编指令是将ebx寄存器中的值赋给edx,此前ebx的值为0x36d,所以此条指令执行后,edx寄存器中的值为0x36d。
所以本题的flag为:ctfshow{0x36D}注意这的D要大写哦。

pwn8

在这里插入图片描述
本题问的直接寻址方式结束后ecx寄存器的值为多少?
找到直接寻址方式的相关汇编代码:

; 直接寻址方式
    mov ecx, [msg]      ; 将msg的地址赋值给ecx

只有一句指令,mov ecx,[msg] 将msg的地址赋给ecx,所以本条代码执行过后,ecx寄存器中的值为msg的地址。
那么msg的地址怎么获得呢?
我们可以将可执行文件丢进ida中
在这里插入图片描述
dword_80490E8其实就是[msg],我们点击dword_80490E8跟进就可以看到其地址了。
在这里插入图片描述
这个080490E8就是msg的地址。
所以本题的flag为:ctfshow{0x80490E8}
记得要加0x,代表是16进制,因为二进制代码的地址都是以16进制存储的,记得前面的080490E8的第一个0也要去掉哦。

pwn9

在这里插入图片描述
本题问的是寄存器间接寻址方式结束后eax寄存器的值为多少?
找到寄存器间接寻址方式的相关汇编代码:

; 寄存器间接寻址方式
    mov esi, msg        ; 将msg的地址赋值给esi
    mov eax, [esi]      ; 将esi所指向的地址的值赋值给eax

mov esi,msg本条代码是将msg的地址赋值给esi,此时esi寄存器的值也就是上道题目的080490E8。
mov eax,[esi]本条代码是将esi中的值作为地址,然后将该地址单元的值赋给eax,即找到080490E8地址单元中的值赋给eax,我们在ida可以查看080490E8地址单元的值。
在这里插入图片描述
那么080490E8地址单元中的值就为:636C6557h,后面的h表示给数值是16进制。所以本条代码执行后eax寄存器中的值就为636C6557h。
所以本题的flag为:ctfshow{0x636C6557} 。

pwn10

在这里插入图片描述
本题问的是寄存器相对寻址方式结束之后eax寄存器的值为多少?
找到寄存器相对寻址方式相关的汇编代码:

; 寄存器相对寻址方式
    mov ecx, msg        ; 将msg的地址赋值给ecx
    add ecx, 4          ; 将ecx加上4
    mov eax, [ecx]      ; 将ecx所指向的地址的值赋值给eax

mov ecx.msg这条代码是将msg的地址赋给ecx,此时ecx寄存器中的值就是pwn8题目的flag值080490E8。
add ecx,4这条代码是将ecx寄存器中的值加4,即ecx = ecx+4,此时ecx寄存器中的值为080490EC。
mov eax,[ecx]这条代码是以ecx寄存器中的值作为地址,将该地址单元中的值赋给eax。
从ida中找到080490EC地址单元中的值。
在这里插入图片描述
所以,本条代码执行后eax寄存器的值为ome_to_CTFshow_PWN。
所以,本题的flag为:ctfshow{ome_to_CTFshow_PWN}

pwn11

在这里插入图片描述
本题问的是基址变址寻址方式结束后的eax寄存器的值为多少?
找到基址变址寻址方式相关的代码:

; 基址变址寻址方式
    mov ecx, msg        ; 将msg的地址赋值给ecx
    mov edx, 2          ; 将2赋值给edx
    mov eax, [ecx + edx*2]  ; 将ecx+edx*2所指向的地址的值赋值给eax

mov ecx,msg还是将msg的地址赋给ecx,即ecx寄存器中的值为pwn8的flag:080490E8。
mov edx,2本条代码是将2这个数值赋给edx,即edx寄存器中的值为2。
mov eax,[ecx+edx*2]本条代码是以ecx+edx*2作为地址,将该地址单元中的值赋给eax。我们先来看ecx+edx*2是多少。
ecx=080490E8,edx=2,edx*2 = 4,故ecx+edx*2 = 080490EC,这不跟上到题目的地址一样嘛,所以本条代码执行后也是ome_to_CTFshow_PWN。
在这里插入图片描述
所以本题的flag为:ctfshow{ome_to_CTFshow_PWN}

pwn12

在这里插入图片描述
本题问的是相对基址变址寻址方式结束后eax寄存器的值为多少?
找到相对基址变址寻址方式相关的代码:

; 相对基址变址寻址方式
    mov ecx, msg        ; 将msg的地址赋值给ecx
    mov edx, 1          ; 将1赋值给edx
    add ecx, 8          ; 将ecx加上8
    mov eax, [ecx + edx*2 - 6]  ; 将ecx+edx*2-6所指向的地址的值赋值给eax

mov ecx,msg这条代码还是将msg的地址赋给ecx,此时ecx寄存器中的值还是pwn8题目的flag:080490E8
mov edx,1这条代码是将1这个数值赋给edx,此时edx寄存器的值为1。
add ecx,8这条代码是将ecx寄存器的值加8,即ecx = ecx+8,此时ecx寄存器的值为080490F0(16进制运算啊)。
mov eax,[ecx + edx*2 - 6] 这条代码是以ecx+edx*2-6的值作为地址,将该地址单元中的值赋给eax。
ecx = 080490F0,edx*2-6 = 1*2-6=-4,ecx + edx*2-6=080490F0-4=080490EC
在这里插入图片描述
所以代码执行后,eax寄存器的值为ome_to_CTFshow_PWN。
则本题的flag为:ctfshow{ome_to_CTFshow_PWN}

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

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

相关文章

SpringBoot的配置文件

SpringBoot的配置文件 🔎配置文件的作用🔎配置文件的格式🔎properties配置文件properties的基本语法读取配置文件 🔎yml配置文件yml的基本语法读取配置文件Tips关于 \n🍭配置对象🍭配置集合🍭 &…

网络知识点之-DNS协议

域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。当前,对于每一级域名长度的限制是63个…

4.13 ReentrantLock

相对于 synchronized 它具备如下特点 可中断可以设置超时时间可以设置为公平锁支持多个条件变量 与 synchronized 一样,都支持可重入 基本语法// 获取锁reentrantLock.lock();try{// 临界区} finally{// 释放锁reentrantLock.unlock();}1、可重入 可重入是指同一个…

小程序 抽象节点 selectable 与slot区别

比较 了解了微信小程序的抽象节点组件封装方式之后,觉得与vue的slot使用类似,但也有些区别 : 抽象节点 和 slot 有什么不同: slot只需要你传入一段代码抽象节点需要你传入一个自定义组件,,不是让你只传递…

Kubernetes集群本地连接调试工具KtConnect

一、简介 KtConnect(Kt为Kubernetes Toolkit集群工具包的简写)是一款基于Kubernetes环境用于提高本地测试联调效率的小工具 Connect:建立数据代理通道,实现本地服务直接访问Kubernetes集群内网(包括Pod IP和Service域…

Jetpack Compose教程-水位控制小部件

Jetpack Compose教程-水位控制小部件 Apple的应用程序和小部件一直是设计的典范,也给我们的"复制系列:活动应用"和"卡片应用"提供了灵感。当他们发布了新款苹果手表Ultra时,它里面深度测量小部件的设计引起了我们的兴趣&…

加快奔向“国际数字之都” CDEC2023中国数字智能生态大会走进上海

数智闪耀长三角,风云际会上海滩。 6月14日上午,以汇聚数字产业动能、打造区域合作为主旨的 CDEC2023中国数字智能生态大会上海站活动在浦东软件园创新体验中心举行。 大会以“共建AI智能生态”为主题,吸引致远互联、SAP、浪潮等龙头企业&…

2022年山东省职业院校技能大赛网络搭建与应用赛项网络搭建与安全部署服务器配置及应用

2022年山东省职业院校技能大赛 网络搭建与应用赛项 第二部分 网络搭建与安全部署&服务器配置及应用 竞赛说明: 一、竞赛内容分布 竞赛共分二个模块,其中: 第一模块:网络搭建及安全部署项目 第二模块:服务器…

C#里的var和dynamic区别到底是什么,你真的搞懂了嘛

前言 这个var和dynamic都是不确定的初始化类型,但是这两个本质上的不同。不同在哪儿呢?var编译阶段确定类型,dynamic运行时阶段确定类型。这种说法对不对呢?本篇看下,文章原文地址:在这里 概括 以下详细叙述下这两个(var,dynamic…

CVE-2023-33246命令执行复现分析

简介 RocketMQ是一款低延迟、高并发、高可用、高可靠的分布式消息中间件。既可为分布式应用系统提供异步解耦和削峰填谷的能力&#xff0c;同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠重试等特性。 影响版本 <RocketMQ 5.1.0 <RocketMQ 4.9.5 环境搭建 docker…

Leetcode 剑指 Offer II 031. 最近最少使用缓存

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 运用所掌握的数据结构&#xff0c;设计和实现一个 LRU (Least Re…

Python 类型检测:isinstance() 与 type()

文章目录 参考描述面向对象编程概念类与实例继承super() 与代理对象方法的自动继承属性的继承 isinstance 与 type 内置函数isinstance()可迭代对象仅能为元组可能产生的 TypeError嵌套的元组 typeisinstance() 与 type() 的区别 参考 项目描述Python 官方文档https://docs.py…

【C语言初阶】分支语句If与switch的具体用法,有这篇博客就够了

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,这里是君兮_,今天又来给大家更新0基础学习C语言中的文章啦&#xff01; 今天带来的是对分支语句的详解&#xff0c;初学者建议先看看总集哦, 这里是链接: 【C语言初阶】万字解析,带你0基础快速入门C语言(上) 【C语…

图片转excel表格算法之霍夫变换法原理浅析

大家伙都知道&#xff0c;图片转excel表格是金鸣识别中一项非常重要的功能&#xff0c;金鸣识别的OCR在识别图片中的表格时&#xff0c;会用到一种叫霍夫变换法的算法&#xff0c;那这个算法到底是怎么回事&#xff1f;它的原理又是什么呢&#xff1f; 一、霍夫变换法的概念 …

深入了解模板知识(c++)

前言 在c中模板是很重的&#xff0c;泛型编程就是模板最好的体现&#xff0c;模板的出现就是为了更好的复用代码&#xff0c;有了它&#xff0c;我们不必写各种逻辑相同只是逻辑中的数据的类型的不同的代码&#xff0c;使得我们编写代码变得更加高效&#xff0c;下面让我们一起…

若依权限系统分析(前后端分离版)

若依权限系统分析 一&#xff1a;故事背景二&#xff1a;具体权限控制2.1 页面权限控制2.2 页面元素权限控制 三&#xff1a;实现前端鉴权3.1 封装js与权限交互3.1.1 uni-app自带uni-request与权限交互 3.2 vux状态管理3.2.1 自定义状态3.2.2 在vuex的store配置内添加我们新增的…

rust切片

这里s的不可变引用借用给了wordIndex&#xff0c;而s.clear()又想用可变引用&#xff0c;所以报错。而第一个例子中返回的usize并没有返回不可变引用。

客户端负载均衡工具Ribbon

一 什么是Ribbon Ribbon介绍 目前主流的负载方案分为以下两种&#xff1a; 集中式负载均衡&#xff0c;在消费者和服务提供方中间使用独立的代理方式进行负载&#xff0c;有硬件的&#xff08;比如 F5&#xff09;&#xff0c;也有软件的&#xff08;比如 Nginx&#xff09;…

Ubuntu系统中分布式安装配置HBase-2.3.7

HBase是一个基于Hadoop的分布式列式数据库&#xff0c;可以存储海量的结构化和半结构化数据。本文介绍如何在三个Ubuntu系统上搭建一个HBase集群&#xff0c;并进行简单的数据操作。 在三个Ubuntu系统上分布式安装配置HBase-2.3.7&#xff0c;主要步骤包括&#xff1a; 准备工…

MySQL的执行原理

一、单表访问之索引合并 我们前边说过MySQL在一般情况下执行一个查询时最多只会用到单个二级索引&#xff0c;但存在有特殊情况&#xff0c;在这些特殊情况下也可能在一个查询中使用到多个二级索引&#xff0c;MySQL中这种使用到多个索引来完成一次查询的执行方法称之为&#…