web每做出来,还是太菜了,还是要多做题

Web

ez_js

F12在source中看到main.js,将其中的内容复制在控制台中运行,运行完后控制台会关闭,再次打开控制台,会看到一个

img

打开之后看到还是js代码,但是可以看到

image-20201226115939345

在其中找到flag的其他部分,拼接起来即可

Crypto

RSA签到

没啥难的,就是找到解密的网站即可

几个网站如下

http://www.atoolbox.net/Tool.php?Id=937

https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=jiantou

https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=huaduo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# n:    807862607863494903203347547751222668477246136996519972166847
# c: 6525071913169990474785757170304035615411828876052879070297
# e: 65537

from Crypto.Util.number import *
from gmpy2 import *
n=807862607863494903203347547751222668477246136996519972166847
p=780900790334269659443297956843
q=1034526559407993507734818408829
e=65537
c=6525071913169990474785757170304035615411828876052879070297
d=inverse(e,(p-1)*(q-1))
m=pow(c,d,p*q)
print(long2str(m))

简单的密码学

离散对数攻击

脚本如下

1
2
3
4
5
6
7
8
9
m = 45930439493588458217814199095166325056793804285450102007731089001050571514856332627851425138364361016243889773238664380678029627984235001868004334568770697
c = 5057805883715955343508948629802682033540608675113624374337084633322875196538392521768197949724904990019045804655058020268973563802830621371118940310488041
n = 2 ** 514

import sympy
import binascii
flag=sympy.discrete_log(2**514,c,m)

print(binascii.unhexlify(hex(flag)[2:]))

名字不重要

懂得都懂,是原题

1
https://www.anquanke.com/post/id/200545

名字没想好

第一部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
gift= 12255978148467209895405401462014060633654138661175100957121874362221982957915022396069673248235108357771688051303453363643967834593066030782680214462115370497967778055593927850150182758869847946921291057362002616022538712593775400754634332361618945061055025544419655001567836482206750906414655010614360056137481173664901476116870144816992211793902146834987166288769615612767704010592138813256140678199511291489394523989294805910740127557682458229594376211232977501267410539674224065875285801753027816046254818608535462445306054117075379711073762930279723764342988824053970592468109679774789092077979655857748513636834
import gmpy2
e=103738
c=7357116532209949285136310518084676100522798730487701269950303460540634127932201594120600757671807456790592531487713433579926404640474277692592102315472760853853767347752080563508622523821339163225554653816787201616233932746815764392729597579461985789538131853246938443458331139199802764554726447278501492140335824365867574318693890007499638038064582031311613039571335453968072426153706431456149868515230310567240569544961967582304893471240728585336273245259533905230737876248875784828430507371662455796543123714325161987112223947057481814610592300979207673818538093532100233028106442070524965861451563388404227738574
n=24511956296934419790810802924028121267308277322350201914243748724443965915830044792139346496470216715543376102606906727287935669186132061565360428924230740995935556111187855700300365517739695893842582114724005232045077425187550801509268664723237890122110051088839310003135672964413501812829310021228720112275276180469100308793523051405119335989674132224715582989624204590983857159312466387546505666052162775188773736419909262619409755848412558718676873188073997893894862353873441073313610102773845304906678909624700529896455885309546409645526387707907518497436045821973310653257012148438207441605902771515486273283273
for i in range(100):
phi=gift*i
pq=n+1-phi
p_q=gmpy2.iroot(pq**2-4*n,2)[0]
if gmpy2.is_prime((pq+p_q)//2):
p=(pq+p_q)//2
q=pq-p
break
new_e=e//2
new_d=gmpy2.invert(new_e,(p-1)*(q-1))
m_2=gmpy2.powmod(c,new_d,n)
m=gmpy2.iroot(m_2,2)[0]
import binascii
print(binascii.unhexlify(hex(m)[2:]))
# CUMTCTF{now_you_get

第二部分

很明显给的p和q是相邻的素数

解题思路:
1.题目给了 e,d,c三个值,所以由公式 ed=1 mod (q-1)(p-1) 得到 (ed-1)=k \ (q-1)(p-1) (设k为整数)
2.分析题目可知p,q接近,p*q为2048位,
**所以(p-1)\
(q-1)<=2048计算可知 *e\d-12063 位的,所以K的取值范围为(pow(2,14),pow(2,15))

3.通过爆破K的值,可以得到(p-1)*(q-1) 的值,对phi 开平方,进而求得p,q。这里涉及的算法我通过举例来论证。

image-20201226123419558

脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from gmpy2 import *
from sympy import *
#from libnum import *
from Crypto.Util.number import *
e = 0x10001
d = 19275778946037899718035455438175509175723911466127462154506916564101519923603308900331427601983476886255849200332374081996442976307058597390881168155862238533018621944733299208108185814179466844504468163200369996564265921022888670062554504758512453217434777820468049494313818291727050400752551716550403647148197148884408264686846693842118387217753516963449753809860354047619256787869400297858568139700396567519469825398575103885487624463424429913017729585620877168171603444111464692841379661112075123399343270610272287865200880398193573260848268633461983435015031227070217852728240847398084414687146397303110709214913
c = 5382723168073828110696168558294206681757991149022777821127563301413483223874527233300721180839298617076705685041174247415826157096583055069337393987892262764211225227035880754417457056723909135525244957935906902665679777101130111392780237502928656225705262431431953003520093932924375902111280077255205118217436744112064069429678632923259898627997145803892753989255615273140300021040654505901442787810653626524305706316663169341797205752938755590056568986738227803487467274114398257187962140796551136220532809687606867385639367743705527511680719955380746377631156468689844150878381460560990755652899449340045313521804
d = 14519297697723031496224953772301033569165883208616356699837703756220717249229195213146695656923357394378868735444167631602696573904678412172248043414276910206086892084385988564720914312238316434518024995169814463252129242492227202678878240875905293369168263909256455159691392124769949072754243536472227070447391890140409479709945084894060833468804156778720190688101601664725009609222256314873780002770605127043596912060811904733471592387441742111474341938658516761896926403628885365926903655309306738689809023277824030268579979837642613499180913999651379232105756338399243024739524553588216117189742912479604441636257
c = 23574157314515030841894399693996910252287747536395985840285410194536546768646580704111053676040921830550019965767796038280932469005359270920519250763405535872475345625907947986452218739530197421244240070129909526493952916306821311836861766221812155261751444946282559677005557815746813525162411907545113665605490915464367483833005576787591204417525937745572210195816236947103271664048065491627347939268785403334419989160034526164012966888952162714736497312282011026789187871221751240709801544484784941178786820290118585681595783245449236394480319395321877182096839866054466492123200354772280398476167002177544154960579
for k in range(pow(2, 14), pow(2, 15)):
if (e * d - 1) % k == 0:
phi = (e * d - 1) // k
P1 = iroot(phi, 2)[0] # 对(q-1)*(p-1)开平方
p = nextprime(P1) # 获取素数P
q_1 = phi // (p - 1) # 得到(q-1)
q = q_1 + 1
if (isprime(q)): # 对q进行素性检测
break

n = p * q
m = pow(c, d, n)
m = long_to_bytes(m).decode()

# _the_full_flag!@#$%!!!}

Misc

签到

文本.txt->base64->佛曰->维吉尼亚密码

1
2
3
4
5
5L2b5puw77ya5ZOG576v5Yal6IiN5oCv6Iul6JiH5Y2z5oCv5a+G5qCX5L6E6YKj5oCv5aSa55qk5pWF5L6E562J5a+m5ZCJ5Zad5LiK5rOi5oCb57y96Ky55Yal5aSi5q6/5ZG85L+x5a+G6YO95puw6YKj5a+G5oGQ57y95puz5L+x6Iul5L6E5a+G5a+G6JeQ6Iez5Yal56SZ5ZOG5pyJ56mG5qeD5qWe55qk5qCX55qk5a+G5oGQ5Lul572w44CC5oCv6Ku46YGu6Iez5L6E5pm65ZGQ5q27

佛曰:哆羯冥舍怯若蘇即怯密栗侄那怯多皤故侄等實吉喝上波怛缽謹冥夢殿呼俱密都曰那密恐缽曳俱若侄密密藐至冥礙哆有穆槃楞皤栗皤密恐以罰。怯諸遮至侄智呐死

RFMRHNS{Tlsw_Xctc_Tn!!}

文本2.txt->base64->音符解密

image-20201226121406802

之后维吉尼亚解密

内存取证

用到的命令如下

1
2
3
4
5
6
7
8
9
10
11
volatility -f WIN-6G0M6M15T07-20201222-120531.raw  imageinfo

volatility -f WIN-6G0M6M15T07-20201222-120531.raw --profile=Win7SP1x64 pslist

volatility -f WIN-6G0M6M15T07-20201222-120531.raw --profile=Win7SP1x64 filescan | grep -E 'txt|png|jpg|gif|zip|rar|7z|pdf|doc'

volatility -f WIN-6G0M6M15T07-20201222-120531.raw --profile=Win7SP1x64 printkey -K "SAM\Domains\Account\Users\Names"

volatility -f WIN-6G0M6M15T07-20201222-120531.raw --profile=Win7SP1x64 hashdump -y 0xfffff8a000024010 -s 0xfffff8a000b7d010

volatility -f WIN-6G0M6M15T07-20201222-120531.raw --profile=Win7SP1x64 hivelist

file.txt中的内容如下

1
2
3
4
5
6
ZmxhZ+WJjeWNiuauteS4um1kNSjnlKjmiLflkI065a+G56CBKe+8iGN1bXTnlKjmiLfvvIkK5ZCO5Y2K5q615Li65LqM57u056CB5a2X56ymbWQ1CuS4pOerr21kNei/
m+ihjHNoYTHljbPkuLpmbGFn44CC

flag前半段为md5(用户名:密码)(cumt用户)
后半段为二维码字符md5
两端md5进行sha1即为flag。

image-20201226091631647

1
2
3
4
5
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
:1000:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
cumt:1002:aad3b435b51404eeaad3b435b51404ee:771bae3633234ef91354c68c6d7dded3:::
ctf:1003:aad3b435b51404eeaad3b435b51404ee:700ec8a682f6e41418007992fc604c77:::

cumt的秘密md5解密后为 everyone

扫描二位码内容为lovecumt

image-20201226120433772

flag是

1
2
CUMTCTF{sha1(md5(cumt:everyone)+md5(lovecumt))}
CUMTCTF{474e781ec985094b88fde2f6ecb975b82f90e4a9}