
IIS 짧은 파일명(8.3) 노출 취약점을 위한 최신 버전의 스캐너
최신 발표:
최신 블로그 게시물:
모든 분들께 이 오래된 도구를 사용하기 전에 @bitquark의 Go로 작성된 새 도구를 먼저 사용해보시기를 권장합니다: https://github.com/bitquark/shortscan
이 스캐너의 최신 버전은 물결표(~) 문자를 이용한 IIS 짧은 파일명(8.3) 노출 취약점을 스캔합니다. 이 문제는 2010년에 발견되었지만 그 이후 여러 번 발전해 왔습니다.
이것은 오래된 도구이며 코드가 스파게티이지만, 최신 IIS(글을 쓰는 시점에서 Windows Server 2022의 IIS 10)도 처리할 수 있습니다! 최근에 업데이트되어 Java에서 리플렉션 핵 없이 사용자 정의 HTTP 메서드를 보낼 수 있습니다. 그러나 일부 훌륭한 연구자들이 Go와 같은 다른 기술을 사용하여 이 도구를 다시 구현하려고 시도했으며, 성숙해지면 아마 더 잘 작동할 것입니다.
Microsoft IIS에는 인가되지 않은 정보 노출로 이어질 수 있는 결함이 있습니다. 이 문제는 물결표 문자(~)가 포함된 요청을 파싱하는 동안 발생합니다. 이로 인해 원격 공격자가 파일 및 폴더 이름 정보에 접근할 수 있습니다.
이 스캐너는 더 나은 지원을 위해 https://code.google.com/p/iis-shortname-scanner-poc/ 에서 GitHub로 이동되었습니다.
원본 연구 파일: http://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf
Windows에서 8.3 등가물을 가진 파일 및 디렉터리의 짧은 이름을 여러 버전의 Microsoft IIS에서 일부 벡터를 사용하여 감지할 수 있습니다. 예를 들어, 확장자에 4글자가 있는 ".aspx" 파일의 모든 짧은 이름을 감지할 수 있습니다.
참고: 최신 버전의 스캐너에는 새로운 기술이 도입되었으며, 취약한 IIS10을 스캔할 수 있습니다.
짧은 이름을 기반으로 원래 파일 또는 폴더 이름을 찾는 것은 쉽지 않습니다. 그러나 다음과 같은 방법이 예시로 권장됩니다:
최신 버전은 Open JDK 18을 사용하여 컴파일되었습니다(다른 JDK용 이전 jar 파일은 제거되었지만 Git 기록에서 찾을 수 있습니다).
이 오래된 애플리케이션을 사용하려면 /release 디렉터리의 파일을 다운로드해야 합니다!
직접 이 애플리케이션을 컴파일할 수도 있습니다. 추가 조사가 필요한 문제는 GitHub에 제출해 주십시오.
사용법 1 (기본 구성 파일로 대상이 취약한지 확인):
java -jar iis_shortname_scanner.jar [URL]
사용법 2 (기본 구성 파일로 8.3 파일 이름 찾기):
java -jar iis_shortname_scanner.jar [ShowProgress] [ThreadNumbers] [URL]
사용법 3 (새 구성 파일로 대상이 취약한지 확인):
java -jar iis_shortname_scanner.jar [URL] [configFile]
사용법 4 (새 구성 파일로 8.3 파일 이름 찾기):
java -jar iis_shortname_scanner.jar [ShowProgress] [ThreadNumbers] [URL] [configFile]
사용법 5 (Linux 상자에서 여러 대상 스캔):
./multi_targets.sh <scope file> <is_default_https (1=https)>
상세:
[ShowProgress]: 0= 최종 결과만 표시 - 1= 최종 결과를 단계별로 표시 - 2= 진행 상황 표시
[ThreadNumbers]: 0= 스레드 없음 - 정수 = 동시 스레드 수 [IIS 서비스 거부에 주의]
[URL]: 전체 URL - http/https 프로토콜로 시작
[configFile]: config.xml을 기반으로 하는 새 구성 파일의 경로
예시:
- 예시 0 (대상이 취약한지 확인):
java -jar iis_shortname_scanner.jar http://example.com/folder/
- 예시 1 (스레드 사용 안 함 - 매우 느림):
java -jar iis_shortname_scanner.jar 2 0 http://example.com/folder/new%20folder/
- 예시 2 (20개 스레드 사용 - 권장):
java -jar iis_shortname_scanner.jar 2 20 http://example.com/folder/new%20folder/
- 예시 3 (출력을 텍스트 파일에 저장):
java -jar iis_shortname_scanner.jar 0 20 http://example.com/folder/new%20folder/ > c:\results.txt
- 예시 4 (IIS 기본 인증 우회):
java -jar iis_shortname_scanner.jar 2 20 http://example.com/folder/AuthNeeded:$I30:$Index_Allocation/
- 예시 5 (새 구성 파일 사용):
java -jar iis_shortname_scanner.jar 2 20 http://example.com/folder/ newconfig.xml
- 예시 6 (Linux 상자에서 여러 대상 스캔):
./multi_targets.sh scope.txt 1
참고 1: 스캐너 설정을 변경하고 추가 헤더를 추가하려면 config.xml 파일을 편집하십시오. 참고 2: 때로는 처음에 작동하지 않을 수 있으며 다시 시도해야 합니다.
다음 예에서 IIS는 파일이 존재할 때 다른 메시지로 응답합니다:
http://target/folder/valid*~1.*/.aspx
http://target/folder/invalid*~1.*/.aspx
그러나 IIS 서버마다 응답이 다를 수 있으며, 예를 들어 일부는 다음 또는 다른 유사한 패턴으로 작동할 수 있습니다:
http://target/folder/valid*~1.*\.asp
http://target/folder/invalid*~1.*\.asp
GET, POST, OPTIONS, DEBUG 등 요청 전송 방법도 중요합니다.
프록시를 사용하여 요청을 모니터링하는 것이 이 문제와 이 스캐너를 이해하는 가장 좋은 방법이라고 생각합니다.
Microsoft는 이 보안 문제를 패치하지 않습니다. 그들의 마지막 응답은 다음과 같습니다:
Microsoft 보안 대응 센터에 연락해 주셔서 감사합니다.
이 문제를 알려주셔서 감사합니다. 이전 지침은 그대로 유지됩니다: 8.3 이름이 비활성화된 상태로 IIS를 배포하십시오.
따라서 Windows 운영 체제에서 다음 레지스트리 키를 생성하여 8.3 이름이 비활성화된 상태로 IIS를 배포하는 것이 좋습니다:
키: HKLM\SYSTEM\CurrentControlSet\Control\FileSystem
이름: NtfsDisable8dot3NameCreation
값: 1
참고: 웹 폴더를 다시 생성해야 합니다. NtfsDisable8dot3NameCreation 레지스트리 항목 변경은 변경 후 생성되는 파일 및 디렉터리에만 영향을 미치므로, 이미 존재하는 파일은 영향을 받지 않습니다.
이미지 빌드:
docker build . -t shortname
파일 모드:
docker run \
-v $(realpath urls.txt):/app/urls.txt \
-v $(realpath output_dir):/app/iis_shortname_results \
shortname -f urls.txt
단일 모드:
docker run shortname 2 20 http://example.com
구성 파일 덮어쓰기:
docker run \
-v $(realpath config.xml):/app/config.xml \
shortname http://example.com
연구 링크:
웹사이트 참고:
비디오 링크:
기타 링크: