[GKCTF 2021]easynode

本文详细解析了一次通过弱类型转换和EJS模板引擎漏洞实现远程代码执行(RCE)的过程。首先,分析了应用的WAF过滤规则,利用数组弱类型特性绕过WAF,构造SQL注入,成功登录获取token。接着,通过添加特殊用户污染原型链,最终在/admin路由利用EJS渲染执行RCE。整个过程展示了Web安全中的常见攻击手段和防御绕过策略。

[GKCTF 2021]easynode

知识点:

js 弱类型

ejs 原型链污染

解题:

源码:

const express = require('express');
const format = require('string-format');
const {
   
    select,close } = require('./tools');
const app = new express();
var extend = require("js-extend").extend
const ejs = require('ejs');
const {
   
   generateToken,verifyToken}  = require('./encrypt');
var cookieParser = require('cookie-parser');
app.use(express.urlencoded({
   
    extended: true }));
app.use(express.static((__dirname+'/public/')));
app.use(cookieParser());



let safeQuery =  async (username,password)=>{
   
   

    const waf = (str)=>{
   
   
        // console.log(str);
        blacklist = ['\\','\^',')','(','\"','\'']
        blacklist.forEach(element => {
   
   
            if (str == element){
   
   
                str = "*";
            }
        });
        return str;
    }

    const safeStr = (str)=>{
   
    for(let i = 0;i < str.length;i++){
   
   
        if (waf(str[i]) =="*"){
   
   
            
            str =  str.slice(0, i) + "*" + str.slice(i + 1, str.length);
        }
        
    }
    return str;
    }

    username = safeStr(username);
    password = safeStr(password);
    let sql = format("select * from test where username = '{}' and password = '{}'",username.substr(0,
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值