美文网首页
记第一次打酱油CTF的一道RSA题(😂)

记第一次打酱油CTF的一道RSA题(😂)

作者: 夏夜星语 | 来源:发表于2017-11-06 21:26 被阅读152次

上周末参加了集团组织的第一届CTF,因为对RSA算法感兴趣,研究了下,但是直到今天才在同事的帮助下解出来~不过还是非常开心的。拿到flag的那一刻,真是兴奋!!!哈哈哈😄

1.RSA算法了解链接:阮一峰前辈介绍,值得拥有

RSA算法原理(一),
RSA算法原理(二)

2.CTF题目:

image.png 点击Download,下载的文件是 image.png

其中,encrypted里的数据:

14761226233619930913789444725092447007613560598267346585342315453772027264412167927977755707329661392276505024453621240583362624447351938222371314669018972810255713416361723565228156367311359232833988723297469009681586000128401084727085783675600327001956247797488990161285491545910756889281566068792425724492472261816080144975111092812011003235523336908625210763606938142957083944176073970599497683544430874740263720939640031645375948163111883171958810033385293575085726496009401227983165821316892351815472499136007182227653441941290055629867880246323810810538976514884239316177241582108067917829554426524658993662096

然后weird_rsa.py里的代码:

#!/usr/bin/env python3

import binascii

e = 65537
n = 26221250500210405881132117557481723828766403943957950577451874805030106596081117375156772427206128405044267565826746522083073344532158814742511219204087934469113726393167485385378981630858737362324790588554286527642921364757519448451820127769942271309179542598449740660811048250973469013409521371791098074887056492924891157941526458248272889917641905464741404650030958545690892412495947165576458308474382558997629624440993069542093798549029729504677699266868041518498869029774178904303543559872895807099482683032802362220977267523960685985521766229201489330046455426324265875811125282379015211742752299449996253304837

def encrypt(m):
    mi = int(binascii.hexlify(m), 16)
    return pow(mi, d, n)

if __name__ == '__main__':
    import sys
    if len(sys.argv) <= 1:
        print('usage: %s <plain text message>' % sys.argv[0])
        sys.exit()
    print(encrypt(sys.argv[1].encode('ascii')))

3. 分析:

    1. 拿到的encrypted是c,然后代码里有e, n。那么现在只需要知道d就能解出来。
      其中,c是经过m^e === c(mod n)(简书不支持Latex!)得出的加密文。
    1. 然后我们已经拿到了n, 和e, 和c, 要得到原始数据m,需要得到d,那么该怎么算才能得到d?

当时做的时候,觉得首先是分解N嘛,分解出来p,q,然后就能知道d了,通过公式计算,但是用网上的工具分解不出来啊,那么n太大了感觉。~~~所以一直没有思路

    1. !!!其实,需要注意的是,题目是weird_rsa,也就是说,这个rsa算法很有可能在哪一步是不符合真正的rsa算法要求的!!!
      脑洞来了,猜想N:这个数可能根本不是两个大质数p,q相乘的积,而是一个大质数。那么N的欧拉函数是什么?是N-1啊!
    1. 由上,得到N的欧拉函数φ(n),此刻,根据公式 image.png 算出d.
    1. 然后,根据公式 image.png 用pow(c, d, n)算出(c^d%n)的值m:
>>> pow(c, d, n)
38321129010645758619476701506985896445313197885910909L
    1. 上面的数据是long int型的m,然后转换成16进制的m.
>>> hex(38321129010645758619476701506985896445313197885910909)
'0x666c61677b6169766f687365654c6f6f4c3273686f7dL'
    1. 然后利用在线工具,将16进制数据转换为ascii码字符:终于得到了flag,啊啊啊!!!


      image.png

      好高兴!!!

PS: 查ascii表知,所有的ascii字符都可以用两位16进制数表示,而一共需要126个10进制数来表示,所以从数字转字符,最好由16进制数转ascii,这样,计算机通过2位2位一分割,才会得到正确的ASCII字符串。

2017-11-06 晚 申城

相关文章

  • 记第一次打酱油CTF的一道RSA题(😂)

    上周末参加了集团组织的第一届CTF,因为对RSA算法感兴趣,研究了下,但是直到今天才在同事的帮助下解出来~不过还是...

  • RSA从原理到ctf解题(解题篇Ⅰ)

    bugku rsa 一道关于rsa常规的ctf题目(来自bugku):链接:https://ctf.bugku.c...

  • RSA 原理和一些攻击方法

    Intro 很多CTF的crypto题目都有RSA题,而我每次看到RSA都很慌。。。因为数学差? 在研究CSAW2...

  • wireshark

    一道ctf题,流量题 给的流量包放到wireshark里,过滤规则http.request.method ==”P...

  • 一道ctf题

    MISC 图片隐写 binwalk -e 提取出来一个压缩包 fcrackzip 爆破看了下提示是四位纯数字f...

  • 打酱油记

    9.25 今天加班到半点办,回家吃了水果当晚餐。同事要了一个茶饼,已装好。 关注点:同事说要送亲戚一款实惠的好茶 ...

  • “打酱油”记

    毕业后,总听同学们提及自己的孩子已经可以去打酱油了。我家浩初,今年七岁,未独立离家帮忙打过酱油。 早上,煮了粥,某...

  • 6月安恒杯web2 —— 一道SSRF题

    title: 一道SSRF题date: 2019-07-04 13:42:44tags:- CTF- SSRF- ...

  • 34c3ctf-urlstorage复现

    拿34c3ctf的一道题学习一下rpo漏洞和django的配置 测试环境 Github上的一个CTF题目的源码,利...

  • 记录一道CTF题

    1.源码: Writeup: 利用工具:蚁剑:https://github.com/AntSwordProject...

网友评论

      本文标题:记第一次打酱油CTF的一道RSA题(😂)

      本文链接:https://www.haomeiwen.com/subject/bakrmxtx.html