NSSCTF Round#16 Basic crypto misc-wp

这篇具有很好参考价值的文章主要介绍了NSSCTF Round#16 Basic crypto misc-wp。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CRYPTO

pr

题目

CRT

from Crypto.Util.number import *
import random

flag=plaintext = 'NSSCTF{****************}'
charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
padding_length = 100 - len(plaintext)

for _ in range(padding_length):
    plaintext += random.choice(charset)

public_exponent = 31413537523
message = bytes_to_long(plaintext.encode())
assert message > (1 << 512)
assert message < (1 << 1024)

prime_p = getPrime(512)
prime_q = getPrime(512)
prime_r = getPrime(512)
n1 = prime_p * prime_q
n2 = prime_q * prime_r
ciphertext1 = pow(message, public_exponent, n1)
ciphertext2 = pow(message, public_exponent, n2)
print('c1=', ciphertext1)
print('c2=', ciphertext2)
print('p=', prime_p)
print('r=', prime_r)


'''
c1= 36918910341116680090654563538246204134840776220077189276689868322808977412566781872132517635399441578464309667998925236488280867210758507758915311644529399878185776345227817559234605958783077866016808605942558810445187434690812992072238407431218047312484354859724174751718700409405142819140636116559320641695
c2= 15601788304485903964195122196382181273808496834343051747331984997977255326224514191280515875796224074672957848566506948553165091090701291545031857563686815297483181025074113978465751897596411324331847008870832527695258040104858667684793196948970048750296571273364559767074262996595282324974180754813257013752
p= 12101696894052331138951718202838643670037274599483776996203693662637821825873973767235442427190607145999472731101517998719984942030184683388441121181962123
r= 10199001137987151966640837133782537428248507382360655526592866939552984259171772190788036403425837649697437126360866173688083643144865107648483668545682383
'''

我的解答:

这道题也很常见,首先我们来简单分析一下题目吧!

题目给了三个512位的素数p,q,r,并且有:

n1 = p * q

n2 = q * r

密文如下:

c1 = m ** e mod n1

c2 = m ** e mod n2

题目给出了密文c1,c2和p,r,需要我们解出flag。

题目没有给出q,而且n1和n2都有公因子q,因此根据同余性质,我们可以把两个式子分别转到模p和模r下:

c1 = m ** e mod p

c2 = m ** e mod r

根据题目提示crt得到:

c = m ** e mod pr

由于flag只填充到100字节,即800bit左右,满足题目判断条件。因此在模pr下肯定能得出结果。

exp:

#sage
from sympy.ntheory.modular import crt
from Crypto.Util.number import *

c1= 36918910341116680090654563538246204134840776220077189276689868322808977412566781872132517635399441578464309667998925236488280867210758507758915311644529399878185776345227817559234605958783077866016808605942558810445187434690812992072238407431218047312484354859724174751718700409405142819140636116559320641695
c2= 15601788304485903964195122196382181273808496834343051747331984997977255326224514191280515875796224074672957848566506948553165091090701291545031857563686815297483181025074113978465751897596411324331847008870832527695258040104858667684793196948970048750296571273364559767074262996595282324974180754813257013752
p= 12101696894052331138951718202838643670037274599483776996203693662637821825873973767235442427190607145999472731101517998719984942030184683388441121181962123
r= 10199001137987151966640837133782537428248507382360655526592866939552984259171772190788036403425837649697437126360866173688083643144865107648483668545682383
e  = 31413537523

n = [p,r]
c = [c1,c2]
M = crt(n,c)[0]

phi = (p-1)*(r-1)
d = inverse(e,phi)
print(long_to_bytes(pow(M,d,p*r)))

#NSSCTF{yUanshEnx1ncHun2o23!}

break

题目

私钥好像坏掉了,如何拿到里面的数据捏~

pri-break.pem:

Bc8tSTrvGJm2oYuCzIz+Yg4nwwKBgQDiYUawe5Y+rPbFhVOMVB8ZByfMa4LjeSDd
Z23jEGvylBHSeyvFCQq3ISUE40k1D2XmmeaZML3a1nUn6ORIWGaG2phcwrWLkR6n
ubVmb1QJSzgzmFHGnL56KHByZxD9q6DPB+o6gGWt8/6ddBl2NIZU/1btdPQgojfA
XXJFzR92RQKBgQC7qlB0U7m2U4FdG9eelSd+WSKNUVllZAuHji7jgh7Ox6La9xN5
miGZ1yvP44yX218OJ9Zi08o6vIrM6Eil45KzTtGm4iuIn8CMpox+5eUtoxyvxa9r
s2Wu+IRZN9zCME+p+qI8/TG27dIyDzsdgNqcUo8ESls7uW5/FEA7bYTCiQKBgQC7
1KybeB+kZ0zlfIdi8tVOpeI+uaHDbdh3+/5wHUsD3hmfg7VAag0q/2RA1vkB/oG1
QVLVHl0Yu0I/1/u5jyeakrtClAegAsvlrK+3i321rGS4YpTPb3SX1P/f3GZ7o7Ds
touA+NHk8IL9T7xkmJYw5h/RLG32ucH6aU6MXfLR5QKBgD/skfdFxGWxhHk6U1mS
27IM9jJNg9xLz5nxzkqPPhLn+rdgIIuTuQtv++eEjEP++7ZV10rg5yKVJd/bxy8H
2IN7aQo7kZWulHTQDZMFwgOhn0u6glJi+qC8bWzYDFOQSFrY9XQ3vwKMspqm+697
xM+dMUW0LML6oUE9ZjEiAY/5
-----END PRIVATE KEY-----

密文:

6081370370545409218106271903400346695565292992689150366474451604281551878507114813906275593034729563149286993189430514737137534129570304832172520820901940874698337733991868650159489601159238582002010625666203730677577976307606665760650563172302688129824842780090723167480409842707790983962415315804311334507726664838464859751689906850572044873633896253285381878416855505301919877714965930289139921111644393144686543207867970807469735534838601255712764863973853116693691206791007433101433703535127367245739289103650669095061417223994665200039533840922696282929063608853551346533188464573323230476645532002621795338655

我的解答:

题目泄露了私钥pem文件的尾部(头部缺失)。

参考文章:你懂RSA吗

把数据按02简单分组,猜测本题flag较短,我们直接在模q下解密。

exp:

from Crypto.Util.number import *

q = 0xe26146b07b963eacf6c585538c541f190727cc6b82e37920dd676de3106bf29411d27b2bc5090ab7212504e349350f65e699e69930bddad67527e8e448586686da985cc2b58b911ea7b9b5666f54094b38339851c69cbe7a2870726710fdaba0cf07ea3a8065adf3fe9d741976348654ff56ed74f420a237c05d7245cd1f7645
dq = 0xbbd4ac9b781fa4674ce57c8762f2d54ea5e23eb9a1c36dd877fbfe701d4b03de199f83b5406a0d2aff6440d6f901fe81b54152d51e5d18bb423fd7fbb98f279a92bb429407a002cbe5acafb78b7db5ac64b86294cf6f7497d4ffdfdc667ba3b0ecb68b80f8d1e4f082fd4fbc64989630e61fd12c6df6b9c1fa694e8c5df2d1e5
c = 6081370370545409218106271903400346695565292992689150366474451604281551878507114813906275593034729563149286993189430514737137534129570304832172520820901940874698337733991868650159489601159238582002010625666203730677577976307606665760650563172302688129824842780090723167480409842707790983962415315804311334507726664838464859751689906850572044873633896253285381878416855505301919877714965930289139921111644393144686543207867970807469735534838601255712764863973853116693691206791007433101433703535127367245739289103650669095061417223994665200039533840922696282929063608853551346533188464573323230476645532002621795338655

m = pow(c,dq,q)
print(long_to_bytes(m))
# flag{oi!_you_find___what_i_Wa1t_talK_y0n!!!}

MISC

Litter(一、二、三)

题目信息

公司的服务器被人入侵了,并且公司的一些敏感信息被攻击者所盗取。现在你作为公司的 SOC 分析师,运维部门为你提取出来了当时时间段内服务器的流量数据,请对流量数据进行分析研判,在其中抽丝剥茧。

1. 请找到攻击者所使用到的隧道工具的文件名称(如 Supertools.exe ),请问文件名称的md5 lowercase的值是什么?

2. 攻击者试图将攻击过程中所使用的隧道工具重命名进行隐藏,请问重命名后的文件名是什么?

3. 攻击者在服务器上窃取了一份客户数据文件,请问在这份文件中,第418条记录所记录的客户的电子邮箱地址为?

我的解答:

题目给了一个流量包,流量分析可以清楚地看到有很多向microsoft365.com发送的dns请求。

我们使用tshark提取所有请求,然后放到cyberchef里分析即可

"D:\Wireshark\tshark.exe" -r suspicious_traffic.pcap -T fields -e dns.qry.name > data.txt

问题一、二:前两问都可以直接找到。答案如下:

dnscat2-v0.07-client-win32.exe
win_install.exe

 问题三:直接搜索@符号定位邮箱的位置,然后发现格式是csv,根据第一个行号搜索418找到位置即可。

bneal@gmail.com

 文章来源地址https://www.toymoban.com/news/detail-787839.html

到了这里,关于NSSCTF Round#16 Basic crypto misc-wp的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【misc】[NSSRound#12 Basic]Secrets in Shadow --linux提权,shadow文件hash爆破

    首先使用ssh连上主机 : ssh ctf@node5.anna.nssctf.cn -p 28844  接着再输入 ls -a l查看文件 尝试打开文件,发现权限不够,根据题目的提示打开shadow文件 在以前的Linux系统中,用户名、所在的用户组、密码(单向加密)等信息都存储在、/etc/shadow的 文件中,很多软件通过调用这个文件

    2024年02月04日
    浏览(32)
  • [NSSRound#16 Basic]RCE但是没有完全RCE

    题目代码: 第一个是md5强类型比较,用数组 md5_1[]=1md5_2[]=2 不行,那就用md5碰撞,使用payload: 第二个是md5弱类型比较, 只要两个数的md5加密后的值以0e开头就可以绕过,因为php在进行弱类型比较(即==)时,会先转换字符串的类型,再进行比较,而在比较时因为两个数都是以0e开

    2024年01月23日
    浏览(60)
  • NSSCTF第10页(3)

    第一题: LitCTF{First_t0_The_k3y! (1/?) 第三题: ?php // 第三个彩蛋!(看过头号玩家么?) // R3ady_Pl4yer_000ne (3/?) ? 第六题: wow 你找到了第二个彩蛋哦~ _S0_ne3t? (2/?) 第七题: 这个好像是最后一个个彩蛋 F1rst_to_Th3_eggggggggg!} 拼接: LitCTF{First_t0_The_k3y!_S0_ne3t?_R3ady_Pl4yer_000ne_F1rst_to_Th3_egg

    2024年02月05日
    浏览(19)
  • NSSCTF做题(3)

    代码审计 ?php include \\\'utils.php\\\'; if (isset($_POST[\\\'guess\\\'])) {     $guess = (string) $_POST[\\\'guess\\\'];     if ($guess === $secret) { //两个变量相等         $message = \\\'Congratulations! The flag is: \\\' . $flag;     } else {         $message = \\\'Wrong. Try Again\\\';     } } if (preg_match(\\\'/utils

    2024年02月07日
    浏览(30)
  • NSSCTF第十页(2)

    题目提示是jinja2模板 怎么感觉之前做过,看到了注入  随便进行一下注入,发现了过滤 大致的黑名单 正常用的payload  因为过滤了东西,所以就可以用request.cooike来进行注入 get: ?name={{self[request.cookies.c][request.cookies.d][request.cookies.e][request.cookies.f][request.cookies.g].open(request.cooki

    2024年02月05日
    浏览(21)
  • NSSCTF——Web题目2

    目录 一、[HNCTF 2022 Week1]2048 二、[HNCTF 2022 Week1]What is Web 三、[LitCTF 2023]1zjs 四、[NCTF 2018]签到题 五、[SWPUCTF 2021 新生赛]gift_F12 一、[HNCTF 2022 Week1]2048 知识点:源代码审计 解题思路:    1、打开控制台,查看源代码,题目提示我们需要大于20000分,找到定义分数这一个变量,修改

    2024年02月11日
    浏览(26)
  • nssctf web 入门(6)

    这里通过nssctf的题单web安全入门来写,会按照题单详细解释每题。题单在NSSCTF中。 想入门ctfweb的可以看这个系列,之后会一直出这个题单的解析,题目一共有28题,打算写10篇。 目录 [SWPUCTF 2021 新生赛]caidao [SWPUCTF 2021 新生赛]easyrce [SWPUCTF 2021 新生赛]babyrce [SWPUCTF 2021 新生赛]

    2023年04月21日
    浏览(27)
  • nssctf web 入门(3)

    目录 [NISACTF 2022]easyssrf  [SWPUCTF 2021 新生赛]ez_unserialize  [SWPUCTF 2021 新生赛]no_wakeup 这里通过nssctf的题单web安全入门来写,会按照题单详细解释每题。题单在NSSCTF中。 想入门ctfweb的可以看这个系列,之后会一直出这个题单的解析,题目一共有28题,打算写10篇。 [NISACTF 2022]easys

    2023年04月21日
    浏览(23)
  • nssctf web 入门(7)

    这里通过nssctf的题单web安全入门来写,会按照题单详细解释每题。题单在NSSCTF中。 想入门ctfweb的可以看这个系列,之后会一直出这个题单的解析,题目一共有28题,打算写10篇。 [SWPUCTF 2021 新生赛]hardrce 这里过滤了所有的字母我们肯定要编码,同时又过滤了很多字符,我们发现没

    2023年04月18日
    浏览(25)
  • NSSCTF Pwn Page 1 - 2

    NSSCTF Pwn 第一页-第二页全部题目解析。 刷了大概一个月的NSSCTF,对Pwn的理解更高了,虽然也没高到哪去。 使用NC连接题目,获取flag值。 查看源码 不是ELF程序,所以直接打开查看。 发现是一个过滤了 cat , ls , cd , echo , ${IFS} 的shell程序。 那么本题的意思就是绕过这个blacklist即

    2024年02月06日
    浏览(18)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包