SessionExec อนุญาตให้คุณดำเนินการคำสั่งที่ระบุในเซสชันอื่นบนระบบ Windows โดยกำหนดเป้าหมายไปที่ ID เซสชันเฉพาะหรือเซสชันทั้งหมด พร้อมตัวเลือกในการระงับเอาต์พุตคำสั่ง
เครื่องมือนี้ได้รับแรงบันดาลใจจากโค้ดการหาประโยชน์จาก EOP COM Session Moniker ซึ่งเผยแพร่เมื่อนานมาแล้วโดย James Forshaw
SessionExec ใช้ Windows API เพื่อสืบค้นข้อมูลเซสชันและสร้างกระบวนการภายในเซสชันเหล่านั้น
คอมไพล์ SessionExec.cs ที่รันคำสั่งต่อไปนี้จาก Build Tools สำหรับ Visual Studio
csc /reference:System.Runtime.InteropServices.dll /reference:System.Runtime.InteropServices.RuntimeInformation.dll SessionExec.cs /out:SessionExec.exe
หรือคุณสามารถใช้ Invoke-SessionExec.ps1
ซึ่งเป็นสคริปต์เดียวกัน แต่ทำงานในหน่วยความจำโดยใช้วิธีการสะท้อนแสง
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/Leo4j/SessionExec/main/Invoke-SessionExec.ps1')
คุณยังสามารถค้นหาการใช้งาน PowerShell ที่แท้จริงของเครื่องมือนี้ซึ่งเขียนโค้ดโดย The-Viper-One ได้ที่นี่
SessionExec.exe[/NoOutput]
Invoke-SessionExec[/NoOutput]
ตรวจสอบว่ามีเซสชันใดบ้างโดยใช้คำสั่ง quser
จากนั้นรันคำสั่งในเซสชันเฉพาะหรือเซสชัน All
หากคุณพบว่าตัวเองเป็นผู้ดูแลระบบท้องถิ่นบนเครื่องหนึ่งหรือหลายเครื่องภายในเครือข่าย และมีเซสชันผู้ใช้บนเป้าหมายเหล่านั้น คุณสามารถใช้ SessionExec และ Find-LocalAdminAccess ร่วมกันเพื่อตรวจสอบว่าผู้ใช้เหล่านั้นมีการเข้าถึงของผู้ดูแลระบบท้องถิ่นผ่านเครื่องอื่น ๆ หรือไม่ เครือข่าย
หากเป็นเช่นนั้น คุณสามารถทำซ้ำขั้นตอนนี้สำหรับผู้ใช้ที่มีเซสชันบนเครื่องเหล่านั้นได้ การดำเนินการต่อเนื่องนี้อาจนำไปสู่การประนีประนอมโดเมนโดยสมบูรณ์ในทางทฤษฎี
นอกจากนี้ คุณยังสามารถรับเชลล์กลับมาได้โดยใช้ Amnesiac, จับแฮช NTLMv2 และถ่ายทอดมัน, คว้า TGT และอื่นๆ อีกมากมาย ทั้งหมดนี้อยู่ในรูปแบบอัตโนมัติ
ฉันจะนำแนวคิดนี้ไปใช้กับ Amnesiac และด้วยความร่วมมือกับ The-Viper-One เราก็กำลังดำเนินการเพื่อนำแนวคิดนี้ไปใช้กับ PsMapExec ด้วยเช่นกัน
สำหรับตอนนี้ นี่คือ Proof of Concept (PoC):