标签: buffer-overflow

缓冲区溢出攻击和 ROP 攻击有什么区别?

我开始研究软件安全性,但我很难理解缓冲区溢出攻击和 ROP 攻击是什么。

据我了解,

缓冲区溢出攻击:

当缓冲区达到一定大小时,填充缓冲区并添加额外的代码,以便攻击者可以执行代码中的另一个函数或他/她自己的shellcode。

ROP攻击:

给出某个可以覆盖返回地址的输入,以便攻击者可以控制流量。

但两者之间的确切区别是什么?

我觉得两者都只是给出了过多的输入来覆盖不应该接近的区域。

例如,如果我有一个代码

  1 #include <stdio.h>
  2 
  3 void check(){
  4     printf("overflow occurs!\n");
  5 }
  6 
  7 int main(int argc, char* argv[]){
  8     char buffer[256];
  9     gets(buffer);
 10     printf("%s\n", buffer);
 11     return 0;
 12 }
Run Code Online (Sandbox Code Playgroud)

并尝试check()通过向函数提供特定输入来执行该函数gets()

这是 ROP 攻击还是缓冲区溢出攻击?

security assembly exploit buffer-overflow

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

sprintf_s 和 snprintf 有什么区别?

我在编写需要该功能的程序时遇到了这个问题sprintf

在某些情况下,使用该sprintf函数可能会导致内存溢出并带来安全风险。因此,您可以使用snprintfsprintf_s函数来避免这些风险。

但这两个函数的定义是相同的。那么,为什么存在这两个函数而不是只有一个呢?

int sprintf_s(char *_DstBuf, size_t _DstSize, const char *_Format, ...);
int snprintf(char *__restrict__ __stream, size_t __n, const char *__restrict__ __format, ...);
Run Code Online (Sandbox Code Playgroud)

一开始,我认为该sprintf_s函数是Windows库特有的,我也认为该snprintf函数是POSIX特有的。但事实上,这两个函数都包含在<stdio.h>库中。

c printf buffer-overflow

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

C#/ .Net Web浏览器是否容易受到攻击?

说.Net平台更安全是否正确,因为CLR可以防止缓冲区溢出攻击?

假设有一个在托管操作系统中运行的Web浏览器(如Cosmos,SharpOSSingularity),攻击者在技术上是否可以将IL代码注入应用程序?

我是否必须担心在非托管应用程序中无法进行的攻击?

.net c# clr exploit buffer-overflow

4
推荐指数
1
解决办法
960
查看次数

snprintf和朋友可以安全使用吗?

最近有一个关于SO的问题(为什么有人会使用strncpy而不是strcpy?),这是hade的答案(答案1,答案2),这使我不确定其他字符串函数的名字中带有'n',如snprintf(我一直在广泛使用).snprintf可以安全使用吗?一般来说,'n'家族的安全功能是什么?

c printf buffer-overflow

4
推荐指数
1
解决办法
8244
查看次数

Java和C#中的内存管理有何不同?

我正在阅读2010年CWE/SANS排名前25位最危险的编程错误,其中一个条目是缓冲区复制而不检查输入大小.它建议使用具有功能的语言来预防或缓解此问题,并说:

例如,许多执行自己的内存管理的语言(如Java和Perl)不会受到缓冲区溢出的影响.其他语言(如Ada和C#)通常提供溢出保护,但程序员可以禁用保护.

我不知道Java和C#在内存管理方面有任何有意义的不同.Java如何不受缓冲区溢出的影响,而C#只能防止溢出?如何在C#中禁用这种保护?

c# java memory-management buffer-overflow

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

强类型是否可以防止缓冲区溢出?

做强类型,在这种情况下char防止缓冲区溢出?

char a[100]
char b[100]

strcpy(a,unknownFunction); // unknownFunction could overflow b 
                           // since its length is unknown

strcpy(b,a); // can b still overflow a with its now, 
             // potentially overflowed size?
Run Code Online (Sandbox Code Playgroud)

c++ buffer-overflow

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

使用C利用备份程序

我正在做一个安全课程的任务,要求我找到备份程序(setuid)的4个漏洞,并使用它们中的每一个来获得root访问权限(在具有旧版gcc等的虚拟linux机器上).应该有一个缓冲区溢出和一个格式字符串.

谁能帮我指出4个漏洞在哪里?我认为缓冲区溢出可能发生在copyFile().

以下是backup.c的代码:(可以在"backup backup foo"或"backup restore foo"中调用)

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>

#define CMD_BACKUP 0
#define CMD_RESTORE 1

#define BACKUP_DIRECTORY "/usr/share/backup"
#define FORBIDDEN_DIRECTORY "/etc"

static
int copyFile(char* src, char* dst)
{
  char buffer[3072]; /* 3K ought to be enough for anyone*/
  unsigned int i, len;
  FILE *source, *dest;
  int c;

  source = fopen(src, "r");
  if (source == NULL) {
    fprintf(stderr, "Failed to open source file\n");
    return -1; …
Run Code Online (Sandbox Code Playgroud)

c security buffer-overflow

4
推荐指数
1
解决办法
4631
查看次数

缓冲区溢出是否发生在C++字符串中?

这与C++中的字符串有关.我很长时间没有接触过C/C++; 事实上,大约7年前,我只在大学的第一年用这些语言编程.

在C中保存字符串我必须创建字符数组(无论是静态的还是动态的,都不需要考虑).这意味着我需要提前猜出数组将包含的字符串的大小.我在C++中应用了相同的方法.我知道有一个std :: string类但我从来没有使用它.

我的问题是,因为我们从未在std :: string类中声明数组/字符串的大小,所以在写入时会发生缓冲区溢出.我的意思是,在C中,如果数组的大小是10并且我在控制台上键入了超过10个字符,那么额外的数据将被写入到与数组相邻的其他对象的内存位置.使用cin对象时,std :: string中是否会发生类似的事情.

使用std :: string时,我是否必须在C++之前猜测字符串的大小?

好!谢谢大家.这个页面上没有一个正确的答案(提供了很多不同的解释),所以我没有选择任何一个这样的答案.我很满意第一个5.小心!

c++ string buffer-overflow

4
推荐指数
3
解决办法
6322
查看次数

C缓冲区溢出

我试图让替换所有出现的功能str1在文本tstr2,但我不断收到一个"缓冲区溢出"错误消息.你能告诉我我的功能有什么问题吗?

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

//replace all *str1 in *t with *str2, put the result in *x, return *x
char * result(char *str1,char *str2,char *t)
{
    char *x=NULL,*p=t,*r=t;
    x=malloc(400*sizeof(char));
    assert(x!=NULL);
    x[0]='\0';
    r=strstr(t,str1); //r is at the first occurrence of str1 in t, p is at the beginning of t
    while(r!=NULL)
    {
        strncat(x,p,r-p); //copy r-p chars from p to x
        strcat(x,str2); //copy str2 to x
        p=r+strlen(str1); //p will be at the …
Run Code Online (Sandbox Code Playgroud)

c string char buffer-overflow

4
推荐指数
1
解决办法
449
查看次数

GDB进入断点时抛出错误

我正在尝试通过此链接跟踪有关缓冲区溢出的视频指南 ,下面是我正在尝试的代码。

#include <stdio.h>

GetInput() 
{
    char buffer[8];

    gets(buffer);
    puts(buffer);   
}

main()
{
   GetInput();       
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在gdb调试中遇到了麻烦,而在第7行进入ie时,出现以下错误:

#include <stdio.h>

GetInput() 
{
    char buffer[8];

    gets(buffer);
    puts(buffer);   
}

main()
{
   GetInput();       
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在按照与教程中所述完全相同的步骤进行操作。我在虚拟机上使用32位Kali Linux

谁能帮助我解决这个问题。

c gdb buffer-overflow

4
推荐指数
1
解决办法
677
查看次数

标签 统计

buffer-overflow ×10

c ×5

c# ×2

c++ ×2

exploit ×2

printf ×2

security ×2

string ×2

.net ×1

assembly ×1

char ×1

clr ×1

gdb ×1

java ×1

memory-management ×1