标签: buffer-overflow

同一程序的汇编代码输出之间的差异

我一直在尝试复制本文中的缓冲区溢出示例3 aleph one

我这样做是为了我正在参加的计算机安全课程中的一个项目的练习,所以拜托,我非常需要你的帮助。我一直在遵循这个例子,边做边执行任务。我的问题是我的计算机中转储的汇编代码gdb(我在 VM Ware 上运行的 debian linux 映像上执行此操作)与本文中的示例不同。我觉得有些结构令人困惑。

这是我电脑上的: 替代文本

这是文章中的一个...

Dump of assembler code for function main:
0x8000490 <main>:       pushl  %ebp
0x8000491 <main+1>:     movl   %esp,%ebp
0x8000493 <main+3>:     subl   $0x4,%esp
0x8000496 <main+6>:     movl   $0x0,0xfffffffc(%ebp)
0x800049d <main+13>:    pushl  $0x3
0x800049f <main+15>:    pushl  $0x2
0x80004a1 <main+17>:    pushl  $0x1
0x80004a3 <main+19>:    call   0x8000470 <function>
0x80004a8 <main+24>:    addl   $0xc,%esp
0x80004ab <main+27>:    movl   $0x1,0xfffffffc(%ebp)
0x80004b2 <main+34>:    movl   0xfffffffc(%ebp),%eax
0x80004b5 <main+37>:    pushl  %eax
0x80004b6 <main+38>:    pushl  $0x80004f8
0x80004bb <main+43>:    call   0x8000378 <printf>
0x80004c0 …
Run Code Online (Sandbox Code Playgroud)

assembly buffer-overflow

3
推荐指数
1
解决办法
8766
查看次数

缓冲区溢出调用函数

我正在学习缓冲区溢出,并发现了一个程序有点像这样的挑战:

int main() {
    do_something()
    return 0;
}

void do_something() {
    //get inputs
    printf("Did something.");
}

void do_something_else() {
    printf("Did something else.")
}
Run Code Online (Sandbox Code Playgroud)

假设 中存在缓冲区溢出do_something(),我将如何使其调用该函数do_something_else()

c buffer-overflow shellcode

3
推荐指数
2
解决办法
6563
查看次数

Vulnserver - 缓冲区溢出 NOP 字符未正确传递

我目前正在对vulnserver应用程序进行缓冲区溢出测试。用 A 的十六进制值溢出缓冲区似乎没有问题地传递到程序中。EIP 被覆盖也没有问题。但是,当我开始使用 NOP 雪橇时,在每个 NOP 值之后都会传入一个 C2 十六进制值。不知道为什么会这样。我有十六进制转储来向你展示我的意思:

在此处输入图片说明

这是我用来创建溢出的python脚本:

import socket

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

s.connect(("127.0.0.1",9999))
buff = '\x41' * 2006
shellcode = ...
nop = '\x90' * 16

#shellcode not included in this test. Trying to find out why NOP sled isn't being passed correctly.
overflow = 'TRUN .' + buff + '\x05\x12\x50\x62' + nop
s.send(overflow.encode())
Run Code Online (Sandbox Code Playgroud)

我想知道该错误是在 python 编码/发送数据包时发生的,还是仅仅是由于 vulnserver 的编写方式造成的。

python security exploit buffer-overflow

3
推荐指数
1
解决办法
2341
查看次数

使用 %d 时 fscanf 缓冲区会溢出吗?

我在ossec-hids存储库上运行了Fortify 静态代码分析器,它报告了src/analysisd/stats.c:415的以下发现:Buffer Overflow: Format String

stats.c 第 415 行的 fscanf() 的格式字符串参数没有正确限制函数可以写入的数据量,这允许程序在分配的内存范围之外写入。此行为可能会损坏数据、使程序崩溃或导致恶意代码的执行

有问题的代码行是这样的:

if (fscanf(fp, "%d", &_RWHour[i][j]) <= 0) {
Run Code Online (Sandbox Code Playgroud)

_RWHour被声明为

static int _RWHour[7][25];
Run Code Online (Sandbox Code Playgroud)

在同一文件的第 33 行。我相信第 33 行的声明和第 415 行的使用之间没有任何阴影_RWHour,因为当我选择第 33 行的声明时,我的 IDE (Visual Studio 2019)_RWHour在 415 中突出显示。

当我查看 的cppreference 文档时fscanf,它显示以下内容:

d匹配十进制整数。数字的格式与基本参数strtol值的预期相同10

我从上面引用的表格还显示,当没有使用长度修饰符时%d(如所讨论的调用的情况fscanf),参数类型应该是signed int*or unsigned int*

我的问题是这样的:

在这种情况下,Fortify 的发现有可能是误报吗?int或者,当您将 an …

c scanf buffer-overflow fortify ossec

3
推荐指数
1
解决办法
162
查看次数

自定义获取线输入功能

我正在阅读K&R的书,我有点卡住了.

以下是什么问题?

void getInput(int* output) {
   int c, i;
   for(i=0; (c = getchar()) != '\n'; i++)
     output[i] = c; // printf("%c", c) prints the c value as expected
   output[++i] = '\0';
}
Run Code Online (Sandbox Code Playgroud)

当我运行程序时,它永远不会离开循环而我必须Ctrl+C退出.但是,如果我用第五行替换printf("%c", c);,它会在输入并创建新行后打印出所有输入.

c kernighan-and-ritchie buffer-overflow

2
推荐指数
1
解决办法
943
查看次数

Valgrind给出错误,但一切似乎都很好

这个看起来像我以前的帖子的重复,但它不是.....

这里Valgrind发出以下错误:

 udit@udit-Dabba ~/mec $  valgrind --leak-check=full
 sendip -v -p ipv6 -f file.txt -6s ::1 -p esp -es 0x20 -eq 0x40
 -ei z30 -eI z100  -p tcp -ts 21 -td 21 ::2  

 ==4331== Memcheck, a memory error detector
 ==4331== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
 ==4331== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info
 ==4331== Command: sendip -v -p ipv6 -f file.txt -6s ::1 -p esp -es 0x20
 -eq 0x40 -ei z30 -eI …
Run Code Online (Sandbox Code Playgroud)

c memory valgrind memory-management buffer-overflow

2
推荐指数
1
解决办法
9558
查看次数

Damn Vulnerable Linux中缓冲区溢出的工作示例

从开始到完成缓冲区溢出漏洞,我遇到了很多麻烦.我最终得到了一个sigsegv错误,而不是预期的结果.我刚刚下载了Damn Vulnerable Linux,我从评论中看到的只是'有效教授sql注入...,否则,缓冲区溢出'.

但是我找不到DVL缓冲区溢出的任何教程或示例.有谁知道任何工作?我试过了:

http://www.damnvulnerablelinux.org/

字面上在网站上没有任何东西.

我搜索了很多,只在评论中找到了DVL.

如果有人能指出我正确的方向,我将不胜感激.特别是如果有人执行了缓冲区溢出示例iv DVL.

干杯

c security buffer-overflow linux-distro

2
推荐指数
1
解决办法
2392
查看次数

缓冲区溢出仍然存在?

我正在观看有关缓冲区溢出的大学讲座,教授最后说道

即使我们能够使用漏洞利用代码填充缓冲区并跳转到该代码,我们仍然无法执行它.

他提到的原因是:

  1. 程序员避免使用导致溢出的函数.

  2. 随机堆栈偏移:在程序开始时,在堆栈上分配随机的空间量,使得难以预测插入代码的开始.

  3. 使用技术来检测堆栈损坏.

  4. 不可执行的代码段:仅允许代码从内存的"文本"部分执行.

现在我想知道,现在缓冲区溢出攻击是否仍然存在?或者它已经过时了.

详细解答将非常感谢!

c linux security buffer-overflow

2
推荐指数
1
解决办法
1101
查看次数

缓冲区溢出后,Spawned shell会很快终止

以下是要利用的应用程序的源代码.ch13.c:

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

/*
gcc -o ch13 ch13.c -fno-stack-protector
*/


int main()
{

  int var;
  int check = 0x04030201;
  char buf[40];

  fgets(buf,45,stdin);

  printf("\n[buf]: %s\n", buf);
  printf("[check] %p\n", check);

  if ((check != 0x04030201) && (check != 0xdeadbeef))
    printf ("\nYou are on the right way !\n");

  if (check == 0xdeadbeef)
   {
     printf("Yeah dude ! You win !\n");
     system("/bin/dash");
   }
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

在shell中运行后:

python -c 'print "A"*40 + "\xef\xbe\xad\xde"'|./ch13
Run Code Online (Sandbox Code Playgroud)

它显示缓冲区内容和"是啊伙计!你赢了!" 但没有新壳.GDB显示新进程已启动但我无法与其进行交互.有没有办法与衍生的shell进行交互,以便它不会很快终止?

c linux shell buffer-overflow

2
推荐指数
1
解决办法
2543
查看次数

如何禁用可能的堆栈粉碎保护(EIP未被覆盖,EBP是)

我试图找出一步一步地进行藏匿粉碎的方法.我已经使用谷歌无济于事,我仍然不知道为什么我的EIP没有被覆盖.我有这个示例程序:

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 int main(int argc, char *argv[])
 5 {
 6     char buf[10];
 7 
 8     strcpy(buf, argv[1]);
 9     printf("Done.\n");
10     return 0;
11     
12 }
Run Code Online (Sandbox Code Playgroud)

它是用编译的

gcc -g -o prog main.c
Run Code Online (Sandbox Code Playgroud)

当我放入很多AAAAAA时,我得到SEGV和寄存器EBP(以及argc和argv地址被覆盖:

Program received signal SIGSEGV, Segmentation fault.
0x08048472 in main (argc=<error reading variable: Cannot access memory at address 0x41414141>, argv=<error reading variable: Cannot access memory at address 0x41414145>)
    at main.c:12
12  }
(gdb) info reg
eax            0x0  0
ecx            0x41414141   1094795585
edx            0xb7fbb878 …
Run Code Online (Sandbox Code Playgroud)

c x86 assembly gcc buffer-overflow

2
推荐指数
1
解决办法
1894
查看次数