Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(另一个)返回Libc攻击:赢得';t Segfault或返回带有恶意输入的Libc。但在GDB工作_C_Security_Buffer Overflow_Libc - Fatal编程技术网

(另一个)返回Libc攻击:赢得';t Segfault或返回带有恶意输入的Libc。但在GDB工作

(另一个)返回Libc攻击:赢得';t Segfault或返回带有恶意输入的Libc。但在GDB工作,c,security,buffer-overflow,libc,C,Security,Buffer Overflow,Libc,我想了解返回libc攻击是如何工作的,因此我编写了一个易受攻击的程序,以便将函数的返回地址更改为system()。但是,该程序似乎没有调用system(),而是干净地退出 先决条件 -我正在使用Debain挤压 -我已禁用地址随机化,包括: echo 0 > /proc/sys/kernel/randomize_va_space 易受攻击的代码 使用GDB,我断言: /bin/zsh是@0xbffff9b9 system()is@0xb7ed0000 exit()is@0xb7ec60f

我想了解返回libc攻击是如何工作的,因此我编写了一个易受攻击的程序,以便将函数的返回地址更改为
system()
。但是,该程序似乎没有调用
system()
,而是干净地退出

先决条件 -我正在使用Debain挤压

-我已禁用地址随机化,包括:

echo 0 > /proc/sys/kernel/randomize_va_space
易受攻击的代码 使用GDB,我断言:

  • /bin/zsh
    是@
    0xbffff9b9
  • system()
    is@
    0xb7ed0000
  • exit()
    is@
    0xb7ec60f0
  • 开发 我通过在
    72
    zero、exit、system和指向
    /bin/zsh
    的指针中按以下顺序使用它:

    printf "%072x\xf0\x60\xec\xb7\x00\x00\xed\xb7\xb9\xf9\xff\xbf" | ./vuln
    
    该程序不会segfault或执行
    /bin/zsh

    在GDB中 有趣的是,如果我更改
    SHELL=“/xin/zsh”
    ,并在gdb中执行它,那么系统调用将起作用:

    Cannot exec /xin/zsh
    
    因此,我的问题是:

  • 我是否正确理解了返回libc攻击的概念

  • 我是否以正确的方式和顺序传输恶意代码

  • 为什么它似乎在GDB中工作,但在shell中却不工作
    (我已经读过了)


  • 你在哪个站台?也许您需要
    -O0
    来禁用内联?它是debian squeeze x86,在virtualbox中运行。当您在gdb中运行
    时,
    bt
    在segfault之后返回什么?可能在对齐堆栈边界方面存在问题。您是否尝试过设置-mprefered stack boundary=2。。。这对于让您的漏洞发挥作用至关重要
    printf "%072x\xf0\x60\xec\xb7\x00\x00\xed\xb7\xb9\xf9\xff\xbf" | ./vuln
    
    Cannot exec /xin/zsh