반응형

참고


해당 소스코드를 아래와 같이 컴파일한다.

shell_basic 실행 후 AAAAA 문자열 입력했는데 Segmentation Fault를 보여주면서 메모리 접근 오류가 발생하였다.

Flag는 /home/shell_basic/flag_name_is_loooooong 경로에 있는 것을 알 수 있다.

위에 코드 설명
| 0x30 | 16진수 30 = 48(10진수) | 보통 flag 길이 이하 |
| read(fd, buf, 0x30) | fd에서 최대 48바이트 읽기 | 읽은 크기 반환 |
| write(1, buf, 0x30) | stdout에 48바이트 출력 | 실제 읽은 크기만큼 써야 안전 |
write(1, buf, 0x30) 설명
| 0 | STDIN_FILENO | 표준 입력 | 키보드 |
| 1 | STDOUT_FILENO | 표준 출력 | 화면(콘솔) |
| 2 | STDERR_FILENO | 표준 에러 | 화면(콘솔) |
/home/shell_basic/flag_name_is_loooooong 16진수 코드 확인

위에 코드를 Assembly 코드로 변환

Assembly 코드를 확인할 수 있다.

- nasm(Netwide Assembler) 명령어가 Assembly.asm 어셈블리 파일을 64-bit ELF 객체 파일(Assembly.o)로 어셈블한다.
- objcopy(GNU binutils)로 Assembly.o 내부의 .text 섹션(실행 코드)만 추출해서 Assembly.bin 이라는 순수한 바이너리 바이트 파일로 저장한다.
- xxd는 파일의 내용을 헥사(16진수) 덤프하고 오른쪽에 ASCII(출력 가능한 문자는 그대로)도 함께 보여준다.

exploit 소스코드
shellcraft(pwntools의 어셈블러 도우미)로 open → read → write 순서의 셸코드를 만들고 asm()으로 기계어로 변환한다.

exploit 실행 시 아래와 같이 FLAG 값을 획득 할 수 있다.

반응형
'DreamHack > WarGame' 카테고리의 다른 글
| chrome_artifacts 문제 (0) | 2025.11.14 |
|---|---|
| nikonikoni 문제 (0) | 2025.11.10 |
| boot_time 문제 (0) | 2025.11.08 |
| Autoruns 문제 (0) | 2025.10.26 |
| Find the USB 문제 (0) | 2025.10.18 |