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     


目录
相关文章
KTV点歌程序
KTV点歌程序
122 0
|
6月前
|
移动开发 小程序 NoSQL
上门家政按摩H5小程序源码
1、服务器环境:CentOS7 + 宝塔 + Nginx + php 2、环境:PHP7.2+ MySQL5.6 3、安装扩展:fileinfo、redis
133 2
上门家政按摩H5小程序源码
|
6月前
|
小程序 JavaScript Java
智慧自助餐饮系统
智慧自助餐饮系统
|
数据可视化 开发者 Python
电子杨伟的终结者🎮
虚幻引擎5(Unreal Engine 5)是由Epic Games开发的一款领先的游戏引擎。它于2021年首次亮相,并在游戏开发界引起了热烈的讨论和期待。作为虚幻引擎系列的最新版本,虚幻引擎5通过引入许多创新的功能和技术,为游戏开发者带来了前所未有的灵感和可能性。本文将介绍虚幻引擎5的主要特点和优势,并探讨其在游戏开发领域的重要意义。
upc 2021秋组队训练赛第二场
upc 2021秋组队训练赛第二场
64 1
upc 2021秋组队训练赛第二场
|
安全 芯片
真·环保车!非洲男孩用木头制作太阳能电动车,能连电台放音乐,还支持蓝牙通话
真·环保车!非洲男孩用木头制作太阳能电动车,能连电台放音乐,还支持蓝牙通话
144 0
真·环保车!非洲男孩用木头制作太阳能电动车,能连电台放音乐,还支持蓝牙通话
|
传感器
一起玩转树莓派(21)——火情报警器
很多公寓和写字楼中都有完善的防火装置,你想知道这些设备是如何对是否产生了火情进行判断的么?当有物体燃烧时,会产生火焰和烟雾,如果我们可以通过传感器对火焰和烟雾进行,实际上就可以做到检测是否有火情发生。
728 0
制作简单太阳追踪器(电子向日葵)
1.准备 原件 说明 LM358模块 1个 6.8~10K的电阻或变阻器 2个 光敏电阻 2个 电机 1个 电源 - 导线电源 - 2.
3930 0
|
小程序 5G 芯片
果冻有家,房联网概念的平台化应用;字节跳动申请“抖唱”商标
果冻有家,房联网概念的平台化应用;字节跳动申请“抖唱”商标
294 0