0

我正在做我的学校项目“ROP on ARM vs x86”

我已经在 x86 上完成了我的工作,现在正在 ARM 上尝试“ret2zp”,我需要帮助。

请帮助这样的linux新手。


我正在关注Kumar 和 Gupta 的 ARM 'A Short Guid on ARM Exploitation' 中简单而简洁的示例

在第 41 页上,(我的声誉缺乏发布 img..sorry)

有一行
(gdb) r 'printf "AAAABBBBCCCCDDDD\x38\x84"

所以 Kumar & Gupta 试图放置 char 数组 AAAABBBBCCCCDDDD&„(带有扩展的 ascii 代码. 简单的ASCII码没有)

而且我不能用'printf'命令将我的char数组放在我的代码的参数上;

这是我使用'printf'的简单代码。

缓冲区溢出.c

#include <stdio.h>
#include <stdlib.h>

void IShouldNeverBeCalled(){
    puts("I should never be called");
    exit(0);
}

void Vulnerable(char *arg){
    char buff[10];
    strcpy(buff, arg);
}

int main(int argc, char **argv){
    Vulnerable(argv[1]);
    puts(argv[1]);
    return(0);
}

它的工作原理是

root@linaro:~# ./buffer_overflow AAAABBBB
AAAABBBB

root@linaro:~# ./buffer_overflow 'printf "A"' 
printf "A"

所以 printf 没有像我预期的那样工作。

正如 Kumar 和 Gupta 所说,我如何使用“printf”?

当我输入“'printf”\x41“'”时,我的程序如何获得参数“A”?

那是什么printf?它在 python 上起作用吗?还是它与ubuntu集成的程序?

哦,我的 ubuntu 是

root@linaro:~# cat /etc/issue
Ubuntu natty (development branch) \n \l

感谢你们对我的帮助 。

4

1 回答 1

0

您使用的是撇号'而不是反引号`。此外,文档缺少终止反引号。

但是,您应该使用更好的引号,而不是使用反引号$()

./buffer_overflow "$(printf "AAAABBBBCCCCDDDD\x38\x84")"

另请注意,他们是在 gdb 中执行此操作,而不是在 shell 中。

于 2013-10-22T21:43:32.420 回答