
🌸 쉘코드를 쉽게 제작할 수 있는 대화형 쉘코딩 환경
Shellen은 대화형 셸코딩 환경입니다. 셸코드를 작성할 때 유용한 도구를 원한다면 shellen이 도움이 될 수 있습니다. Shellen은 어셈블리 또는 디스어셈블리 도구로도 사용할 수 있습니다.
keystone 및 capstone 엔진이 shellen의 모든 작업에 사용됩니다.
Shellen은 python3에서만 작동합니다. python2 지원은 향후 추가될 수 있습니다.
먼저 shellen의 의존성을 설치해야 합니다:
$ sudo apt-get install cmake python3-dev python3-setuptools
pip3를 사용하여 shellen의 안정 버전을 설치할 수 있습니다:
$ sudo pip3 install shellen
또는 필요한 모든 패키지가 이미 설치되어 있다면 (요구 사항 참조):
$ python3 setup.py install
keystone-engine 설치에 문제가 있는 경우 keystone-engine을 컴파일해야 합니다 (keystone 저장소의 COMPILE.md 파일 참조)
shellen과 필수 패키지를 설치한 후, 터미널에 다음을 입력하면 shellen을 실행할 수 있습니다:
$ shellen
shellen의 사용법에 대한 정보를 얻으려면 shellen의 help 명령을 실행할 수 있습니다.
Shellen은 명령어를 어셈블하고 디스어셈블하므로 각각 asm 및 dsm이라는 두 가지 사용 모드가 있습니다. syscall 테이블 검색과 일반적인 셸코드 검색을 포함한 다른 기능도 있습니다.
Shellen에는 현재 모드, OS(syscall용 운영 체제), 현재 모드에서 선택한 아키텍처를 표시하는 유용한 프롬프트가 있습니다. Shellen의 프롬프트는 다음과 같습니다:
L:asm:x86_32 >
터미널에 입력하듯 입력 내용을 편집할 수 있습니다. 또한 shellen은 명령 기록을 저장합니다 (위쪽 화살표를 누르면 이전 명령을 확인할 수 있습니다).
L은 프롬프트에서 Linux의 약칭입니다. 아래에는 다른 모든 OS 이름이 나열되어 있습니다:
L은 LinuxW는 WindowsM은 MacOSOS를 변경하려면 다음과 같이 setos [linux/windows/macos]를 입력하세요:
L:asm:x86_32 > setos windows
[+] OS changed to windows.
현재 모드를 변경하려면 프롬프트에 asm 또는 dsm을 입력하세요.
L:dsm:arm32 > asm
[+] Changed to asm (assembly) mode
L:asm:x86_32 > dsm
[+] Changed to dsm (disassembly) mode
L:dsm:arm32 >
| 명령어 | 설명 |
|---|---|
clear | 터미널 화면을 지웁니다. Windows의 cls 또는 *nix 시스템의 clear와 같습니다. |
help | 도움말 메시지를 표시합니다. |
quit,q,exit |
명령어를 어셈블하려면 다음과 같이 세미콜론으로 구분하여 입력하세요:
L:asm:x86_32 > mov edx, eax; xor eax, eax; inc edx; int 80;
[+] Bytes count: 7
Raw bytes: "\x89\xc2\x31\xc0\x42\xcd\x50"
Hex string: "89c231c042cd50"
어셈블된 바이트에 널 바이트가 포함된 경우 shellen이 이를 알려줍니다.
디스어셈블링은 어셈블링과 유사합니다. 대신 프롬프트에 바이트를 입력하고 결과를 확인하세요!
L:dsm:x86_32 > 89c231c042cd50
0x00080000: mov edx, eax
0x00080002: xor eax, eax
0x00080004: inc edx
0x00080005: int 0x50
또한 하위 프로세스에서 셸코드를 실행할 수 있습니다. 이 작업은 시스템에 해를 끼칠 수 있으니 주의하세요! 하위 프로세스에서 마지막 셸코드로 점프합니다. 무엇이 잘못될 수 있을까요? 코드가 로드되는 기본 주소를 제어할 수 없으며, 명령어가 CPU에서 해석될 수 있다고 가정합니다. 사용 방법은 shellen 내부에서 help를 참조하세요.
잠재적으로 위험한 셸코드를 더 안전하게 실행하기 위해 하위 프로세스를 가상 환경에서 실행할 계획입니다.
asm 및 dsm 모드는 다양한 아키텍처에서 작동합니다. shellen의 현재 모드에서 사용 가능한 아키텍처 목록을 보려면 다음을 입력하세요:
L:dsm:x86_32 > archs
┌────────┬────────┬─────────┬─────────┬────────┐
│ │ │ │ │ │
│ arm32 │ mips32 │ sparc32 │ systemz │ x86_16 │
│ arm64 │ mips64 │ sparc64 │ │ x86_32 │
│ arm_tb │ │ │ │ x86_64 │
└────────┴────────┴─────────┴─────────┴────────┘
현재 아키텍처를 변경하려면 다음을 입력하세요:
L:dsm:x86_32 > setarch arm32
[+] Architecture of dsm changed to arm32
셸코드를 만들 때 syscall이 필요합니다. shellen으로 syscall을 조회하려면 sys 다음에 원하는 syscall 이름을 입력하세요. Shellen은 찾고 있던 syscall이 포함될 수 있는 syscall 목록을 생성합니다.
L:asm:x86_32 > sys open
┌────────┬───────┬──────────────────────┬──────────────────────┬──────────────┬──────────────┐
│ name │ eax │ ebx │ ecx │ edx │ esi │
├────────┼───────┼──────────────────────┼──────────────────────┼──────────────┼──────────────┤
│ open │ 0x05 │ const char *filename │ int flags │ umode_t mode │ - │
│ openat │ 0x127 │ int dfd │ const char *filename │ int flags │ umode_t mode │
└────────┴───────┴──────────────────────┴──────────────────────┴──────────────┴──────────────┘
sys는 제공된 syscall에 대해 가능한 변형 목록을 출력합니다. shellen이 검색하는 syscall 테이블은 선택한 아키텍처와 운영 체제(OS)에 따라 달라집니다. 이 경우 아키텍처는 x86_32이고 OS는 Linux입니다.
Shellen은 키워드에 따라 일반적인 셸코드 목록을 표시할 수 있습니다. Shellen의 키워드 조회는 shell-storm.org의 API를 사용하며 (작성자에게 감사드립니다!) 다음과 같이 사용할 수 있습니다:
L:asm:x86_32 > shell <keyword> <count>
참고로 count 매개변수는 필수가 아닙니다. shell <keyword> <count> 출력의 이미지는 스크린샷 섹션에 있습니다.
현재 shellen은 Linux에서만 지원됩니다. Windows 또는 MacOS용 기능을 추가하려면 이슈를 작성해 주시면 지원을 추가하겠습니다.
문제/버그나 기타 사항을 발견하면 해당 문제에 대해 이슈를 작성해 주세요. 또한 shellen에 추가하면 좋을 기능이 있다고 생각되면 동일하게 이슈를 작성해 주시면 요청한 기능을 추가하도록 노력하겠습니다.
asm 및 dsm 모드에 대한 별도의 기록약간의 사진 모음입니다. (다양한 기능이 추가되면서 오래된 사진입니다)
| 현재 세션을 종료하고 빠져나갑니다. |