본문 바로가기

System Hacking

[드림핵] shell_basic 풀이 - 티스토리

 

 

 

execve, execveat 함수 사용 못하니까 open, read, write 함수들을 사용해서 출력해야 된다 

 

 

먼저 셀코드를 작성

 

 

문자열의 끝을 명시해주기 위해서 널값도 푸쉬 해준다

 

 

근데 여기서 rax에 문자열들을 안 옮기고 그대로 push 하니까 에러뜬다

 

 

찾아보니까 push는 레지스터를 대상으로 이루어지기 때문에 옮겨 놓고 하는게 정석이라고 한다

 

 

 

 

nasm -f elf64 shell_basic.asm

(해당 파일을 64비트 실행파일로 컴파일)

 

objcopy --dump-section .text=shell_basic.bin shell_basic.o

(shell_basic.o파일에서 text 부분만 추출해서 shell_basic.bin 파일로 저장)

 

xxd shell_basic.bin

(해당 파일의 내용을 16진수로 표시해서 출력)

 

 

 

얻은 쉘코드로 pwntools에서 해당 서버에 exploit

 

 

 

 

 

 

드디어 풀었따 ㅠ

 

 

*다른 풀이

 

구글링하다가 발견한건데 shell_basic의 기계어 파일을 읽어서 해당 서버 입력으로 넘겨주니까 바로 풀린다

 

 


패착 요인

 

1. NULL값 push를 안해줌

 

2. 레지스터에 문자열 안 옮기고 바로 push 함

 

3. 드림핵 쉘코드 설명 마지막 부분에서 바이트 코드 변환하는 부분에서 32비트 형태로 작성했길래 나도 32비트로 하다가 산으로 감 

(이건 지금 생각해보면 드림핵에서 64비트 아키텍처 사용한다고 했는데 당연한거)

 

느낀점

 

pwntools 사용법도 거의 모르고 쉘코드 짜는 것도 너무 어색해서 완벽히 이해하는데 꽤 걸렸다

 

그래도 오래 삽질한 만큼 pwntools 사용법도 익숙해지고 orw는 완벽 이해했다

 

진짜 100번 보고 이해 안돼도 101번 볼때 이해되네..