공부/시스템 3

드림핵 > shell_basic

shellcode, opcode 등등이 머리를 어지럽게 한다. 하지만 계속 매달린 끝에 엇! 갑자기 뭔가 이해가 되었다. 문제 파일을 받으면 shell_basic.c 파일을 확인할 수 있다. main 함수가 아닌 다른 함수들은 풀이와 관련이 없다고 하니, main만 잠깐 보자 읽기, 쓰기, 실행 권한을 가진 메모리 영역을 할당해 셸코드를 저장한다. 우리는 드림핵 강의에서 아래의 코드를 배웠다. // File name: orw.c // Compile: gcc -o orw orw.c -masm=intel __asm__( ".global run_sh\n" "run_sh:\n" "push 0x67\n" "mov rax, 0x616c662f706d742f \n" "push rax\n" "mov rdi, rsp #..

공부/시스템 2024.01.04

pwngdb - 2

pwndbg는 주요 메모리들의 상태를 가독성 좋게 표현해준다. 크게 4개의 영역으로 구분된다. REGISTERS : 레지스터의 상태를 보여줌 DISASM : rip부터 디스어셈블된 결과를 보여줌 STACK : rsp부터 스택의 값들을 보여줌 BACKTRACE : 현재 rip에 도달할 때까지 어떤 함수들이 중첩되어 호출됐는지 보여줌 main 함수에 중단점을 걸고, 실행했다. disassemble 명령어에 함수 이름을 인자로 전달하면 해당 함수가 반환될 때 까지 모두 디스어셈블 해 보여준다. ni와 si는 어셈블리 명령어를 한 줄 실행한다. ni는 내부로 들어가지 않지만, si는 내부로 들어간다. 현재는 rip가 0x401176을 가르키고 있다. 현재는 다음 줄로 rip가 이동한 것을 확인했다. printf..

공부/시스템 2023.11.17

pwngdb - 1

gdb는 리눅스의 대표적인 디버거이다. gdb의 플러그인 중 pwndbg를 설치했다. 설치 방법은 다음과 같다. git clone https://github.com/pwndbg/pwndbg cd pwndbg/ ./setup.sh fatal: could not create work tree dir 위와 같은 에러가 발생했는데, 관리자 모드로 wsl를 실행하니까 해결됐다. vi debugee.c 를 입력해 코드를 작성한다. gcc -o debugee debugee.c -no-pie gdb debugee 를 입력한다. readelf -h debugee 보아하니 ELF의 파일 헤더를 보여줄 것 같다. ELF는 리눅스의 실행파일 형식이다. EP 주소가 0x401050 임을 확인했다. 중에서도 DISASM 부분만 ..

공부/시스템 2023.11.16