本文目錄一覽:
- 1、golang中有類似其他語言的三目運算符的東西沒
- 2、請Golang深度用戶說說,現在Golang的性能可以和C比嗎
- 3、Golang裡面有類似Java中的ThreadLocal的東西么
- 4、紅隊最喜歡的18 種優秀的網絡安全滲透工具
- 5、(十一)golang 內存分析
golang中有類似其他語言的三目運算符的東西沒
沒有的,go中只能這樣
var a int
if x 0 {
a = 1
} else {
a = 2
}
請Golang深度用戶說說,現在Golang的性能可以和C比嗎
不可以,完全沒有可比性。
Golang的優勢是開發速度,C可以自由、精準的操控內存。
拿string類型舉個栗子:
1、修改字符串:
golang:需要分配新內存,然後進行內存copy。
c:可直接修改,可realloc。
2、存一段data:
golang:使用[]byte類型,[]byte轉成string需要進行內存拷貝(排除掉利用指針進行類型轉換的情況)。
c:直接用char[],可讀可寫。
golang中為了語言的安全性,類似的這種限制有很多,犧牲了一部分性能。但golang的優勢也是顯而易見的,goroutine、chan都很好用,而c則需要自己進行進程、線程的管控。
Golang裡面有類似Java中的ThreadLocal的東西么
我們現在軟件經常會分層,比如MVC ,類似這種橫向分層,而ThreadLocal會提供一種方式,方便的在同一個線程範圍內,提供一個存儲空間,供我們使用,實現縱向的存儲結構,便於我們在同一個線程範圍內,隨時取得我們在另外一個層面存放的數據。
紅隊最喜歡的18 種優秀的網絡安全滲透工具
Bishop labs用了兩期博客,前後各總結了9個紅隊工具,共計18個紅隊使用的優秀滲透工具,其博客文章也提及,這份清單不是決定性的,也僅用於參考。
創建者: @IAmMandatory
用途:允許 谷歌 Chrome 瀏覽器將受害者的瀏覽器變成測試代理。
優點: CursedChrome 可以很容易地在紅隊參與期間模擬惡意瀏覽器擴展。用來劫持 Chrome 瀏覽器,繞過大多數 2FA 或其他可能存在的安全保護,並利用 cookie 來訪問任何基於網絡的目標。
創建者: @symbolcrash1
用途: Universal Loader 是一個 Golang 庫,可以跨多個平台(Linux、Windows 和 OSX)從內存中加載共享庫,而無需CGO。
優點: Universal Loader 可以用在新的 Apple M1 芯片上,值得一提的是,這個 Golang 庫沒有使用 memfd,這使它成為第一個這樣做的 Golang Linux 加載器。由於這兩個原因,Universal Loader 是一個相當令人印象深刻的紅隊工具。
創建者: QSecure Labs
用途: Overlord 是一個基於 Python 的控制台命令行界面,用於自動化紅隊基礎設施。
優點: 在紅隊參與期間能夠根據需要快速啟動安全基礎設施非常重要,該工具可以節省大量時間,然後可以將這些時間用於進行一些實際的黑客攻擊。
創作者: @LittleJoeTables和@rkervell
用途: Sliver是一個用 Golang 編寫的跨平台通用植入框架。
優點: 這個工具是兩位 Bishop Fox 研究人員的創意,所以我們的偏見可能會表現出來。類似於商業工具Cobalt Strike。使 Sliver 值得注意的是諸如使用每個二進制混淆的動態代碼生成、多個和可擴展的出口協議以及支持多個操作員同時控制植入物等功能。此外,它易於使用且運行速度快。
創作者: @tillson_
用途: 使用 Githound 來定位暴露的 API 密鑰和其他圍繞 GitHub 浮動的敏感信息。該工具通過模式匹配、提交 歷史 搜索和“獨特的結果評分系統”工作。
優點: 像 Githound 這樣的秘密竊取工具並不少見,但這並沒有使這個工具(或其他類似工具)的價值降低。Githound 的一些可能用例包括檢測暴露的客戶 API 密鑰以及員工 API 令牌。如果您進行漏洞賞金,此工具可用於添加書籤 – 有些人報告說,由於它,因此獲得了數千美元的賞金。
創作者: @browninfosecguy
用途: 這個工具的名字說明了一切,在 PowerShell 中輕鬆地為 Microsoft Active Directory 設置實驗室。
優點: 速度很快,效果很好。可以使用此工具來確保您針對 Active Directory 使用的任何漏洞利用都已完善,然後再將其引入客戶端環境。對於只想更輕鬆地測試 Active Directory 的滲透測試員來說非常有用。
創建者: Microsoft Azure 紅隊
用途: 可以使用 Stormspotter 更好地可視化 Azure 攻擊面;此工具可幫助您繪製 Azure 和 Azure Active Directory 對象。
優點: 類似滲透測試工具BloodHound概念類似,只是該工具是為 Azure 環境設計的。對於任何藍色或紫色團隊成員來說,從防禦的角度來看,Stormspotter 也非常有用。
創建者: @Void_Sec
用途: ECG 實際上是一種商業工具。該工具是靜態源代碼掃描器,能夠分析和檢測 TCL/ADP 源代碼中真實和複雜的安全漏洞。
優點: ECG是一種強大的工具,可以填補令人驚訝的空白。正如 VoidSec 在他們的官方文章中所指出的,TCL代碼相當普遍;所以能夠徹底分析漏洞可能會非常有幫助。沒有很多其他工具可以滿足這種獨特的需求,無論是商業的還是其他的。
創建者: @TryCatchHCF
用途: 可以使用 DumpsterFire 構建“時間觸發的分布式”安全事件來測試紅隊進攻和藍隊防守。
優點: DumpsterFire 將傳統桌面練習提升到一個新的水平,它還使用自動化來在參與期間有效地進行多任務處理(並避開一些更乏味的事情)。DumpsterFire 允許的定製程度令人印象深刻;可以真正定製模擬安全事件來滿足獨一無二的情況。
10.GhostPack
創建者: SpecterOps ( @SpecterOps )
用途: 藉助強大的後開發工具集 GhostPack,可以做各種事情;可以攻擊 KeePass 2.X 數據庫、複製鎖定的文件、篡改 Active Directory 證書等。
優點: GhostPack 是一種滿足黑客需求的“一站式商店”。包含的 13 個工具包括非常有用的 Rubeus、Seatbelt 和 SharpUp。Rubeus 是一個 C# 工具集,直接與 Active Directory 環境中的 Kerberos 協議交互,允許直接與 Kerberos 屬性(例如票證和常規身份驗證)進行通信,然後可以利用這些屬性在網絡中移動。Seatbelt 是一個 C# 項目,可用於面向安全的主機“安全檢查”,而 SharpUp 是一個 C# 工具,可識別本地權限提升路徑。這些工具被無數紅隊和網絡滲透測試員使用。
創作者: Benjamin Delpy ( @gentilkiwi )
用途: Mimikatz 可以從 Windows 環境中提取密碼和其他憑據。是一種非常流行的滲透測試工具,已經存在了十多年。但 Mimikatz 會定期維護和更新,以確保仍然是最前沿的工具
優點: 將 Mimikatz 視為網絡滲透測試的瑞士軍刀。帶有幾個內置工具,對 Kerberoasting、密碼轉儲很有用,你能想到的,Mimikatz 都可以做到。而且 Mimikatz 不僅適用於那裡的進攻性安全專業人員——防禦性安全團隊也可以從中受益(如果你發現自己處於紫色團隊場景中,這也是個好兆頭)。
創建者: Metasploit 項目 ( @metasploit ),由 Rapid7 與開源社區合作運營
用途: Metasploit 可以說是世界領先的滲透測試框架,由 HD Moore 於 2003 年創建。Metasploit 包括用於滲透測試幾乎每個階段的模塊,這有助於其普及。包括約 250 個後利用模塊,可用於捕獲擊鍵、收集網絡信息、顯示操作系統環境變量等。
優點: Metasploit 後開發模塊非常龐大,有一個模塊最突出——Meterpreter 有效載荷。Meterpreter 允許 探索 目標系統並執行代碼,並且由於它通過內存 DLL 注入工作,因此不必冒險留下任何操作證據。Metasploit 後開發功能也非常通用,具有適用於 Windows、Linux 和 OS X 的模塊。
創作者: 阿德里安·沃爾默( @mr_mitm )
用途: 此後利用工具旨在繞過端點檢測和應用程序阻止列表。
優點: 可以使用 PowerHub 傳輸文件,而不會在測試環境中發出任何安全保護警報,這將使下一次滲透測試更加順暢和輕鬆。使用此工具領先於 Windows Defender。
創建者: LOLBAS 項目和亞利桑那州安全工程與研究小組
用途: LOLBAS 是一個字典,用於在 Windows 機器上使用二進制文件查找可能的權限提升路徑。LLOLBAS 是與 LOLBAS 協同工作的攝取器。攝取器會在 Windows 機器上的 LOLBAS 列表中查找所有二進制文件,因此無需猜測或對列表進行排序以查找它們(這可能很乏味)。
優點: LOLBAS 項目可搜索機器上可能的權限提升路徑,而 LLOLBAS 允許針對特定機器定製這些路徑。結合這兩個工具,(幾乎)在參與中勢不可擋。作為一個額外的好處,如果出現需要它們的情況,可以方便地使用離線工具。
創作者: @nil0x42
用途: PHPSploit 充當功能齊全的 C2 框架,通過單行 PHP 後門在 Web 服務器上靜默地持久化。
優點: PHPSploit 是非安全參與時手頭上的一項了不起的工具——高效、用戶友好且運行安靜。正如其 GitHub 描述所述,PHPSploit 是“由偏執狂,為偏執狂設計的”。
創作者: 塞瓦加斯
用途: 可以使用 swap_digger 在後期開發或取證期間自動進行 Linux 交換分析。
優點: 在 Linux 交換空間中可以找到各種各樣的好東西,從密碼和電子郵件地址到 GPG 私鑰。Swap_digger 可以梳理這些交換空間並找到高影響力的獎盃,這將使評估更加成功。
創建者: RedCode 實驗室
用途: Bashark 是一個後開發工具包,顧名思義,是用編程語言 Bash 編寫的。這是一個可以產生巨大結果的簡單腳本。
優點: Bashark 工作快速而隱蔽,允許通過創建 Bash 函數來添加新命令,並清除在目標環境中使用腳本後可能留下的任何痕迹。
創作者: AlessandroZ
用途: 使用 BeRoot 項目查找可用於在 Windows、Linux 和 OS X 環境中提升權限的常見錯誤配置。
優點: 識別常見的錯誤配置是在網絡中立足的最可靠方法之一,因此找到這些錯誤配置的速度越快越好。BeRoot 項目在這方面提供了極大的幫助。
本文,旨在介紹一些紅隊工具,供大家了解和參考研究之用,不建議任何人利用網絡技術從事非法工作,破壞他人計算機等行為。滲透有風險,入坑需謹慎。法網恢恢,疏而不漏。請正確理解滲透含義,正確利用滲透技術,做網絡安全服務的踐行者。
(十一)golang 內存分析
編寫過C語言程序的肯定知道通過malloc()方法動態申請內存,其中內存分配器使用的是glibc提供的ptmalloc2。 除了glibc,業界比較出名的內存分配器有Google的tcmalloc和Facebook的jemalloc。二者在避免內存碎片和性能上均比glic有比較大的優勢,在多線程環境中效果更明顯。
Golang中也實現了內存分配器,原理與tcmalloc類似,簡單的說就是維護一塊大的全局內存,每個線程(Golang中為P)維護一塊小的私有內存,私有內存不足再從全局申請。另外,內存分配與GC(垃圾回收)關係密切,所以了解GC前有必要了解內存分配的原理。
為了方便自主管理內存,做法便是先向系統申請一塊內存,然後將內存切割成小塊,通過一定的內存分配算法管理內存。 以64位系統為例,Golang程序啟動時會向系統申請的內存如下圖所示:
預申請的內存劃分為spans、bitmap、arena三部分。其中arena即為所謂的堆區,應用中需要的內存從這裡分配。其中spans和bitmap是為了管理arena區而存在的。
arena的大小為512G,為了方便管理把arena區域劃分成一個個的page,每個page為8KB,一共有512GB/8KB個頁;
spans區域存放span的指針,每個指針對應一個page,所以span區域的大小為(512GB/8KB)乘以指針大小8byte = 512M
bitmap區域大小也是通過arena計算出來,不過主要用於GC。
span是用於管理arena頁的關鍵數據結構,每個span中包含1個或多個連續頁,為了滿足小對象分配,span中的一頁會劃分更小的粒度,而對於大對象比如超過頁大小,則通過多頁實現。
根據對象大小,劃分了一系列class,每個class都代表一個固定大小的對象,以及每個span的大小。如下表所示:
上表中每列含義如下:
class: class ID,每個span結構中都有一個class ID, 表示該span可處理的對象類型
bytes/obj:該class代表對象的字節數
bytes/span:每個span佔用堆的字節數,也即頁數乘以頁大小
objects: 每個span可分配的對象個數,也即(bytes/spans)/(bytes/obj)waste
bytes: 每個span產生的內存碎片,也即(bytes/spans)%(bytes/obj)上表可見最大的對象是32K大小,超過32K大小的由特殊的class表示,該class ID為0,每個class只包含一個對象。
span是內存管理的基本單位,每個span用於管理特定的class對象, 跟據對象大小,span將一個或多個頁拆分成多個塊進行管理。src/runtime/mheap.go:mspan定義了其數據結構:
以class 10為例,span和管理的內存如下圖所示:
spanclass為10,參照class表可得出npages=1,nelems=56,elemsize為144。其中startAddr是在span初始化時就指定了某個頁的地址。allocBits指向一個位圖,每位代表一個塊是否被分配,本例中有兩個塊已經被分配,其allocCount也為2。next和prev用於將多個span鏈接起來,這有利於管理多個span,接下來會進行說明。
有了管理內存的基本單位span,還要有個數據結構來管理span,這個數據結構叫mcentral,各線程需要內存時從mcentral管理的span中申請內存,為了避免多線程申請內存時不斷的加鎖,Golang為每個線程分配了span的緩存,這個緩存即是cache。src/runtime/mcache.go:mcache定義了cache的數據結構
alloc為mspan的指針數組,數組大小為class總數的2倍。數組中每個元素代表了一種class類型的span列表,每種class類型都有兩組span列表,第一組列表中所表示的對象中包含了指針,第二組列表中所表示的對象不含有指針,這麼做是為了提高GC掃描性能,對於不包含指針的span列表,沒必要去掃描。根據對象是否包含指針,將對象分為noscan和scan兩類,其中noscan代表沒有指針,而scan則代表有指針,需要GC進行掃描。mcache和span的對應關係如下圖所示:
mchache在初始化時是沒有任何span的,在使用過程中會動態的從central中獲取並緩存下來,跟據使用情況,每種class的span個數也不相同。上圖所示,class 0的span數比class1的要多,說明本線程中分配的小對象要多一些。
cache作為線程的私有資源為單個線程服務,而central則是全局資源,為多個線程服務,當某個線程內存不足時會向central申請,當某個線程釋放內存時又會回收進central。src/runtime/mcentral.go:mcentral定義了central數據結構:
lock: 線程間互斥鎖,防止多線程讀寫衝突
spanclass : 每個mcentral管理着一組有相同class的span列表
nonempty: 指還有內存可用的span列表
empty: 指沒有內存可用的span列表
nmalloc: 指累計分配的對象個數線程從central獲取span步驟如下:
將span歸還步驟如下:
從mcentral數據結構可見,每個mcentral對象只管理特定的class規格的span。事實上每種class都會對應一個mcentral,這個mcentral的集合存放於mheap數據結構中。src/runtime/mheap.go:mheap定義了heap的數據結構:
lock: 互斥鎖
spans: 指向spans區域,用於映射span和page的關係
bitmap:bitmap的起始地址
arena_start: arena區域首地址
arena_used: 當前arena已使用區域的最大地址
central: 每種class對應的兩個mcentral
從數據結構可見,mheap管理着全部的內存,事實上Golang就是通過一個mheap類型的全局變量進行內存管理的。mheap內存管理示意圖如下:
系統預分配的內存分為spans、bitmap、arean三個區域,通過mheap管理起來。接下來看內存分配過程。
針對待分配對象的大小不同有不同的分配邏輯:
(0, 16B) 且不包含指針的對象: Tiny分配
(0, 16B) 包含指針的對象:正常分配
[16B, 32KB] : 正常分配
(32KB, -) : 大對象分配其中Tiny分配和大對象分配都屬於內存管理的優化範疇,這裡暫時僅關注一般的分配方法。
以申請size為n的內存為例,分配步驟如下:
Golang內存分配是個相當複雜的過程,其中還摻雜了GC的處理,這裡僅僅對其關鍵數據結構進行了說明,了解其原理而又不至於深陷實現細節。1、Golang程序啟動時申請一大塊內存並劃分成spans、bitmap、arena區域
2、arena區域按頁劃分成一個個小塊。
3、span管理一個或多個頁。
4、mcentral管理多個span供線程申請使用
5、mcache作為線程私有資源,資源來源於mcentral。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/152991.html