问题标签 [shellcode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - 直接在 RET 寄存器中使用跳转
我正在研究缓冲区溢出问题,其中输入字符串必须(显然)用我的输入字符串中的 shellcode 的地址覆盖 RET。
我研究并发现在运行时确定像这样的缓冲区的内存地址并不容易。
我还了解了相对跳跃。是否可以通过相对跳转到 shellcode 开始的堆栈(和我的字符串)的较早部分来覆盖 RET?我不知道这是否可行。
基本上它看起来像这样:./program 90909090909090/bin/sh/00RELATIVE_JUMP_HERE
显然所有这些都是机器代码,这只是为了说明我想要完成的事情。
谢谢
security - 为什么shellcode不起作用?
我正在尝试做一个缓冲流利用演示。我想使用 shell 代码来溢出堆栈并获得一个 sh 会话。我可以按照这里的教程http://www.shell-storm.org/papers/files/432.pdf甚至生成完全相同的 shellcode。但我无法让 shellcodeshellcode3.c
像教程中那样运行。我得到的总是“分段错误”。
我正在使用“Red Hat Enterprise Linux AS release 4 (Nahant Update 4)”。
我想知道有没有人用类似的方法让它工作?需要换其他系统吗?
linux - 向生成 shell 的 shellcode 添加参数
我有一些基本的shellcode:
但是可以说我想添加一些命令作为 shell 的参数。因此,例如,要创建一个新文件,我会执行类似 /bin/sh -c 'touch "filepath" 的操作,但我有点坚持如何更改我的 shellcode 来执行此操作。
谢谢, 塞巴
c - 执行指向 Shellcode 的函数指针
我正在尝试通过覆盖 main 的返回地址来执行 exit(0) 调用的这个简单操作码。问题是我遇到了分段错误。
执行导致分段错误。
这是 shellcode.a 的 Objdump
我正在使用的系统
c - 将 shellcode 声明为 char[] 数组和 char* 之间的区别?
大家好,
我正在尝试学习基本的 shellcoding,并且遇到了一些奇怪的事情,希望有人可以向我解释。我以两种方式编译了以下代码:将 shellcode 声明为数组和 char*。当我将 shellcode 声明为数组时,linux 检测到我正在尝试执行数据,并且在第一条指令上出现段错误。但是,当我将 shellcode 声明为 char* 时,所有的 shellcode 都会执行并且我得到一个“Hello world!”。编译器如何以不同的方式处理这两个声明,为什么一个以存在于不受保护的内存中的 shellcode 结尾?提前致谢。
c - 为什么在溢出 ret 地址后,作为函数参数给出的字符串的地址发生了变化?
我想通过控制堆栈来利用 C 代码段的漏洞用于教育目的。一个简单的基于堆栈的缓冲区溢出,用应该执行 shellcode 的地址覆盖返回地址。该代码是一个简单的函数,它将缓冲区作为参数并尝试strcpy()
将缓冲区调整为固定大小。从 main 给出的参数是argv[1]
. 所以我认为,如果我找到了我必须覆盖的确切内存量,那么我可以简单地将一个由\x90
(NOP 指令)组成的字符串作为输入,然后是 shellcode,最后是这个缓冲区的地址。由于这是第一个参数,它的地址是$ebp+8
,你可以通过运行找到它gdb
,在函数的开头设置一个断点,然后输入i args
为您提供作为参数传递的字符串的地址。所以我发现如果我覆盖n
字节然后给出地址的值,那么这将完全覆盖返回地址。所以我有这样的输入:
它没有用,我试图理解为什么。与gdb
我一起运行程序。strcpy()
我在函数之前放了一个断点。那时我有一个参数,它是一个指向我的输入的字符串指针,它的地址与我的字符串输入末尾给出的地址相同,我向前推进了 1 条指令。我检查了堆栈。我现在有了保存的eip
( $ebp + 4
),其末尾给出了地址的值argv[1]
,这是预期的行为(这意味着它不会覆盖 ret 地址之上的其他地址,即第一个参数的值)。奇怪的是,现在的内容$ebp+8
不是“地址”而是别的什么?但是保存的内容eip
是指向我的利用漏洞的字符串的地址。但似乎 ret addr 并没有执行该地址的内容。
security - buffer overflow example from Art of Exploitation book
I was reading this book Art of Exploitation, which is kinda good book and I run across that example from exploit_notesearch.c file.
Briefly author tries to overflow program from notesearch.c
The argument of the main function is copied to the searchstring array and if the argument is bigger than 100 bytes it will overflow the return address from the main function.
The author prepares the shellcode in exploit_notesearch.c and calls vulnerable notesearch.c
You can see that shellcode is combined with NOP sled and return address which should point to that NOP sled. The author uses address of a local variable i as a point of reference and substracts 270 bytes thus trying figure out approximate location of NOP sled.
As I understand author assumes that stackframe of the main function from vulnerable notesearch.c will be in the same stack segment as stackframe of main function from exploit_notesearch.c. I assume this because only this way this manipulation with address of the local variable i can work.
But, the author calls vulnerable notesearch.c with the help of the system() like this system(command). My point is that this function system() somewhere inside uses fork() to spawn child process and after that uses exec() function to change image of the process. But if the image is changed it means that stack segment will be fresh and all those manipulations with address of local variable i in main function in exploit_notesearch.c will be useless, but somehow this exploit works which is completely confusing for me.
c - 当我覆盖易受攻击程序的 ret 地址时,为什么会得到“找不到当前函数的边界”?
我想利用基于堆栈的缓冲区溢出来进行教育。
有一个使用来自 main 的参数调用的典型函数,该函数作为程序的输入提供给保存参数的本地缓冲区。给定这样的输入nops+shellcode+address_shellcode
,我将利用它。
在使用 gdb 调试后,我找到了 shell 代码的地址,因为它将作为参数传递,并且在strcpy
我检查堆栈之后$ebp+8
,返回地址已成功地被 shell 代码的地址覆盖。所以我有我想要的。但是当我向前执行时,我得到了:
接着
返回地址具有我想要的值。任何想法发生了什么?
此外,当我执行它时,我遇到了分段错误,我已经用-g -fno-stack-protector
. 为什么?
glibc - 使用 Glibc 2.12.1 进行堆利用
我一直在寻找没有好的结果。
我想知道在文本中解释为 Malloc Maleficarum 或 Malloc Des-Malleficarum 的技术在 glibc 版本 2.12.1 中是否有效。
在第二个提到的文本中,据说这些技术在 glibc 版本 2.7 和 2.8 中进行了测试,所以我真的不知道它们是否适用于我的 glibc 版本。我当然可以测试它们,但是,首先,只有它们自己的技术真的很难,另一方面,如果它们不起作用,我不知道是因为 glibc 版本还是我的错.
此外,我还没有发现任何实际的堆利用。而且,我也找不到通过这些 glibc 版本实现的更改。
提前致谢。
c - 理解在堆栈中执行 c 代码(Mac 黑客手册代码)
我正在查看这个示例 wrt 在堆栈中执行代码:
这会导致分段错误。我的理解是因为 shellcode 剩余字节的内存不足,因为 x 的大小只有 4 个字节。这会导致创建复制到堆栈内存的写操作并导致 seg。堆栈内存是只读的。我的理解正确吗?