小编hen*_*ing的帖子

用于简单堆栈溢出的Shellcode:带有shell的被利用程序在execve("/ bin/sh")之后直接终止

我在Linux(amd64)上玩过缓冲区溢出并试图利用一个简单的程序,但它失败了.我禁用了安全功能(使用sysctl -w kernel.randomize_va_space = 0和bios中的nx位进行地址空间布局随机化).它跳转到堆栈并执行shellcode,但它不会启动shell.execve系统调用成功,但之后它就会终止.知道什么是错的吗?运行shellcode独立工作正常.

额外问题:为什么在调用printf之前需要将rax设置为零?(见代码中的评论)

易受攻击的文件缓冲区:

.data
.fmtsp:
.string "Stackpointer %p\n"
.fmtjump:
.string "Jump to %p\n"
.text
.global main
main:
    push %rbp
    mov %rsp, %rbp

    sub $120,  %rsp

    # calling printf without setting rax
    # to zero results in a segfault. why?
    xor %rax, %rax 
    mov %rsp, %rsi
    mov $.fmtsp, %rdi
    call printf

    mov %rsp, %rdi
    call gets

    xor %rax, %rax
    mov $.fmtjump, %rdi
    mov 8(%rbp), %rsi
    call printf

    xor %rax, %rax
    leave
    ret
Run Code Online (Sandbox Code Playgroud)

shellcode.s

.text
.global …
Run Code Online (Sandbox Code Playgroud)

security assembly buffer-overflow shellcode

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

标签 统计

assembly ×1

buffer-overflow ×1

security ×1

shellcode ×1