gpt4 book ai didi

linux - 为什么两种汇编 shellcode 的工作方式不同?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:41:41 24 4
gpt4 key购买 nike

我最近读了 Aleph One 的 smashing the stack for fun and profit 并且一直在看“The Shellcoder's Hanbook”。我在玩弄以下汇编代码:

section .text
global _start

_start:
jmp short GotoCall

shellcode:
pop ebx
xor eax, eax
mov [ebx + 7], al
mov [ebx + 8], ebx
mov [ebx + 12], eax
mov al, 0x0b
lea ecx, [ebx + 8]
lea edx, [ebx + 12]
int 80h

xor eax, eax
mov al, 0x01
int 80h

GotoCall:
Call shellcode
db '/bin/shJAAAAKKKK'

当我遍历 GDB 时,每次我尝试写入时都会遇到段错误:

mov [ebx + 7], al

但是,当我运行它时,我可以在没有段错误的情况下弹出一个 root shell:

section .text
global _start

_start:
xor eax, eax
push eax
push 0x68732f2f
push 0x6e69622f
mov ebx, esp
push eax
push ebx
mov ecx, esp
xor edx,edx
mov al, 0xb
int 80h

本质上他们在做同样的事情(是的,我知道他们不是真的,但我试图在两者中弹出一个 root shell)。我在 OpenSuse11.4 上运行,出于学习目的关闭了堆栈随机化 (ASLR)。有什么想法吗?

最佳答案

您已将 db '/bin/shJAAAAKKKK' 字符串放入通常不可写的 .text 部分。

如果你把它放到 .data 中,崩溃就会消失,但你必须以其他方式获取字符串的地址:它不再紧跟在 之后GotoCall 中的>CALL

关于linux - 为什么两种汇编 shellcode 的工作方式不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8116791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com