首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于64位ROP的缓冲区溢出攻击

基于64位ROP的缓冲区溢出攻击
EN

Security用户
提问于 2022-11-12 17:04:22
回答 1查看 109关注 0票数 0

我面临CTF的挑战,在这个程序中,我必须使用ROP链进行如下攻击:

代码语言:javascript
复制
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include <sys/stat.h>
#include <fcntl.h>

// IGNORE
void setup() {
    setbuf(stdin, NULL);
    setbuf(stdout, NULL);
    setbuf(stderr, NULL);
}
// END IGNORE


void read_file(char* file, char* buffer) {
    int fd = open(file, O_RDONLY);
    read(fd, buffer, 0x200);
}

void main() {
    setup();

    char buffer[0x200];

    puts("can you read flag.txt");

    read_file("./flag.txt", buffer);

    gets(buffer);

    // puts(buffer);
}

我的计划是使用ROP再次调用read_file函数,然后调用out ()函数输出文件的内容。但是,虽然我在内存中的地址为“./mark.txt”字符串作为第一个参数提交,但我不知道第二个参数( char*缓冲区)使用哪个地址,甚至不知道是否可以这样做。

我的策略一开始可行吗?我是否应该尝试使用ROP小工具来调用基本库函数(读取、打开等)?如果我的策略是可行的,我应该提交什么地址/空间作为第二个参数?谢谢。

作为参考,这是我尝试提交的有效载荷,但我没有得到:

代码语言:javascript
复制
payload = b"A" * 0x200
payload += b"B" * 0x8
payload += pop_rsi_pop_r15_ret_address + p64(0x7fffffffd950) + p64(flag_txt_string_address) + read_file_address
payload += pop_rdi_ret_address + p64(0x7fffffffd950) + plt_puts_address

此外,ASLR被启用,但是PIE被禁用。

EN

回答 1

Security用户

发布于 2022-11-12 19:55:56

您可以将数据读入程序内存的.bss部分中。它是可读的和可写的,它的位置和大小是由可执行文件本身定义的,所以禁用饼图意味着它将有一个固定的地址。

请注意,其他数据也可能存储在.bss部分中,因此您可能需要在读取/写入自己的数据时添加偏移量。

票数 0
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/266322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档