对抗性系统管理 - 高效"无文件攻击"的关键技术
介绍"无文件攻击搜索"(LOLSearches),使用SharePoint和Explorer的高级搜索操作符来辅助红队操作。
在我之前的工作中,我们经常采用"无文件攻击"策略,很少使用C2基础设施,而是依赖内部威胁凭证或通过合法方式访问系统。因此,我在基于关键词手动搜索数据和追踪方面培养了强大的技能。使用内置工具,手动搜索网络共享和SharePoint,并找到操作合法数据的实用方法。
LOLBAS/GTFOBINS项目已经被多次讨论,提供了许多使用合法操作系统二进制文件进行恶意目的的方法。同样,诸如Snaffler、SauronEye和SnaffPoint等工具都在环境中提供了一定的搜索能力,用于发现有趣的数据。Neil Lines和我之前介绍过OffensiveSysAdmin Suite,它使用PowerShell的ADSISearcher,当您搜索内置工具以获取有关共享和Active Directory的信息时,只想快速获得一些成果。
如果您在虚拟桌面环境/接口(VDI)中操作,并且只想在搜索内置工具(如Windows Explorer或SharePoint)时快速获得一些成果,该怎么办?
搜索文件共享和高级搜索操作符
在无文件攻击方面,有时确实很简单,只需使用您已有的工具,而不是将额外的工具带入环境。SharePoint和Explorer是优秀的对抗性工具,如果正确使用,可以让您融入环境并追踪额外的凭证和敏感数据。
SharePoint 101
与本地共享一样,SharePoint对于攻击者来说可能是一个有趣信息的宝库。如果没有正确加固,不同文件和文件夹的访问控制也可能很弱。它有一个相当不错的内置搜索功能,可以像Windows上的Explorer一样接受搜索词,但我最近学到的一点有用信息是,它支持Kusto查询语言(KQL),因此可以接受复杂的查询来追踪特定的文件类型或包含某些信息的文件。
在我们深入研究大量查询之前,这里有一些在构建搜索查询时值得了解的关键信息:
- 通配符(*):使用进行部分匹配。例如,content:“pass” 可以找到"password"、“passcode"等。
- 近似搜索:要找到彼此接近出现的术语,使用波浪号(~)。例如,content:“password username”~5 可以找到"password"和"username"在五个词以内的文件。
- 排除术语:要排除某些词或文件类型,使用NOT。例如,content:“password” NOT FileExtension:txt 排除文本文件。
- 大小写敏感性:搜索不区分大小写,因此无需担心大小写。
以下是一些您可以在任务中尝试的查询;我没有包括每一个,但至少提供了一些高级操作符,这些操作符会有所帮助。我创建了一个包含更多查询的仓库供您使用:
GitHub - ZephrFish/LOLSearches: 用于explorer和sharepoint的无文件攻击搜索
在脚本中查找密码
有几个查询可以在这方面提供帮助,特别是在追踪密码时,从简单的内容搜索开始:
1
|
content:"password" OR content:"username" OR content:"credential" OR content:"secret" OR content:"key" OR content:"token" OR content:"login"
|
或者,如果您想追踪特定的扩展名:
1
|
(FileExtension:ps1 OR FileExtension:bat OR FileExtension:sh OR FileExtension:cmd OR FileExtension:py) AND (content:"password" OR content:"secret" OR content:"key" OR content:"credential" OR content:"token")
|
常见脚本扩展和凭证模式:
1
2
3
4
5
6
7
|
(
FileExtension:("ps1" OR "bat" OR "sh" OR "cmd" OR "py" OR "js" OR "ts" OR "rb" OR "pl" OR "php" OR "cs" OR "java" OR "go" OR "r" OR "sql" OR "groovy" OR "scala" OR "kt" OR "vb" OR "vbs" OR "psm1" OR "jsx" OR "tsx")
)
AND
(
content:("password=" OR "password :" OR "password =>" OR "password :" OR "passwd=" OR "passwd :" OR "passwd =>" OR "pwd=" OR "pwd :" OR "pwd =>" OR "secret=" OR "secret :" OR "secret =>" OR "key=" OR "key :" OR "key =>" OR "api_key" OR "apiKey" OR "token=" OR "token :" OR "token =>" OR "access_token" OR "client_secret" OR "private_key" OR "BEGIN PRIVATE KEY" OR "aws_access_key_id" OR "aws_secret_access_key")
)
|
为了分解这个相当复杂的查询,以下关键词解释了查询中的操作:
- FileExtension:过滤具有常见脚本和编程扩展的文件。
- content:搜索凭证通常存储或分配的模式。
- 操作符:
- AND:确保同时满足文件扩展名和内容标准。
- OR:包括任何指定的文件扩展名或内容模式。
使用近似搜索在代码中找到更多内容
1
2
3
4
5
6
7
|
(
FileExtension:("ps1" OR "bat" OR "sh" OR "cmd" OR "py" OR "js" OR "ts" OR "rb" OR "pl" OR "php" OR "cs" OR "java" OR "go" OR "r" OR "sql" OR "groovy" OR "scala" OR "kt" OR "vb" OR "vbs" OR "psm1" OR "jsx" OR "tsx")
)
AND
(
(content:"password*"~5) OR (content:"passwd*"~5) OR (content:"pwd*"~5) OR (content:"secret*"~5) OR (content:"key*"~5) OR (content:"token*"~5) OR (content:"api_key*"~5) OR (content:"apiKey*"~5) OR (content:"access_token*"~5) OR (content:"client_secret*"~5) OR (content:"private_key*"~5) OR (content:"aws_access_key_id*"~5) OR (content:"aws_secret_access_key*"~5)
)
|
注释中的凭证
我借鉴了Snaffler的方法(而且我每次都要谷歌它们),但使用正则表达式也有效!
1
2
3
4
5
6
7
|
(
FileExtension:("ps1" OR "py" OR "js" OR "java" OR "cs" OR "php" OR "rb" OR "go" OR "kt")
)
AND
(
content:/.*(\/\/|#|\/\*|\*).*(password|secret|token).*/
)
|
深入脚本和内容
1
2
3
4
5
6
7
|
(
FileExtension:("ps1" OR "bat" OR "sh" OR "cmd" OR "py" OR "js" OR "ts" OR "rb" OR "pl" OR "php" OR "cs" OR "java" OR "go" OR "r" OR "sql" OR "groovy" OR "scala" OR "kt" OR "vb" OR "vbs" OR "psm1" OR "jsx" OR "tsx")
)
AND
(
content:/.*(password|passwd|pwd|secret|key|token|api_key|apiKey).*(=|:|=>).*/
)
|
追踪系统管理员脚本
通常,系统管理员和开发人员喜欢将凭证放在文件中,因此追踪他们的脚本可以帮助发现凭证并更深入地了解脚本和系统的构建方式。
1
|
content:"net use" OR content:"ipconfig" OR content:"netstat" OR content:"ping" OR content:"tracert" OR content:"nslookup" OR content:"net user" OR content:"net localgroup"
|
查找AI和机器学习文件
由于AI如今非常流行,有时公司希望您在环境中查找与AI相关的内容,因此这里有一个专门用于此目的的快速获胜查询。
1
|
(FileExtension=pptx OR FileExtension=docx OR FileExtension=xlsx) AND (ContentsContainMetadata:"machine learning" OR ContentsContainMetadata:"deep learning" OR ContentsContainMetadata:"neural network" OR ContentsContainMetadata:"artificial intelligence" OR ContentsContainMetadata:"natural language processing" OR ContentsContainMetadata:"computer vision" OR ContentsContainMetadata:"data mining" OR ContentsContainMetadata:"predictive modeling" OR ContentsContainMetadata:"supervised learning" OR ContentsContainMetadata:"unsupervised learning" OR ContentsContainMetadata:"reinforcement learning" OR ContentsContainMetadata:tensorflow OR ContentsContainMetadata:pytorch OR ContentsContainMetadata:keras OR ContentsContainMetadata:"scikit-learn" OR ContentsContainMetadata:pandas OR ContentsContainMetadata:numpy OR ContentsContainMetadata:matplotlib)
|
使用Explorer搜索
与使用SharePoint搜索非常相似,Windows Explorer也支持搜索操作符,允许在环境中进行更复杂的追踪。我相信,如果您正在阅读本文,并且过去使用过explorer搜索内容,您可能使用过诸如以下的内容:
但您可能不知道可以将搜索操作符组合在一起以找到更多有价值的信息,例如追踪包含密码的脚本:
1
|
(ext:.ps1 OR ext:.bat OR ext:.cmd OR ext:.vbs) content:"password"
|
如果您想查找特定日期范围内的内容(它适用于英国和美国布局,但我的VM都是美国布局😦),您可以添加以下内容:
1
|
datecreated:01/01/2023..12/31/2025 (ext:.ps1 OR ext:.bat OR ext:.cmd OR ext:.py OR ext:.js OR ext:.php OR ext:.rb OR ext:.pl OR ext:.java OR ext:.cs) content:"password"
|
查找在2023年1月1日至2025年12月31日期间创建的所有包含"password"的脚本文件。如果您只想在搜索中使用年份,也可以使用类似这样的内容:
1
|
datecreated:2023..2025 (ext:.py OR ext:.js OR ext:.rb) content:"password"
|
如果您想要更多搜索操作符和查询,请查看git仓库:
GitHub - ZephrFish/LOLSearches: 用于explorer和sharepoint的无文件攻击搜索