BUU [vnctf2023]电子木鱼

简介: BUU [vnctf2023]电子木鱼

BUU [vnctf2023]电子木鱼

先看看题目,点不了。

看看源码。Rust整数溢出。

在 Rust 中,整数类型默认是有符号整数类型,意味着这些整数类型可以表示正数和负数。对于有符号整数类型,最高位用来表示符号,0 表示正数,1 表示负数。 当一个正数进行整数溢出时,也就是它的值超过了它的类型所能表示的最大值,这个值会被截断为该类型的最小值。因为有符号整数类型的最高位表示符号,当这个值被截断时,最高位的值会变成 1,表示这个值是一个负数。 举个例子,假设使用 Rust 的 i8 类型,它的最大值是 127,最小值是 -128。如果一个 i8 类型的值为 120,然后将它加上 10,那么它的值就会溢出,变成 -126。这是因为 120 + 10 = 130,而 130 超过了 i8 类型的最大值 127,所以这个值会被截断为 -128 + (130 - 128) = -126。 因此,在 Rust 中,正数进行整数溢出后的结果会变成负数,这是由于有符号整数类型的设计所决定的。

核心代码:

const PAYLOADS: &[Payload] = &[
    Payload {
        name: "Cost",
        cost: 10,
    },
    Payload {
        name: "Loan",
        cost: -1_000,
    },
    Payload {
        name: "CCCCCost",
        cost: 500,
    },
    Payload {
        name: "Donate",
        cost: 1,
    },
    Payload {
        name: "Sleep",
        cost: 0,
    }
-----------------------------------------------------------------------------------------
 if GONGDE.get() > 1_000_000_000 {
        context.insert(
            "flag",
            &std::env::var("FLAG").unwrap_or_else(|_| "flag{test_flag}".to_string()),
        );
    }
-----------------------------------------------------------------------------------------
if cost != 0 {
            GONGDE.set(GONGDE.get() - cost as i32);
        }
-----------------------------------------------------------------------------------------
#[post("/upgrade")]
async fn upgrade(body: web::Form<Info>) -> Json<APIResult> {
    if GONGDE.get() < 0 {
        return web::Json(APIResult {
            success: false,
            message: "功德都搞成负数了,佛祖对你很失望",
        });
    }

    if body.quantity <= 0 {
        return web::Json(APIResult {
            success: false,
            message: "佛祖面前都敢作弊,真不怕遭报应啊",
        });
    }

    if let Some(payload) = PAYLOADS.iter().find(|u| u.name == body.name) {
        let mut cost = payload.cost;

        if payload.name == "Donate" || payload.name == "Cost" {
            cost *= body.quantity;
        }

        if GONGDE.get() < cost as i32 {
            return web::Json(APIResult {
                success: false,
                message: "功德不足",
            });
        }

        if cost != 0 {
            GONGDE.set(GONGDE.get() - cost as i32);
        }

        if payload.name == "Cost" {
            return web::Json(APIResult {
                success: true,
                message: "小扣一手功德",
            });
        } else if payload.name == "CCCCCost" {
            return web::Json(APIResult {
                success: true,
                message: "功德都快扣没了,怎么睡得着的",
            });
        } else if payload.name == "Loan" {
            return web::Json(APIResult {
                success: true,
                message: "我向佛祖许愿,佛祖借我功德,快说谢谢佛祖",
            });
        } else if payload.name == "Donate" {
            return web::Json(APIResult {
                success: true,
                message: "好人有好报",
            });
        } else if payload.name == "Sleep" {
            return web::Json(APIResult {
                success: true,
                message: "这是什么?床,睡一下",
            });
        }
    }

    web::Json(APIResult {
        success: false,
        message: "禁止开摆",
    })
}

post(“/upgrade”) //在/upgrade后台POST

//如果name=Cost,那么cost=10

//当GONGDE.get() > 1_000_000_000时返回flag

cost *= body.quantity; //在name=Donate或者Cost时,cost=cost乘quantity,超出上限会溢出(截断)

GONGDE.set(GONGDE.get() - cost as i32); //在i32情况下,GONGDE.get() =GONGDE.get() -cost,所以如果GONGDE.get() 要增加,cost<0

payload:
name=Cost&quantity=2100000000     


目录
相关文章
|
5月前
|
小程序 JavaScript Java
智慧自助餐饮系统
智慧自助餐饮系统
|
算法 安全 网络安全
【Sword系列】第七届全国残疾人职业技能大赛样题-网络安全-九宫格算法加密
手机九宫格键盘加密算法是一种在移动设备上使用的密码加密技术。它的基本原理是使用手机键盘上的九宫格来生成一组密钥,以保护用户数据的安全。
120 0
 【Sword系列】第七届全国残疾人职业技能大赛样题-网络安全-九宫格算法加密
|
数据可视化 开发者 Python
电子杨伟的终结者🎮
虚幻引擎5(Unreal Engine 5)是由Epic Games开发的一款领先的游戏引擎。它于2021年首次亮相,并在游戏开发界引起了热烈的讨论和期待。作为虚幻引擎系列的最新版本,虚幻引擎5通过引入许多创新的功能和技术,为游戏开发者带来了前所未有的灵感和可能性。本文将介绍虚幻引擎5的主要特点和优势,并探讨其在游戏开发领域的重要意义。
|
机器学习/深度学习 存储 人工智能
7 Papers & Radios | 无人机3D打印登Nature封面;哈工大用微波驱控机器人
7 Papers & Radios | 无人机3D打印登Nature封面;哈工大用微波驱控机器人
126 0
upc 2021秋组队训练赛第二场
upc 2021秋组队训练赛第二场
62 1
upc 2021秋组队训练赛第二场
|
Ubuntu Windows
产品分享:Qt鸿途电子智慧白板(适合会议机、电子黑板、电子笔记、电子阅读器等场景),当前版本v1.0.0
使用Qt技术为基础,开发的windows/ubuntu/arm电子绘图板,主要为windows,支持触摸鼠标,可以定制跨平台。适合场景:1.会议机场景,办公室,会议室等等,2.教学场景,教室,自习室,课堂等等,3.电子笔记,手持终端等等,4.电子阅读器,作为笔记图层等等,各种其他场景…
产品分享:Qt鸿途电子智慧白板(适合会议机、电子黑板、电子笔记、电子阅读器等场景),当前版本v1.0.0
[UPC] 2021秋组队17
A Quality-Adjusted Life-Year B Gwen’s Gift C Forest for the Trees D H-Index E Driving Lanes F Treasure Spotting G Neighborhood Watch H Small Schedule I Mr. Plow King J Rainbow Road Race
106 0
程序人生 - 桂林西瓜霜含片 & 西瓜霜清咽含片
程序人生 - 桂林西瓜霜含片 & 西瓜霜清咽含片
87 0
|
Java
HDU - 2018杭电ACM集训队单人排位赛 - 1 - Problem E. 逃离机场
HDU - 2018杭电ACM集训队单人排位赛 - 1 - Problem E. 逃离机场
153 0