概述
from secrets import randbelow
from nationalsecret import p, r, k, flag
g = 2
y = pow(g, k, p)
def dododo():
print("Here is my gift for National's Day!")
t = pow(g, r, p)
print(f't = {t}')
print("What do you want?")
c = int(input('c = '))
s = (r + c*k) % (p - 1)
print("This is another gift:")
print(f's = {s}')
def gogogo():
print("Another chance:")
t = int(input('t = '))
c = randbelow(p)#返回一个从0到p的数字
print("Here is my real challenge:")
print(f'c = {c}')
print("Give me your answer.")
s = int(input('s = '))
return pow(g, s, p) == t * pow(y, c, p) % p
print("Happy National's Day!")
print("Don't play CTF these days.")
print("Just go out and play~")
print("Don't finish this chall,")
print("although I should tell you that")
print(f"p = {p}")
dododo()
if gogogo():
print(f"FUIYOH! You can get flag: {flag}")
print("and then go out and play!")
else:
print("HAIYAA! You are wrong. Just go out and play!")
看这个题目给的提示nc pwn.challenge.ctf.show 28022(随机刷新,每个人不一样),可以告诉我们这道题目用的是nc连接,有什么用呢?看第一行的
from nationalsecret import p, r, k, flag
这里的nation.......不是一个库,只是一个单纯的文件,它把p,r,k,flag提前写好,放到一个文件里,然后使用这个脚本调用文件,写法就是这样,所以如果想运行脚本,就要把这个文件和脚本放到同一个文件夹下,但是它现在不在一个文件夹啊,所以就使用nc链接,后面的28022就是端口,这样的话我们就可以读取到那个nation文件,进而运行脚本。
然后这里nc链接需要用到netcat,linux自带,windows需要下载,可以网上找安装包和教程,有困难的话也可以私聊。
题目脚本如上图所示,我们可以注意到它的运行模式大概为先定义两个函数,然后先运行第一个函数,然后再执行if语句,如果gogogo()函数的返回值为True,则输出flag。
那我们就先找到gogogo()函数,观察它的脚本,发现一顿操作后,有一句
pow(g, s, p) == t * pow(y, c, p) % p
也就是说这就是我们最后要实现的东西,那就逐个求解,首先改写一下这个式子,有
在脚本中,我们的已知条件是c和t,t是我们自己随意输入的数字,s也由自己输入,那接下来就是求解k,不妨先去假设一个数字,令s=ck,t=1,再根据余数基本定理:
那我们就可以得到
然后再来看dododo()函数,我们刚才一顿操作只需要求解k,那这样的话,就需要动一些小聪明,
s = (r + c*k) % (p - 1)
看这个公式,如果说我们让c等于0,那它就变成了s=r%(p-1),
看,首先让c=0,s=153,p的数值很大,再看t的数值大小,那是不是也就说明了,r肯定比(p-1)要小,那是不是也就说明了,r就是153,
再让c=1,
同理现在是不是说明r+k=s,那我们现在是不是就能求出来k了
求出k之后,我们按之前的操作,让t=1,s=c*k,那不就解出来了
最后的结果是ctfshow{fb7a44d1-c33e-4d8f-b166-1822cb2f614d}
但是,但是,一定要注意,系统算出来的这些数值是随机的,也就是说如果你按照我的数值输入进去,最后的结果是错误的,所以,务必要自己去令c=0,c=1进行操作,得出来的k值才是属于你的。
如果还有一些小细节出错或可以优化,也请大佬们指出。
最后
以上就是真实热狗为你收集整理的ctfshow-Crypto-红包4(nc连接)的全部内容,希望文章能够帮你解决ctfshow-Crypto-红包4(nc连接)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复