问题标签 [buffer-overflow]
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.
gdb - 无法设置断点
我试图获取的起始地址buf
。所以我编译了以下程序并将其加载到 gdb 中。
在拆卸时main
,我们得到: -
为了找到 buf 的起始地址,我需要查看正在加载的地址eax
。0x080483e5
当我在或设置断点时,0x080483ee
我得到以下信息。
我究竟做错了什么?为什么程序执行不在该地址处暂停?
gdb - gdb 输入文件中的十六进制值
我正在尝试通过在 gdb 中使用 run < inputfile 重定向输入(以获取)来解决 DVL 上的特定漏洞
我可以成功溢出程序,但是在将十六进制值附加到字符串时遇到问题。我尝试了引号,将 mem addr 的值转换为 ascii 和各种转义尝试(\,\,\),但没有运气
输入文件示例:AAAA\x42
在上面的示例中,反斜杠似乎被读取为 ascii char (5c) 并且值 42 保留在堆栈中(奇怪?)。
如何在 gdb 输入文件中指定一个十六进制值?
谢谢
c - 返回 libc - 问题
我遇到了 return-to-libc 漏洞利用的问题。问题是什么都没有发生,但没有分段错误(是的,我实际上溢出了堆栈)。
这是我的程序:
我使用gets而不是strcopy,因为我的地址以0x00开头,而strcpy认为它是字符串的结尾,所以我不能使用它。
以下是我需要的地址:
输入正确的序列时,会发生这种情况:
所以什么都没有。
但是如果我输入 520 'A's (0x41),那么 EIP 就会被 'A's 溢出。如果有 516 'A',则没有任何反应,但 EIP 包含系统地址,在退出地址之后,在 /bin/sh 指针之后。
为什么什么都没发生?
c - 如何找到缓冲区溢出和内存损坏的位置?
valgrind 找不到任何有用的东西。我很困惑。
症状:
- 我的数据被 malloc() 调用损坏了
- 我的函数的返回地址被错误替换
PS:代码没有段错误
目前,我通过mmap()
+替换所有 malloc() 取得了一些进展mprotect()
system - 如何在 C 中停止溢出文件描述符
我正在向 88kb 的文件描述符写入一条消息。我的 linux 系统上的文件描述符只能容纳 64kb。一旦数据被放在文件描述符上,它就会被读取并通过管道传输到 tcp 连接中。
我怎么知道我是否可以向文件描述符写入更多数据,这意味着文件描述符是空的?我需要一个函数来阻止文件描述符为空,或者至少可以返回一个值,让我知道如何安全地将数据写入文件描述符。
c - 缓冲区溢出的 C 代码问题
我正在编写一个小型 tcp echo 服务器来测试 Linux 上的缓冲区溢出。我有两个略有不同的服务器代码版本。当一个过大的缓冲区被发送到第一个缓冲区时,它会在读取函数中按预期溢出,从而导致分段错误。对于代码的第二个版本,我在接受、读取和写入函数周围添加了一个 While (1) 循环,以便服务器在正常使用下不会退出,但是当相同的缓冲区被发送到第二个服务器时,没有溢出并且服务器根本不会崩溃。我无法弄清楚为什么,代码与 while 循环相同。任何帮助将不胜感激。:)
服务器 1
服务器 2
c++ - STATUS_STACK_BUFFER_OVERRUN 与 LoadLibrary
当我使用 LoadLibrary 加载 iphlpapi.dll 时,我的堆栈缓冲区溢出!我怎么解决这个问题?!
lib 函数的加载和执行工作正常,但有时我的程序会抛出 STATUS_STACK_BUFFER_OVERRUN 异常!(某些点:当我评论字符串操作时,错误会在几行之后发生)
当我不使用 LoadLibrary 和 GetProcAddress(static binding) -> 没有缓冲区溢出!
谢谢和问候,
leon22
android - 在Android中使用缓冲区将http请求响应转换为字符串-没有得到整个响应
我正在开发一个发布到网站的应用程序,并且我正在尝试将实体响应存储为字符串。但是,该字符串似乎只包含一小部分响应,大约 35 行左右。我想知道它是否与缓冲区溢出有关,但我真的不确定。我的代码如下:
isBlankString 只记录一行是否不包含任何字符,因为响应中有很多空白行让我感到困扰。无论有没有这个,我都没有得到整个回应的问题。任何机构都知道发生了什么或如何解决这个问题?
谢谢
c - 如何在 C 中跳过执行缓冲区溢出的行
我想跳过 C 中的一行x=1;
,主要部分中的行使用bufferoverflow
; 但是,我不知道为什么我不能将地址从4002f4
下一个地址跳过4002fb
,尽管我正在计算 7 个字节<main+35>
的形式<main+42>
。
我还在 Debian 和 AMD 环境中配置了 randomniZation 和 execstack 环境的选项,但我仍然得到x=1;
. 这个程序有什么问题?
我使用 dba 来调试堆栈和内存地址:
c - 缓冲区溢出攻击格式
通常我们都会看到基本的缓冲区溢出格式:-
NOPs + shellcode + return_address
我们为什么不使用,
NOPs + return_address + shellcode?
我们将返回地址指向 shellcode 的开头?
我猜这是因为如果漏洞在 main() 中,我们可能会尝试在堆栈段之外写入数据。我对吗?如果我是,这是唯一的原因吗?
哦,是的,我不是指使用 return-to-libc、ptrace 等的其他类型的攻击;我只是想知道为什么最基本的缓冲区溢出攻击以第一种方式演示,而不是无处不在。