福建省第二届“闽盾杯”部分Write Up

WP—decode

根据题目已知:

n1:  15228664629164509105936278301396170708905691970126305196584505186788860519598413718493859625462561931380632032431490419378905593909771649295663481782473029836321132574188559245931660756414915507930357509270674460219615256962333464689419869130366867401404262606367700782040693275068101244535880649261286041921882470460606034302142183971677715439862839410834231609821777031530457674591868138859358815039755085358568037032478394036448363183057305077227769673701227083943898736796552550712057417053897722979700329662099072959306298177351997084389916443815546425080826441671985030755256185725913397986385179516049927425591  
n2:  28182418532443955655250943929828439725377604572088962537896240628709829618999901367131159759359513146864646169253348651905865895468151210748207509325666501438590382812326109260537618829438786609626137074778638549998280533912080708785604673270460635181275360847313985764185991865570533815651261638439461846512012164531330949433517277559149828806588070421852157781670188281908625986974579194819272643409859915715455134433970119584552350648013116998668938513347083566970423327936691885137812528912263666957628197241313496232397910546498542303925205356813548741679943691886217742767778075067797422624969714343428365022749  
n3:  18355811159408154065817199279776805621878757240392366715869421799780946779485225342662736231980532326015283372375030686507311099745671828649419794838611580909610100636296701054995302819692794479292794716441442731393027118795245239019609474743841061251498233337758043553376098591254587406941205804917663153256036922860462415387926973551020540123742773938055950168965005226319984869124543783579240130888344231027912143592472823564266887957101575622993773291455143915263715932280728961208233983782906070719786115187115449430196335973764600533097718947377609348244073036523422892353195107093782201003551217830556519184839  
e1:  65537  
e2:  27751  
e3:  65537  
c1:  5368342382489380107251269030258282008067103595899117880173297169710980852124379736420135829984131832023988667774795223808420069001078159756328642298736759964890517323144475742861501409284299556459601222657540302786301791897975932176538612601162552795835603779910738886150925504885639254302406755008796950704938463132687940418772021406619622090999564746948113296328739593309200238996686945891130656599419832796482095787039339269564880847130379179831744694000940207887150388411084465949903406848727641093033681144598595895383689139227400553234701993087147186292040330589331703587405822925483701667354935313494938769206  
c2:  21521672635651854919517759696514027081496995002884626306313384597771682621826437868933822942195279941318573525337109548152966094293276717095298929811895186384560362917891928656637913236676702009205642367801075592458101830488916914437754803979953027152373619293870115731171449223105986403604973873007338969000153480949617700626516389419935352576014084068271819009465242491467427642787306345049280205827574043586767133396458785487959251540831856187380154825027964867977651727983254127239427622549059938701125498520279503972702883327594442747467858234391945790597844344295786118320620376681461727686876948563884520137741  
c3:  13940747781246179701167820858098775936269078279837839169409057305686612176371099274767269714494905207551971162649902129137425806839867713157472497469542260664882313041602553845621113546259276402534229231780532278276697961222319054833980226978574905974878218905613341365260453461080117407529132948986104191917111000811731784483944945364091757083949827612260904757837644538366763161154611658652020868326985526984718638276184626634240096213703958275241215175054246685206226179114590838833694648062135027841593419815101363262701960507235056752424778384286627997500871204804629047307688466887868894491042058198480775705486  

n1和n2有公因数p,n2和n3也有公因数p,这样就能直接分解出来3个大素数n了
则普通的rsa,直接带入函数解。

exp:

import gmpy2  
from Crypto.Util.number import long_to_bytes  
 
n1 = 15228664629164509105936278301396170708905691970126305196584505186788860519598413718493859625462561931380632032431490419378905593909771649295663481782473029836321132574188559245931660756414915507930357509270674460219615256962333464689419869130366867401404262606367700782040693275068101244535880649261286041921882470460606034302142183971677715439862839410834231609821777031530457674591868138859358815039755085358568037032478394036448363183057305077227769673701227083943898736796552550712057417053897722979700329662099072959306298177351997084389916443815546425080826441671985030755256185725913397986385179516049927425591  
n2 = 28182418532443955655250943929828439725377604572088962537896240628709829618999901367131159759359513146864646169253348651905865895468151210748207509325666501438590382812326109260537618829438786609626137074778638549998280533912080708785604673270460635181275360847313985764185991865570533815651261638439461846512012164531330949433517277559149828806588070421852157781670188281908625986974579194819272643409859915715455134433970119584552350648013116998668938513347083566970423327936691885137812528912263666957628197241313496232397910546498542303925205356813548741679943691886217742767778075067797422624969714343428365022749  
n3 = 18355811159408154065817199279776805621878757240392366715869421799780946779485225342662736231980532326015283372375030686507311099745671828649419794838611580909610100636296701054995302819692794479292794716441442731393027118795245239019609474743841061251498233337758043553376098591254587406941205804917663153256036922860462415387926973551020540123742773938055950168965005226319984869124543783579240130888344231027912143592472823564266887957101575622993773291455143915263715932280728961208233983782906070719786115187115449430196335973764600533097718947377609348244073036523422892353195107093782201003551217830556519184839  
e1 = 65537  
e2 = 27751  
e3 = 65537  
c1 = 5368342382489380107251269030258282008067103595899117880173297169710980852124379736420135829984131832023988667774795223808420069001078159756328642298736759964890517323144475742861501409284299556459601222657540302786301791897975932176538612601162552795835603779910738886150925504885639254302406755008796950704938463132687940418772021406619622090999564746948113296328739593309200238996686945891130656599419832796482095787039339269564880847130379179831744694000940207887150388411084465949903406848727641093033681144598595895383689139227400553234701993087147186292040330589331703587405822925483701667354935313494938769206  
c2 = 21521672635651854919517759696514027081496995002884626306313384597771682621826437868933822942195279941318573525337109548152966094293276717095298929811895186384560362917891928656637913236676702009205642367801075592458101830488916914437754803979953027152373619293870115731171449223105986403604973873007338969000153480949617700626516389419935352576014084068271819009465242491467427642787306345049280205827574043586767133396458785487959251540831856187380154825027964867977651727983254127239427622549059938701125498520279503972702883327594442747467858234391945790597844344295786118320620376681461727686876948563884520137741  
c3 = 13940747781246179701167820858098775936269078279837839169409057305686612176371099274767269714494905207551971162649902129137425806839867713157472497469542260664882313041602553845621113546259276402534229231780532278276697961222319054833980226978574905974878218905613341365260453461080117407529132948986104191917111000811731784483944945364091757083949827612260904757837644538366763161154611658652020868326985526984718638276184626634240096213703958275241215175054246685206226179114590838833694648062135027841593419815101363262701960507235056752424778384286627997500871204804629047307688466887868894491042058198480775705486  
  
def decodeRsa(n, p, e, c):  
    q = n // p  
    assert n == p * q  
    phin = (p - 1) * (q - 1)  
    d = gmpy2.invert(e, phin)  
    m = pow(c, d, n)  
    print(long_to_bytes(m))  
  

p1 = gmpy2.gcd(n1, n2)  
decodeRsa(n1, p1, e1, c1)  
 
p2 = p1  
decodeRsa(n2, p2, e2, c2)  
 
p3 = gmpy2.gcd(n2, n3)  
decodeRsa(n3, p3, e3, c3)  

结果:
“”"
b"hahaha, you’ve got the flag didn’t you !the front part is :flag{G00d_w4"
b"hahaha, you’ve got the flag didn’t you !the middle part is :y_tO_cR"
b"hahaha, you’ve got the flag didn’t you !the last part is :4ck_RS4}"
flag{G00d_w4y_tO_cR4ck_RS4}
“”"
得到flag:flag{G00d_w4y_tO_cR4ck_RS4}

WP—MyTemplate

在这里插入图片描述
查看页面源码:
在这里插入图片描述
访问:http://39.104.20.57:40779/www.zip
在这里插入图片描述

public function render路由存在文件读取漏洞
测试后发现/etc/passwd可以正常读取
fuzz测试/flag.php可以直接读取flag
构造:
/admin.php?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgL2ZsYWcucGhwJyk7Pz4=
得预期解
在这里插入图片描述
构造:
/admin.php?file=/flag.php
得非预期解
在这里插入图片描述
Flag: flag{49019398db}

WP—密码和杂项真不错

png图片是lsb隐写,将字符PK,zsteg跑lsb跑出一堆pk字符,K转成1,P转成0。用培根解密得到ONE EIGHT ZERO ONE,猜测是密码里面要用到的e,也就是1801,发现e和p-1存在较大公因数,使用AMM算法开根求解
在这里插入图片描述

运行:https://sagecell.sagemath.org/
exp:

#Sage
import random
import time

# About 3 seconds to run
def AMM(o, r, q):
    start = time.time()
    print('\n----------------------------------------------------------------------------------')
    print('Start to run Adleman-Manders-Miller Root Extraction Method')
    print('Try to find one {:#x}th root of {} modulo {}'.format(r, o, q))
    g = GF(q)
    o = g(o)
    p = g(random.randint(1, q))
    while p ^ ((q-1) // r) == 1:
        p = g(random.randint(1, q))
    print('[+] Find p:{}'.format(p))
    t = 0
    s = q - 1
    while s % r == 0:
        t += 1
        s = s // r
    print('[+] Find s:{}, t:{}'.format(s, t))
    k = 1
    while (k * s + 1) % r != 0:
        k += 1
    alp = (k * s + 1) // r
    print('[+] Find alp:{}'.format(alp))
    a = p ^ (r**(t-1) * s)
    b = o ^ (r*alp - 1)
    c = p ^ s
    h = 1
    for i in range(1, t):
        d = b ^ (r^(t-1-i))
        if d == 1:
            j = 0
        else:
            print('[+] Calculating DLP...')
            j = - discrete_log(a, d)
            print('[+] Finish DLP...')
        b = b * (c^r)^j
        h = h * c^j
        c = c ^ r
    result = o^alp * h
    end = time.time()
    print("Finished in {} seconds.".format(end - start))
    print('Find one solution: {}'.format(result))
    return result

def findAllPRoot(p, e):
    print("Start to find all the Primitive {:#x}th root of 1 modulo {}.".format(e, p))
    start = time.time()
    proot = set()
    while len(proot) < e:
        proot.add(pow(random.randint(2, p-1), (p-1)//e, p))
    end = time.time()
    print("Finished in {} seconds.".format(end - start))
    return proot

def findAllSolutions(mp, proot, cp, p):
    print("Start to find all the {:#x}th root of {} modulo {}.".format(e, cp, p))
    start = time.time()
    all_mp = set()
    for root in proot:
        mp2 = mp * root % p
        assert(pow(mp2, e, p) == cp)
        all_mp.add(mp2)
    end = time.time()
    print("Finished in {} seconds.".format(end - start))
    return all_mp


c = 821562155714228494350968286343241874202753771452745916900616612053610190986294297934462409534126095213198464996196364868528238538372119009517541428785632007137206972918081643841690069171088425923887930051635578719252415693144672179185417101210954906623326286804995637775062840407550493095027500638719998

p = 19897846550210846565807788524492364050901480736489979129040638436463635149815428186161001280958415730930156556581274966745574164608778242980049611665461488306439665507971670397595035647317930606555771720849158745264269952668944940061576328219674721623208805067371087817766416300084129945316973502412996143
#q = 112213695905472142415221444515326532320352429478341683352811183503269676555434601229013679319423878238944956830244386653674413411658696751173844443394608246716053086226910581400528167848306119179879115809778793093611381764939789057524575349501163689452810148280625226541609383166347879832134495444706697124741
e=1801
cp = c % p
#cq = c % q
mp = AMM(cp, e, p)
#mq = AMM(cq, e, q)
p_proot = findAllPRoot(p, e)
#q_proot = findAllPRoot(q, e)
mps = findAllSolutions(mp, p_proot, cp, p)
#mqs = findAllSolutions(mq, q_proot, cq, q)
#print(mps, mqs)
def check(m):
    h = hex(m)[2:]
    if len(h) & 1:
        return False

    if bytes.fromhex(h).startswith(b'flag'):
        print( bytes.fromhex(h))
        return True
    else:
        return False


start = time.time()
print('Start CRT...')

for mpp in mps:
    check(mpp)

print(time.time() - start)

end = time.time()
print("Finished in {} seconds.".format(end - start))

在这里插入图片描述
得出flag:flag{Enj01_m1sc_A0d_cr0}

WP—signin

打开txt,发现都是1和0,然后上下很有质感的滑动,猜测是二维码。然后疯狂调整姿势,找到最像二维码的那张,因为太大了所以分了两次截图:
在这里插入图片描述在这里插入图片描述

最后用二维码扫描:
得到flag{5E57527B60}

WP—ICSModbus的秘密

提示说的很明确了,最长的Modbus/tcp,所以wireshark直接搜索modbus
在这里插入图片描述

这个就是最长的,追踪tcp流,找到flag
在这里插入图片描述

Flag{HeiDun_2021_JingSai}

WP—在线电力控制系统消息传送

在这里插入图片描述在这里插入图片描述

题目需要我们发送一个url,简单测试一下,提示必须是dianli.com
在这里插入图片描述
但是直接传入dianli.com依然错误。想到题目提示是parse_url函数存在问题,parse_url()函数能够解析url,并返回关联数组,包含url中的各种组成部分。根据其特性,我们需要构造url:”//dianli.com”,传入参数发现报错提示file_get_contents(//dianli.com)该路径不存在该文件。
(忘记截图了),于是我们尝试用相对路径来读取flag文件,传入url”//dianli.com/…/…/flag.txt”
成功读到flag文件。

WP—日志分析

打开附件,打先日志中记载的是sqlmap注入的信息,用notepad++打开,利用插件对url进行解码就能看到注入的payload,题目要我们猜测密码,直接检索password字样,发现了相关的payload。
在这里插入图片描述

对payload进行分析,发现其一次取出password每一位,判断其ascii码值的大小关系,判断正确返回的长度为675,错误返回长度678,这样我们就可以根据每一位的返回结果判断具体的ascii值。
第一位:110
在这里插入图片描述
第二位:103
在这里插入图片描述
第三位:106
在这里插入图片描述

以此类推,最终结果为:110,103,106,102,100,115,85,98,100,75
将ascii转换为字符:
在这里插入图片描述

得到flag:flag{ngjfdsUbdK}

WP—DNS协议分析

Wireshark打开流量包,过滤出dns流量:
在这里插入图片描述
观察请求和相应的相关流量,发现其中有几条包含奇怪的字符,逐一提取出来:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
将每一串提出来,拼接:ZmxhZ3tlNjYyYWMxNTRjYTM3NmUxYzAwMWVlOGJiZTgxMzE4Yn0K
再base64解码得到flag
在这里插入图片描述
得到flag{e662ac154ca376e1c001ee8bb81318b}

WP—Master of VM

利用ssh连接工具连接上该主机,然后cd到根目录,发现flag.txt文件,cat得到flag。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值