首页 > 其他分享 >西湖论剑web部分题目复现

西湖论剑web部分题目复现

时间:2023-02-07 20:55:05浏览次数:47  
标签:status web checkcode res req flag toString 复现 论剑

扭转乾坤

image-20230206135934736

随便上传一个文件

image-20230206140147512

可以看到返回提示apache拒绝了Content-Type:为multipart/form-data;

这里可以利用RFC标准的差异进行绕过waf

可以使用大写字母任意字母进行waf绕过

image-20230206141558745

添加空格

image-20230206141634883

Node Magical Login

查看controllert.js源代码

首先看一下登录处的代码

function LoginController(req,res) {
    try {
        const username = req.body.username
        const password = req.body.password
        if (username !== "admin" || password !== Math.random().toString()) {
            res.status(401).type("text/html").send("Login Failed")
        } else {
            res.cookie("user",SECRET_COOKIE)
            res.redirect("/flag1")
        }
    } catch (__) {}
}

当username=admin,password=Math.random().toString()才能够登录成功,并返回第一部分flag,并设置正确的cookie

但是Math.random().toString()是随机生成的一个字符串,所以基本不可能登录成功

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 (__) {}
}

这部分代码。当我们登录成功后,会设置正确的cookie

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!")
        }

然后会返回两部分的flag,但是在前面我们以及看过了,是不可能登录成分的

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!")

所以我们这里可以伪造cookie为admin,访问路由/flag1获得第一部分的flag

image-20230206143355703

这样我们就得到了第一部分的flag

接下来看一下获得第二部分flag的代码

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})
    }
}

这里获得flag经历了两个if判断,第一个判断输入的验证码的长度是否为16位

第二个判断验证码是否为aGr5AtSp55dRacer,两个if判断成立进入catch获得第二部分flag

checkcode = checkcode.toLowerCase()

但是toLowerCase()函数回家将输入的验证码强制转为小写,那么我们直接输入aGr5AtSp55dRacer字符串是不能直接获得flag的。

这里可以利用toLowerCase()函数不能处理数组,引起报错从而进入到catch获得flag,

访问/flag2路由

image-20230206144143887

抓包

image-20230206144307806

我们可以吧输入的验证码换为数组进行绕过,但是由于要求长度16

所以我们要让数组里面有16个数据

image-20230206144717073

从而获得第二部分的flag

unusual php

 <?php
if($_GET["a"]=="upload"){
    move_uploaded_file($_FILES['file']["tmp_name"], "upload/".$_FILES['file']["name"]);
}elseif ($_GET["a"]=="read") {
    echo file_get_contents($_GET["file"]);
}elseif ($_GET["a"]=="version") {
    phpinfo();
} 

当a=upload的时候可以上传文件,但是不解析

image-20230206210337210

a=read读取文件,读取我们刚上传的文件

image-20230206210637886

可以读取

尝试读取源码

image-20230206210712794

可以读取,但是出来是乱码,猜测有加密

读取/etc/passwd

image-20230206210802920

可以读取,而且不是乱码

通过读取 /proc/self/maps 查看当前进程的内存映射关系

image-20230206210922987

发现一个zend_test.so扩展

通过php伪协议进行读取这个扩展文件

image-20230206211054826

解密后保存为so文件

import os
import base64
flag=""
imagedata = base64.b64decode(flag)
file = open('1.so', "wb")
file.write(imagedata)
file.close()

之后的知识就是逆向的知识了

ida64位打开so文件

image-20230206212232121

可以看到有rc4加密函数

但是没有密钥,追踪谁引用了rc4加密函数

image-20230206212622191

可以看到my_compile_file调用这个函数

跟进看一下这个函数

image-20230206212849883

不知道这里为什么是空的,贴一个别的师傅的图

image-20230206212921620

这里可以得到密钥

然后对木马文件进行rc4加密

image-20230206213240933

然后通过进行文件上传

image-20230206213357904

访问

image-20230206213550440

发现成功解析了,蚁剑连接

image-20230206213625038

image-20230206213704301

标签:status,web,checkcode,res,req,flag,toString,复现,论剑
From: https://www.cnblogs.com/GTL-JU/p/17099783.html

相关文章

  • javaWeb01-使用idea快速搭建web项目
    本文主要讲述如何使用idea【这里的idea是2021年的】快速搭建web项目【没有使用maven创库】第一步:new->project第二步:选择java空项目第三步:选择路径以及......
  • 我们如何进行Alibaba.com买家性能优化? web优化
    经验总结|我们如何进行Alibaba.com买家性能优化?https://mp.weixin.qq.com/s/Mi9LSBo2BbdnpttOxKK0Ig经验总结|我们如何进行Alibaba.com买家性能优化?原创 原琪(垣启) 阿......
  • 最新版SDWebImage的使用
    我之前写过一篇博客,介绍缓存处理的三种方式,其中最难,最麻烦,最占内存资源的还是图片缓存,最近做的项目有大量的图片处理,还是采用了SDWebImage来处理,但是发现之前封装好的代码报......
  • 基于WebGL可视化3D引擎构建智慧消防云平台
    智慧消防不仅仅是一个平台,一个解决方案,更是火灾救援中的一份安全保障,能为灭火救援提供信息支撑,提高救援效率,实现灭早灭小,充分保障人民群众的生命财产损失,是技术和时代创新发......
  • 2023西湖论剑
    2023西湖论剑NodeMagicalLoginflag分为两部分flag1可以通过Flag1Controller函数获得functionFlag1Controller(req,res){try{if(req.cookies.user==......
  • phpstudy 小皮web面板 RCE漏洞
    前几天爆出phpstudy小皮面板存在RCE漏洞,通过分析和复现发现本质上是一个存储型的XSS漏洞导致的RCE。这是一个很简单的1click的RCE,通过系统登录用户名输入处的XSS配合系统......
  • webrtc windows编译记录
    //cmdsetpath=D:\zzh\depot_tools;%path%setDEPOT_TOOLS_WIN_TOOLCHAIN0setvs2022_install=C:\ProgramFiles\MicrosoftVisualStudio\2022\Community//powershe......
  • python静态web服务器如何实现
    1、编写TCP服务器程序。2、获取浏览器发送的http请求消息数据。3、读取固定的页面数据,将页面数据组装成HTTP响应消息数据并发送给浏览器。4、HTTP响应报文数据发送完成后,关......
  • Web DevOps
    s百度词条是这么解释的: “DevOps(Development和Operations的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟......
  • HGAME_2023_WEB_WP_WEEK3
    PingToTheHost很明显的rce,简单测试一下发现空格,cat,;被办,且执行无回显,空格用${IFS},%09,$IFS$9等等来绕过,我们利用dnslog将执行结果外带出来,这里使用的是http://ceye.io/......