일에 맞는 도구
Source: Dev.to

소개
최근에 Hack the Box의 Intro to Assembly Language 모듈을 시작했습니다. C 배경을 가지고 있어 컴파일 언어에 대해 어느 정도 이해하고 있다고 생각했지만, 어셈블리는 전혀 다른 영역이라는 것을 금방 깨달았습니다. Hack the Box는 훌륭한 플랫폼이지만, 프로그래밍 언어를 깊이 있게 배우기에 반드시 최적의 장소는 아닙니다.
이 모듈은 또한 SOC Analyst Prerequisites Skill Path를 완료하기 위해 마지막으로 필요한 것이었고, 미완성된 과제가 남아 있는 것이 싫었습니다.
도전 과제
우리는 펜테스트를 진행 중이며, 바이너리 익스플로잇 연습에서 쉘코드를 실행해야 하는 단계에 도달했습니다. 하지만 50바이트의 버퍼 공간만 사용할 수 있습니다. 따라서 어셈블리 코드를 최적화하여 쉘코드로 사용할 수 있게 만들고 50 바이트 이하로 줄여야만 취약 서버에서 성공적으로 실행할 수 있습니다.
팁
- 어셈블리 코드가 무엇을 하는지 이해하려면 “Syscalls” 섹션을 참고하세요.
- 어셈블리 코드를 최적화하려면 “Shellcoding Techniques” 섹션을 참고하세요.
위 서버는 우리가 쉘코드를 실행할 수 있는 취약 환경을 시뮬레이션합니다. 목표는 flag.s를 쉘코딩에 맞게 최적화하고 50 바이트 이하로 만든 뒤, 쉘코드를 전송해 플래그를 획득하는 것입니다(원한다면 직접 커스텀 쉘코드를 만들어도 됩니다).
두 날 동안 수동으로 최적화에 매달리던 중, 해커의 사고방식은 전통적인 프로그래머와 다르다는 것을 깨달았습니다. 가장 효율적인 해결책은 모든 것을 처음부터 작성하기보다 올바른 도구를 선택하는 것일 수 있습니다.
MSFVenom 사용
저는 MSFVenom이라는 강력한 페이로드 생성 도구를 사용했습니다. 사용한 명령은 다음과 같습니다:
msfvenom -p 'linux/x64/exec' CMD='cat /flg.txt' -a 'x64' --platform 'linux' -f 'hex'
-p 'linux/x64/exec'– 명령을 실행할 페이로드 선택CMD='cat /flg.txt'– 실행할 명령 지정-a 'x64'– 시스템 아키텍처 정의--platform 'linux'– 대상 OS 설정-f 'hex'– 출력 형식 선택
결과

마지막 단계는 간단했습니다: netcat을 사용해 생성된 쉘코드를 대상 머신에 전송하면 됩니다. Boom! 플래그를 획득했습니다.
교훈
해킹은 근본적으로 도구 선택과 전략적 사고에 관한 것이며, 단순히 코딩 실력만으로 이루어지는 것이 아닙니다. 때로 가장 우아한 해결책은 가장 단순한 해결책입니다.