[pasecactf_2019]tornado_casino

题目

from sys import argv
from random import getrandbitsflag = '<redacted>'tornado_banner = '''88              ,d                                                          88              88                                                          88
MM88MMM ,adPPYba,  8b,dPPYba, 8b,dPPYba,  ,adPPYYba,  ,adPPYb,88  ,adPPYba,   88   a8"     "8a 88P'   "Y8 88P'   `"8a ""     `Y8 a8"    `Y88 a8"     "8a  88   8b       d8 88         88       88 ,adPPPPP88 8b       88 8b       d8  88,  "8a,   ,a8" 88         88       88 88,    ,88 "8a,   ,d88 "8a,   ,a8"  "Y888 `"YbbdP"'  88         88       88 `"8bbdP"Y8  `"8bbdP"Y8  `"YbbdP"' '''
casino_banner = '''88                          ""                          ,adPPYba, ,adPPYYba, ,adPPYba, 88 8b,dPPYba,   ,adPPYba,
a8"     "" ""     `Y8 I8[    "" 88 88P\'   `"8a a8"     "8a
8b         ,adPPPPP88  `"Y8ba,  88 88       88 8b       d8
"8a,   ,aa 88,    ,88 aa    ]8I 88 88       88 "8a,   ,a8"  `"Ybbd8"' `"8bbdP"Y8 `"YbbdP"\' 88 88       88  `"YbbdP"\' '''
tornado_art = '''((  "####@@!!$$    ))`#####@@!$$`  ))((  '####@!!$:((  ,####@!!$:   )).###@!!$:`##@@!$:`#@!!$!@#    `#@!$:       @#$#$     `#@!$:       !@!'@!$:'`\   "!$: /`''\  '!: /'"\ : /"-."-/\\\-."//.-"/:`\."-.JrS"."-=_\\
" -."-.\\"-."//.-".`-."_\\-.".-\".-//'''welcome = 'Welcome!\n[1] - To slotmachine\n[2] - Enter promocode\n[3] - Exit\n'''
def sltmchn_wndw(num):print(num)return '|' + '|'.join(list(hex(num)[2:].zfill(8))) + '|'
slotmachine_menu = '[$] - $$$SPIN$$$\n'print(tornado_banner)
print(casino_banner)
print(tornado_art)
user_balance = 10#$
promo = ''
while True:choice1 = input(welcome)if choice1 == '1':print('$$$Its point of no return!$$$\n$$$     all or nothing    $$$\n')print(f'Your balance: {user_balance}')while True:if user_balance > 0:spin = input(slotmachine_menu)if spin == '$':state = getrandbits(32)try:pff_try = int(input('It will be: '), 16)except:exit(0)if pff_try == state:print(sltmchn_wndw(state))print('OMGWTF$$$$$$$$$$$$')print(flag)exit(0)else:print(sltmchn_wndw(state))print('Nice try!')user_balance -= 1print(f'Your balance: {user_balance}')else:exit(0)else:print('Sorry!')exit(0)elif choice1 == '2':if not promo:promo = input('Enter your promocode: ')if promo == 'b33_1_4m_b3333':print('Great!')user_balance += 1000#$else:print('Only once!')elif choice1 == '3':exit(0)

解题

先读程序:

random.getrandbits(32)来生成随机数。

random.getrandbits()使用的是MT19937(伪随机数生成)。

因此我们只要获得连续的624组随机数数据,我们就可以准确获得下一个。

代码如下:

from pwn import *
from mt19937predictor import MT19937Predictorip = '127.0.0.1'
port = '25028'
c = connect(ip, port)
print(type(c))
context.log_level = 'debug'predictor = MT19937Predictor()def promo(c):c.recvuntil("Welcome")c.recvline()c.recvline()c.recvline()c.recvline()c.sendline('2')c.recvuntil('Enter your promocode:')c.sendline("b33_1_4m_b3333")print(c.recvline())result = []def attack(c):c.sendline("1")c.recvline()for i in range(625):c.sendline('$')c.recvuntil('It will be:')c.sendline('1')temp_result = c.recvline()result.append(int(temp_result[:-1].replace('|', ""),16))if __name__=="__main__":promo(c)attack(c)for i in range(625):predictor.setrandbits(result[i],32)print(result)final=predictor.getrandbits(32)c.sendline('$')c.recvuntil('It will be:')c.sendline(hex(final)[2:])print(c.recvline())

关于mt19937predictor可查看这个
答案

flag{6169ce2a-c2f5-46cf-9094-fa83b3b3c066}

[pasecactf_2019]tornado_casino相关推荐

  1. buuctf [pasecactf_2019]flask_ssti

    题目已经告诉是SSTI模板注入了 测试一下 做题时用""发现了过滤 fuzz一下 过滤了很多东西 想到去年打校赛自己未解出来的一题 结合题目提示 是个16进制转换 附上自己写的py ...

  2. BUU刷题记录——5

    October 2019 Twice SQL Injection 由题目名可知为二次注入 username =1' union select database() # username =1' uni ...

  3. BUUCTF(12_1-12_5)

    //最近一直在准备四级所以鸽了几天 [GXYCTF2019]StrongestMind 让计算数字,计算一千次给flag 我们需要写一个脚本 import re import requests fro ...

  4. BUUCTF-模板注入专项刷题

    SSTI: 目录 简单 [CSCCTF 2019 Qual]FlaskLight 签到 [BJDCTF2020]Cookie is so stable twig模板注入 [WesternCTF2018 ...

最新文章

  1. Android stadio 模板 liveTemplate不管用
  2. Lock与synchronized 的区别
  3. Linux 一些基本的操作命令
  4. Qt5中生成和使用静态库
  5. ajax的data传参的两种方式
  6. 防御sql和xss的php代码,PHP防XSS 防SQL注入的代码
  7. WIN8系统安装软件时提示“扩展属性不一致“的解决方法
  8. 《推荐系统笔记(十六)》tf-idf与基于内容的推荐(简单的酒店推荐)
  9. 最简单的视频编码器:基于libx264(编码YUV为H.264)
  10. js window对象常用内容
  11. Atitit Java制作VCARD vcf 以上就是关于vCard的基本介绍,维基百科(英文)https://en.wikipedia.org/wiki/VCard写的比较全,可惜我看不懂。
  12. 屏蔽CDSN烦人的广告
  13. Laravel框架的运行过程
  14. 图片压缩软件有哪些?分享三个好用的图片压缩软件
  15. VMware虚拟机中安装的系统共享主机无线网络的方法
  16. BZOJ 1023 仙人掌图
  17. Linux入门推荐书籍
  18. 用 VeraCrypt 加密闪存盘
  19. 关键词(快排)刷词原理和方法
  20. 项目管理标杆和先驱——华为管理体系(PMP),一文看懂!

热门文章

  1. 你以为ACI=SDN?大错特错!
  2. 未来数据中心运营将靠人工智能和机器学习
  3. 数据中心基础架构 22 年演进
  4. ML之SVM:利用SVM算法对手写数字图片识别数据集(PCA降维处理)进行预测并评估模型(两种算法)性能
  5. FORTRAN学习记录(持续更新)
  6. python thrift demo
  7. js 定时器的用法和清除
  8. 软工作业3—词频统计
  9. cout、cerr、clog
  10. ionic 完美仿微信摇一摇