当前位置: 首页 > news >正文

【Writeup】pwnable.kr--blackjack

1. 题目概述

Hey! check out this C implementation of blackjack game!
I found it online

* http://cboard.cprogramming.com/c-programming/114023-simple-blackjack-program.html

I like to give my flags to millionares.
how much money you got?


ssh blackjack@pwnable.kr -p2222 (pw:guest)

Blackjack:二十一点,目标使手中卡牌不超过21,若点数大于庄家则胜。

2. 解题思路

首先连接ssh,查看目录:

ls -l

可以看到对blackjack程序没有任何权限,可以读blackjack.c。接下来查看readme内容:

blackjack@ubuntu:~$ cat readme once you connect to port 9009, the "blackjack" binary will be executed under asm_pwn privilege. get flag.

readme提示,连接到端口9009就会以asm_pwn权限执行blackjack。那么连接到端口:

nc localhost 9009 ./blackjack

程序运行后可以查看规则,和二十一点游戏差不多,规则是手中点数不能大于21。1-10每个扑克牌数字即点数,J、Q、K等于10点,A的点数是11。每轮可以选拿牌(hit)或者不拿(stay),最后比庄家点数大就赢了。在此游戏中本金(cash)是500,游戏开始前可以猜钱数(bet),若赢则获得这些数目的钱,输了同理,猜的数量不可以超过本金。例如:

赢下这局我的钱变成了$620。接下来查看源代码,寻找相关函数:

void cash_test() //Test for if user has cash remaining in purse { if (cash <= 0) //Once user has zero remaining cash, game ends and prompts user to play again { printf("You Are Bankrupt. Game Over"); cash = 500; askover(); } if (cash > 1000000){ FILE* fp=fopen("flag", "r"); char buf[100]; memset(buf, 0, 100); fread(buf, 1, 100, fp); printf("%s\n", buf); fclose(fp); } } // End Function

此函数决定获取flag。如果cash<=0即破产,重启游戏;如果cash>1000000就给flag。

int betting() //Asks user amount to bet { printf("\n\nEnter Bet: $"); scanf("%d", &bet); if (bet > cash) //If player tries to bet more money than player has { printf("\nYou cannot bet more money than you have."); printf("\nEnter Bet: "); scanf("%d", &bet); return bet; }

此函数接收键盘输入的十进制整数,返回bet。没有规定bet<0的情况。

既然游戏的bet规则是赢=cash+bet,输=cash-bet,那么可以尝试输入一个大负数后输掉这一局游戏,这样钱数会超过1000000,从而得到flag。

http://www.jsqmd.com/news/728852/

相关文章:

  • 企业微信会话存档 API 开发实战:合规存档与数据检索全流程
  • 数据流加速器基准测试:Graphcore IPU、Cerebras CS-2与SambaNova SN30对比
  • 在Windows上直接安装安卓应用:APK Installer的五大高效解决方案
  • 【Laravel 12+ AI工程化落地指南】:从零集成LangChain、LlamaIndex与OpenAI,3小时构建生产级智能客服系统
  • 【云藏山鹰代数信息系统】浅析气质砥砺学研究范式
  • 0 代码自动化测试:RF 框架实现企业级 UI 自动化测试
  • 阿里云OSS Java SDK安全升级指南:从硬编码AK到环境变量,我这样管理敏感配置
  • Dify 2026边缘节点部署倒计时:2026年Q3起,未通过Dify Edge Compliance Check的节点将自动退出联邦推理网络
  • 【独家首发】Dify 2026文档解析精度优化内参:基于217万真实业务PDF的误差热力图+12个高危Layout Pattern规避指南
  • TV Bro电视浏览器:智能电视上网的终极解决方案
  • HarmonyOS 6 Progress 组件 - 设置线性进度条和胶囊进度条属性
  • Swoole协程+LLM流式响应落地实践(企业级高并发长连接架构白皮书)
  • 从曼德拉的菜园到你的代码:如何用‘园艺思维’管理你的技术项目(附GitHub实战)
  • Tidyverse 2.0升级后report生成失败?3大隐性兼容性陷阱+5步回滚验证流程全公开
  • 如何用开源AIOps平台Keep终结告警风暴,实现智能运维自动化
  • 新版小学初中课标:义务教育课程方案和各科课程标准(2025年修订版)
  • 从追剧到做视频:硬字幕、软字幕、外挂字幕,选对能让你的作品传播力翻倍
  • 流形优化在LLM训练中的创新应用与Mano优化器解析
  • HarmonyOS 6 QRCode 组件使用文档
  • 岩土力学微观探索:蓝光3D扫描在断面粗糙度分析中的应用
  • KVM虚拟机快照无法删除故障排查实用指南
  • 仿写一个简化版Redis,理解内存数据库
  • 从零构建生产级PHP 9.0 AI聊天机器人:EventLoop选型对比、RAG异步注入、Token流式渲染——面试官最想看的3个代码片段
  • 如何用SteamAutoCrack轻松实现Steam游戏DRM自动破解:完整指南
  • LLEP算法:动态负载均衡优化MoE模型训练
  • 苏州沃虎电子(VOOHU)信号线用共模扼流圈WHLC-2012A-900T0产品介绍
  • 终极指南:30天无限续杯JetBrains IDE试用期重置工具完整教程
  • 利用Taotoken模型广场为特定任务选择性价比最优的大模型
  • 2026年Q2西安二手办公家具回收权威机构排行:红木家具回收二手电脑回收、西安电脑回收、西空调回收、二手红木家具回收电脑回收选择指南 - 优质品牌商家
  • 【云藏山鹰代数信息系统】浅析社会关系力学研究范式