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번 볼때 이해되네..
'System Hacking' 카테고리의 다른 글
[드림핵] ssp_001 풀이 - 티스토리 (0) | 2023.07.16 |
---|---|
[드림핵] Return to Shellcode 풀이 - 티스토리 (0) | 2023.07.12 |
[드림핵] baic_exploitation_000 풀이 - 티스토리 (0) | 2023.07.10 |
[드림핵] basic_exploitation_001 풀이 - 티스토리 (0) | 2023.07.09 |
[드림핵] Return Address Overwrite 풀이 - 티스토리 (0) | 2023.07.09 |