标签: buffer-overflow

有没有办法绕过SSP(StackSmashing Protection)/ Propolice?

经过一些研究,我没有找到任何描述方法的论文(甚至没有一个不可靠的方法).看来SSP(StackSmashing Protection)/ Propolice

stack-overflow security buffer-overflow

6
推荐指数
1
解决办法
4675
查看次数

如何在PHP/Python中进行缓冲区溢出?

这是c中的一个例子:

#include <stdio.h>
#include <string.h>

void bad() {
    printf("Oh shit really bad~!\r\n");
}

void foo() {
    char overme[4] = "WOW";
    *(int*)(overme+8) = (int)bad;
}

int main() {
   foo();
}
Run Code Online (Sandbox Code Playgroud)

php python buffer-overflow

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

C中的内存分配

我有一个关于内存分配顺序的问题.在下面的代码中,我在循环中分配4个字符串.但是当我打印地址时,它们似乎并没有一个接一个地分配......我做错了什么,或者是OS实施的某种防御机制,以防止可能的缓冲区溢出?(我使用Windows Vista).

谢谢.

 char **stringArr;
 int size=4, i;

 stringArr=(char**)malloc(size*sizeof(char*));
 for (i=0; i<size; i++)
    stringArr[i]=(char*)malloc(10*sizeof(char));

 strcpy(stringArr[0], "abcdefgh");
 strcpy(stringArr[1], "good-luck");
 strcpy(stringArr[2], "mully");
 strcpy(stringArr[3], "stam");

 for (i=0; i<size; i++) {
  printf("%s\n", stringArr[i]);
  printf("%d  %u\n\n", &(stringArr[i]), stringArr[i]);
 }
Run Code Online (Sandbox Code Playgroud)

输出:

abcdefgh 9650064 9650128

祝你好运9650068 9638624

mully 9650072 9638680

stam 9650076 9638736

c malloc buffer-overflow windows-vista

6
推荐指数
1
解决办法
702
查看次数

如何找到缓冲区溢出和内存损坏的地方?

valgrind找不到任何有用的东西.我糊涂了.

Symptomes:

  1. 我的数据被malloc()调用破坏了
  2. 我的函数的返回地址被错误的替换

PS:代码不会出现段错误

目前我通过mmap()+ 替换所有malloc()取得了一些进展mprotect()

c valgrind buffer-overflow memory-corruption

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

缓冲区溢出 - 程序在生成shell后终止

我一直在试验FreeBSD系统上的缓冲区溢出.作为第一个实验,我试图让被利用的程序启动另一个进程(在这种情况下为/ bin/hostname).一切正常,程序打印主机名然后终止.之后我尝试让程序产生一个shell(即执行/ bin/sh).我假设这可以通过简单地交换表示要调用的程序的字符串来完成.当我尝试这个时,被利用的程序就会退出,根据gdb它确实成功生成了一个新进程(/ bin/sh).但是,没有生成shell.然后我尝试了我的第一个漏洞并将/ bin/sh文件移动到/ bin/hostname,仍然没有改变任何东西.我现在的问题是,从任何其他命令执行/ bin/sh似乎有什么不同?

作为参考,对于s​​hell生成尝试,我使用了以下shellcode:

char code[] = "\x31\xc0\x50\x68\x2f\x2f\x73\x68"
"\x68\x2f\x62\x69\x6e\x89\xe3\x50"
"\x54\x53\xb0\x3b\x50\xcd\x80";
Run Code Online (Sandbox Code Playgroud)

security assembly buffer-overflow shellcode

6
推荐指数
1
解决办法
1852
查看次数

Go容易受到缓冲区溢出的影响

我知道像c#这样的语言不容易受到缓冲区溢出的影响,除非你编组或使用不安全的代码.但是容易受到缓冲区溢出的影响吗?

buffer-overflow go

6
推荐指数
1
解决办法
3966
查看次数

在ubuntu上堆栈执行保护和随机化

作为课程作业的一部分,我需要编写一个漏洞利用代码来导致缓冲区溢出并执行堆栈中存在的代码.

我已通过以下命令关闭堆栈随机化:sysctl -w kernel.randomize_va_space = 0但是,我无法找到关闭堆栈执行保护的方法.我不确定在ubuntu中是否有一些堆栈exec保护...所以我的第一个问题是在ubuntu 8.10中是否有像red hat的exec-shield这样的东西,如果有,我们怎么能把它关掉.

我一直试图导致缓冲区溢出并从堆栈执行指令,但每当我尝试这样做时,它会给我一个seg错误.

我有ubuntu 8.10 64位,但是程序即时调试是在关闭堆栈保护的i386机器上编译的.

c stack-overflow security buffer-overflow

5
推荐指数
1
解决办法
5171
查看次数

什么是堆栈随机化,它如何防止缓冲区溢出攻击?

我从一本书中读到,缓冲区溢出可能用作注入将攻击系统的漏洞利用代码的方式。和堆栈随机化是防范此类攻击的有效途径之一。

我不明白什么是堆栈随机化及其如何防止这些攻击?

stack buffer-overflow

5
推荐指数
1
解决办法
5784
查看次数

`recv()`会导致缓冲区溢出吗?

我将自己介绍给C/C++中的套接字编程,并使用send()recv()通过TCP套接字在客户端和服务器程序之间交换数据.

以下是我的代码中的一些相关摘录:

server.c:

char recv_data[1024];

// Socket setup and so on ommited...

bytes_recieved = recv(connected, recv_data, 1024, 0);
recv_data[bytes_recieved] = '\0';
Run Code Online (Sandbox Code Playgroud)

client.c:

char send_data[1024];

// Setup ommited...

send(connected, send_data, strlen(send_data), 0);
Run Code Online (Sandbox Code Playgroud)

recv()本身是否提供任何防止缓冲区溢出的保护?例如,如果我将第3个参数更改recv()为高于recv_data(例如4000)指向的缓冲区的某个值- 这是否会导致缓冲区溢出?(我实际上尝试过这样做,但似乎无法触发段错误).

我实际上是在尝试创建一个故意易受攻击的服务器程序来更好地理解这些问题,这就是我试图溢出的原因recv().

修正案:

不无关系,将会发现为什么client.c上面会发送超过1024指定的字节数strlen(send_data).我正在使用gets(send_data)从标准输入填充该缓冲区,但如果我通过标准输入输入超过1024个字节,server.c程序显示它接收所有的字节!:).是否strlen(send_data)send()不限制发送的字节数量?

c c++ sockets buffer-overflow recv

5
推荐指数
2
解决办法
6928
查看次数

为什么我的缓冲区溢出漏洞利用只会打开用户外壳而不是根外壳?

我一直在关注一些有关缓冲区溢出利用的教程。但是我的问题是,我无法打开根外壳程序,而是总会得到一个普通的用户外壳程序。我检查了以下几点

我重新验证了以下各项,但仍然无法实现实际的root shell:

  • 我将二进制文件的所有者正确设置为root,还设置了s标志(检查)
  • 我已验证我使用的漏洞利用程序是否正常工作,使用了正确的system @ plt和exit @ plt地址,并且这些值已通过pop rdi; ret;正确加载到rdi中。段; 我毕竟得到了一个shell,但是没有得到预期的根shell;(校验)
  • 我听说如今破折号和bash确实放弃了特权,将/ bin / sh链接到/ bin / zsh会有所帮助,但这并没有帮助我;仍然获得非root shell(检查,方法对我不起作用)
  • 我还尝试在二进制文件中调用setuid(0)和seteuid(0)进行测试。仍然没有根壳;(检查,对我不起作用)
  • 我也看到有些人设置的/ proc / sys目录/内核/阎王/ ptrace_scope为0(见张贴在这里),看到张贴在这里,但事实并非如此,我(值设置为1,我从来没有感动)(支票,我的值设置为1,应该可以)
  • 我正在使用linux mint 18.1 serena,也许这里有一项附加的安全功能会丢弃特权并阻止root-shell?
  • 请参阅下面的我的C代码和利用python脚本以供参考(漏洞位于vuln()函数中);函数shell()仅具有对应@plt函数的地址可用(这仅用于练习和玩耍)
  • 我使用'gcc -fno-stack-protector -o ghost ghost.c'来编译二进制文件,以避免堆栈金丝雀

有人知道可能是什么问题吗?为什么我仍然无法获得root shell?

在此先感谢您的任何建议和提示。最好的Zaphoxx

易受攻击的C代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void shell(){
    system("/bin/sh");
    exit(0);
}
int vuln(){
    char buf[4];
    ssize_t l=0;
    printf("[+] input: ");
    l=read(0,buf,128);
    printf("[+] recv: ");
    write(1,buf,l);
    return 0;
}

int main(){
    //setbuf(stdout,0);
    setuid(0);
    seteuid(0);
    vuln();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

python利用脚本创建有效负载: …

c python exploit x86-64 buffer-overflow

5
推荐指数
1
解决办法
892
查看次数