首页 > 其他分享 >LitCTF 2024(公开赛道)部分 wp

LitCTF 2024(公开赛道)部分 wp

时间:2024-06-04 19:04:40浏览次数:15  
标签:解码 wp 使用 LitCTF 明文 2024 flag 密文

目录

文章目录

一、MISC

1、涐贪恋和伱、甾―⑺dé毎兮毎秒

附件下载得到一张图片,根据题目提示——laosebi;

其实我们可以猜到大概可能是lsb隐藏,所以按道理说我们应该丢进Stegsolve.jar里面,但是这里教一个简单且更便捷的方法;

我们使用kali里面的隐写工具zsteg;

zsteg简介;

zsteg可以检测PNG和BMP图片里的隐写数据。

目前,zsteg支持检测:

1、LSB steganography in PNG & BMP
2、zlib-compressed data
3、OpenStego
4、Camouflage 1.2.1
5、LSB with The Eratosthenes set

github项目:https://github.com/zed-0xff/zsteg

作者网站:http://zed.0xff.me/

安装使用参考文章

使用命令;

zsteg xxx.png

在这里插入图片描述

LitCTF{e8f7b267-9c45-4c0e-9d1e-13fc5bcb9bd6}
2、你说得对,但__

下载附件得到一张二维码扫描没有任何信息;

在这里插入图片描述

那我们就尝试丢进kali使用foremost -i 进行分解,发现得到四张被分割的二维码碎片;

分解图片;

foremost -i xxx.png

foremost使用安装参考文章

在这里插入图片描述

在这里插入图片描述

那这里就简单了,我们可以使用ps自己尝试拼凑一下(听说可以我没尝试过),这里我使用的是脚本直接合成的;

脚本如下;

from PIL import Image

# 假设四个二维码部分分别命名为 1.png, 2.png, 3.png, 4.png
# 并且它们的大小都是相同的

# 读取四个二维码部分
top_left = Image.open('1.jpg')
top_right = Image.open('2.jpg')
bottom_left = Image.open('3.jpg')
bottom_right = Image.open('4.jpg')

# 获取单个部分的宽度和高度
width, height = top_left.size

# 创建一个新的图像,大小是单个部分宽度和高度的两倍
full_qr = Image.new('RGB', (width * 2, height * 2))

# 将四个部分拼接到新图像上
full_qr.paste(top_left, (0, 0))
full_qr.paste(top_right, (width, 0))
full_qr.paste(bottom_left, (0, height))
full_qr.paste(bottom_right, (width, height))

# 保存或展示完整的二维码图像
full_qr.save('full_qr.png')
full_qr.show()

最后直接运行即可;

在这里插入图片描述

使用QR扫描即可;

在这里插入图片描述

LitCTF{Genshin_St@rt!!}
3、原铁,启动!

下载附件得到一张像是什么符号的图片(现在暂时不知道)

在这里插入图片描述

那我们来分析一下;

其实这题相对来说也比较简单算是一道半社工的题目,就是简单对照编码就行,那从题目名字中我们可以得知可能是《原神》和《崩坏:星穹铁道》游戏里的某种编码;

什么是社工?

推荐文章

那我们就直接百度一下原神码表即可;

在这里插入图片描述

得到;LitCTF{good_

接着百度一下崩坏:星穹铁道码表;

在这里插入图片描述

LitCTF{good_gamer}
4、Everywhere We Go

下载得到一首音乐secret,根据常见的音频隐写也就那几个,Audacity、deepsound、silenteye等等;

推荐文章:常见音频隐写

这里我们直接先使用最常见的Audacity进行解析;

在这里插入图片描述

直接全部勾选多视图、波形、频谱图进行查看(以防万一也可以一个一个进行查看,尽量兜查看一遍)

在这里插入图片描述

发现这里好像有东西,我们按住Ctrl+鼠标滚轮进行放大查看;

在这里插入图片描述

LitCTF{Calculate_Step_By_Step}
5、盯帧珍珠

下载得到一张丁真的jpg图片,使用window图片查看发现会卡住,那我们使用010打开进行查看;

在这里插入图片描述

很明显开头GIF,那我们也把图片后缀修改为GIF(注意后缀要大写的GIF);

在这里插入图片描述

我们打开发现是动态图片且里面夹杂着flag,那这里我们肯定要逐帧进行分解,当然这里方法很多我就不一一说明了;

推荐使用在线分解

在这里插入图片描述

LitCTF{You_are_really_staring_at_frames!}
6、舔到最后应有尽有

下载得到LOVE_LETTER.txt文件;

打开查看发现是一大段的base64编码,这里如果去一个一个解码的话效率还有正确率兜太慢了,这里推荐一个非常好用的工具PuzzleSolver(可以说MISC必备工具之一);

在这里插入图片描述

PuzzleSolver简介;

专为misc手打造的瑞士军刀(?),整合了多种脚本(base,字频分析,png/bmp自动修复文件头,图片盲水印等等)的带GUI的工具

下载链接:https://www.123pan.com/s/q2J1jv-Mvavd.html提取码:0905

我们直接Ctrl+A全选复制进去进行解码即可;

在这里插入图片描述

LitCTF{TanJi_j1e_jie_n1_dAi_w0_z0u_b_}
7、关键,太关键了!

下载附件得到两个txt一个flag另外一个key;

在这里插入图片描述

根据题目所给出的提示——好像某些字符出现的频率很高哦

我们可以猜测是字频统计,这里统计字频的方法不唯一可脚本、可在线工具、可PuzzleSolver;

这里我还是使用PuzzleSolver来操作(因为我后台刚好挂着);

在这里插入图片描述

最多的:bingo(因为后面有个横杠看着非常不舒服)

这里如果经验老套的一些misc师傅可能就可以看出来一点了(关键字Keyword密码);

但是我们新手咋办嘞,哎不要慌,我们还是可以使用工具《随波逐流》

随波逐流简介:

1、随波逐流CTF编码工具:一站式编码解码解决方案。
2、随波逐流CTF编码工具是一款功能强大且多功能的编码解码离线集成工具。它旨在为用户提供一站式的编码解码解决方案,满足在网络安全、密码学以及信息技术领域的各种需求。这款工具涵盖了众多经典的编码解码算法,以及一系列创新的隐写识别功能,适用于网络安全、密码学、信息技术等多个领域,为用户提供了全方位的编码解码解决方案。无论是初学者还是专业人士,都可以从中受益,提高编码解码工作的效率和准确性。

下载链接:https://www.123pan.com/s/q2J1jv-Mvavd.html提取码:0905

在这里插入图片描述

根据题目要求全部小写得到;

LitCTF{i_miss_you_boss}
8、女装照流量

下载附件得到一个流量包pacp,那我们丢进Wireshark进行分析;

这边照顾到很多人可能第一次接触蚁剑流量所以分析的比较详细

查看协议分级,发现http文件特别多,那我们全部导出来慢慢分析;

在这里插入图片描述

在这里插入图片描述

得到三张图片,简单分析了一下发现并没什么用,那我们返回继续分析http(可以直接过滤一下);

在这里插入图片描述

观察发现肯定是上传了什么东西(猜测不是zip就是flag文件),而且用的还是使用蚁剑链接上传的;

为什么说是蚁剑链接上传?

  1. User-Agent字符串:蚁剑在发送HTTP请求时可能会使用特定的User-Agent字符串,这可以作为识别流量的一个特征。

  2. HTTP请求模式:蚁剑通常会发送特定格式的HTTP请求,这可能包括特定的参数名、路径或数据格式。

  3. 请求频率:与正常用户流量相比,蚁剑可能会在短时间内发送大量请求,这种异常的请求频率可能会引起注意。

  4. 数据编码:蚁剑可能会使用Base64或其他编码方法来编码发送的数据,这些编码数据在HTTP请求的POST数据或URL参数中可能很容易被识别。

  5. 特定的HTTP参数或路径:蚁剑可能会使用特定的HTTP参数名称或URL路径来传输数据,这些名称或路径可能与常见的WebShell路径或参数相匹配。

  6. 异常的HTTP响应:WebShell可能会返回异常的HTTP响应代码或内容,这些响应可能包含特定的标记或格式,可以作为流量分析的依据。

  7. 加密或混淆的负载:蚁剑可能会加密或混淆其负载以避免检测,这可能表现为请求或响应中不寻常的二进制数据。

所以这题很明显就是蚁剑流量;

在这里插入图片描述

想了解更多流量特征推荐文章:Webshell工具的流量特征分析(菜刀,蚁剑,冰蝎,哥斯拉

所以这里的编码就是URL编码+base64编码混淆的,那我们继续分析看看到底传了个啥;

在这里插入图片描述

我比较喜欢看Length来分析(因为内容比较多的一般都会有点信息在里面),直接先丢进URL进行解码;

URL在线解码

在这里插入图片描述

太乱了没关系,我们直接复制到txt里面进行分析,刚刚也说了是URL+base64,所以这里我们丢进base64在线解码试试看;(注意需要删除前面两个字符,要不然不能正常解码)

在这里插入图片描述

在线base64

不难看出跟我之前想的一样传了个zip,那里面估计就是flag了,那我们继续返回刚刚导出的http的里面进行一个一个查找(这样比较便捷,就是有点枯燥);

在这里插入图片描述

终于的终于我们在导出的文件ma(19).php里面发现了zip,前面有一些多余的数据我们直接选中删除即可,保存并且后缀改zip退出;

在这里插入图片描述

打开发现需要密码,一开始选择爆破但是发现不行,后来想了想密码估计也是在流量包里面,尝试寻找一下;(还是Length最大的优先)

在这里插入图片描述

一个一个往下查(追踪http),还是接着上面的操作(复制红色区域到URL解码再进行base64解码),最后就发现zip的密码了;

在这里插入图片描述

URL解码;

在这里插入图片描述

base64解码;(注意还是像上面一样删除前两个字符,所有base64解码都需要删除,不然就是乱码)

在这里插入图片描述

所以zip密码:PaSsw0rd_LitCtF_L0vely_tanJi

右键打开方式选择记事本打开即可;

在这里插入图片描述

LitCTF{anTsw0rd_fl0w_is_eAsY_f0r_u}
9、The love

下载得到附件得到一张jpg图片、wav结尾音频;

先使用010简单分析一下图片,发现尾部很多PK字符,而且还发现了可疑字符,根据刷题经验猜测图片里有个zip,并且有锁,而这个密码需要我们自己使用掩码爆破出来;

在这里插入图片描述

Litctf???ftctiL

图片直接丢进kali进行分离,得到一个有锁的zip;(不出所料)

在这里插入图片描述

那我们直接尝试掩码爆破;

在这里插入图片描述

密码:Litctf202405ftctiL

我们打开zip,发现里面有一个flag.txt与password.txt;

在这里插入图片描述

在这里插入图片描述

flag不出意外就是没出意外也是假的,不过没关系我们还有一个wav音频没有开始分析;

既然是wav结尾并且现在我们有了password,盲猜一手工具deepsound或者silenteye;(wav音频隐写常用的)

简单尝试了一下,发现并不是silenteye隐写,那就deepsound,但是奇怪的是发生了,deepsound也没有;

实在没办法了,后来简单询问了一下师傅才发现确实是deepsound,但是注意!deepsound2.2才行;

deepsound2.2下载链接

在这里插入图片描述

不要慌我们使用base64进行解码得到:bG92ZV9pc19wYWluZnVs

然后你会发现是错的,因为这个不是最后编码还需要进行一次base64解码(至于为什么还是base64解码可以看一下base64编码的特征)

在这里插入图片描述

密码:love_is_painful

最后导出txt得到flag;

Litctf{wish_you_can_find_your_true_love}

二、CRYPTO

1、small_e

下载得到;

在这里插入图片描述

简单分析一下;

小明文攻击(Small Plaintext Attack)在RSA加密中,特别是针对低加密指数e=3的情况。这种攻击利用了当加密指数e很小,并且明文m足够小以至于m^e < n时,可以直接计算密文ce次方根来恢复明文的情况。

为了实现这个目的,我们可以使用gmpy2库的iroot函数来尝试计算每个密文的立方根。这里是修改后的脚本,它尝试对给定的密文列表c_list进行攻击,以恢复原始的明文消息:

脚本如下:

from Crypto.Util.number import long_to_bytes
import gmpy2

# 给定的RSA公钥参数和密文列表
n = 19041138093915757361446596917618836424321232810490087445558083446664894622882726613154205435993358657711781275735559409274819618824173042980556986038895407758062549819608054613307399838408867855623647751322414190174111523595370113664729594420259754806834656490417292174994337683676504327493103018506242963063671315605427867054873507720342850038307517016687659435974562024973531717274759193577450556292821410388268243304996720337394829726453680432751092955575512372582624694709289019402908986429709116441544332327738968785428501665254894444651547623008530708343210644814773933974042816703834571427534684321229977525229
c_list = [438976, 1157625, 1560896, 300763, 592704, 343000, 1860867, 1771561, 1367631, 1601613, 857375, 1225043, 1331000, 1367631, 1685159, 857375, 1295029, 857375, 1030301, 1442897, 1601613, 140608, 1259712, 857375, 970299, 1601613, 941192, 132651, 857375, 1481544, 1367631, 1367631, 1560896, 857375, 110592, 1061208, 857375, 1331000, 1953125]

flag = ""

for c in c_list:
    # 计算密文c的立方根
    m, exact = gmpy2.iroot(c, 3)
    if exact:
        flag += long_to_bytes(int(m)).decode()
    else:
        print("立方根不是完全的,可能需要检查其他解码方法。")

print(f"Recovered flag: {flag}")

简单分析一下这个脚本:

这个脚本假设每个密文c对应的明文m的立方是小于n的,这样m^3 = c (mod n)简化为m^3 = c。这意味着可以直接计算c的立方根来恢复m

这个脚本还假设每个明文字符单独加密,这是因为它尝试将每个密文的立方根转换回一个字符。这种方法在处理单个字符加密时有效,但如果原始明文是作为一个整体加密的,那么恢复明文的方法将会不同。

此外,exact标志用于检测iroot函数计算的立方根是否是精确的。如果不是,这可能意味着原始明文无法通过这种简单的立方根计算直接恢复。

LitCTF{you_know_m_equ4l_cub3_root_0f_n}
2、common_primes

下载附件得到:

在这里插入图片描述

分析:

当两个RSA公钥共享相同的模数(在这个例子中是p),并且明文消息相同,就可以使用共模攻击(Common Modulus Attack)来恢复该消息。在脚本中,n1n2不是共享相同的模数,因为它们分别是p*q1p*q2的结果。不过,p是两个模数的共同质因数。

共模攻击通常适用于n相同,而e不同的情况。对于这种情况,如果我们有两个密文c1c2,它们使用相同的明文m但不同的公钥(n, e1)(n, e2)加密,我们可以找到一种方法来恢复m

然而,我们不能直接应用标准的共模攻击,因为n1n2不同。不过,由于pn1n2的共同质因数,如果我们能以某种方式找到p,我们就能分别求解每个模数下的明文。

对于给定的n1n2,如果我们知道它们共享一个质因数(在这个例子中是p),我们可以使用最大公约数(GCD)算法来找到p,因为gcd(n1, n2) = p。然后,我们可以使用p来分解每个模数,并使用标准的RSA解密过程来恢复明文。

脚本:

from Crypto.Util.number import *
import gmpy2

# 给定的n1, n2, c1, c2
n1 = 63306931765261881888912008095340470978772999620205174857271016152744820165330787864800482852578992473814976781143226630412780924144266471891939661312715157811674817013479316983665960087664430205713509995750877665395721635625035356901765881750073584848176491668327836527294900831898083545883834181689919776769

n2 = 73890412251808619164803968217212494551414786402702497903464017254263780569629065810640215252722102084753519255771619560056118922616964068426636691565703046691711267156442562144139650728482437040380743352597966331370286795249123105338283013032779352474246753386108510685224781299865560425114568893879804036573

c1 = 11273036722994861938281568979042367628277071611591846129102291159440871997302324919023708593105900105417528793646809809850626919594099479505740175853342947734943586940152981298688146019253712344529086852083823837309492466840942593843720630113494974454498664328412122979195932862028821524725158358036734514252

c2 = 42478690444030101869094906005321968598060849172551382502632480617775125215522908666432583017311390935937075283150967678500354031213909256982757457592610576392121713817693171520657833496635639026791597219755461854281419207606460025156812307819350960182028395013278964809309982264879773316952047848608898562420

# 计算p,因为gcd(n1, n2) = p
p = gmpy2.gcd(n1, n2)

# 由于n1 = p * q1,我们可以通过n1 / p来得到q1
q1 = n1 // p

# 确认e值
e = 65537

# 计算模n1下的私钥d1
phi_n1 = (p-1) * (q1-1)
d1 = gmpy2.invert(e, phi_n1)

# 使用d1对c1进行解密以恢复m
m = pow(c1, d1, n1)

# 将m转换回字节串
flag = long_to_bytes(m)

print(f"Recovered flag: {flag}")

注意,这个脚本假设我们只用n1c1来恢复m,因为我们已经找到了pq1。同样的过程也可以应用于n2c2。这个脚本的关键在于计算p,这是通过计算n1n2的最大公约数(GCD)实现的。一旦我们有了p,就可以像处理标准RSA解密那样恢复明文。

LitCTF{c0mmunity_w1th_two_ciphert3xt}
3、CRT

下载附件打开;

在这里插入图片描述

简单分析一下:

根据题目名发现是中国剩余定理(CRT)攻击RSA加密系统,我们需要假设我们已经有了几个不同的模数n和对应的密文c。这些密文都是由同一个明文m加密得到的,使用相同的指数e

脚本:

from sympy.ntheory.modular import crt
from gmpy2 import iroot
from Crypto.Util.number import long_to_bytes

# 已知的公钥指数
e = 10

# 已知的不同的模数和对应的密文
n_list = [16284549467215459860410219597024063610473673936290355100056351270928590364613988243842136274404316005691228851657707321037165033870804113001550943722154728825877813376691406849932899693973387282799799300076386870984605589385666352824740622229871992727011987847056429850720207816048044538068625281977059392365698031140268787802886018698622326103590834314940280191560618753408741810842189500991556860816195814550884416201667771827582907240044216817705876129993030771943110090291383205720587816820335839616491257078918258839986942101986011761809815192713499542329037877195448381127272183807358011340669666067708631770629, 18874449316683637715798227591079994715220250787784886038879393543606786017564740000007881151950098752600868917271951840433212429335449734520464340460962870875528399394278620757114832553403790578599857545045548782264680469899469733610229824411943119032419052885845035690046611519195843721184869834557481917675133504256150187042147269721516549831707784660343957497462516302534697915170087780048689613921549811073805796084838801677337285061667687328043565589734203160196445644144798845303226939960633632967262794622796927905511547760465906600293964201276584199569541295613430382495278352554280248372584117917520373403063, 13076908038170870040678205430512292701702182383746502395067907294908791921755288520053025319156015431312084703402938465525746196078114225446604200656116848235842943713613538425047483331236843707852400888407037547782069810250229035895403347555287877301409523248658733500963325361631821388259137561613536275954710848967383282290486421290937700396986650186236373076267188846407623991396459884128392118502565707689494271484411270172764553747426536404781904379621870642658609027074757591034785814602602669666257742808888301912575857074138613714693225934811254682687014167022418837710552784925328161453554291397460324648009, 16378397749449315054623854181248970586445531404081850673625192835136416152712968780451149412408644689393643801969477034418829482292894114547339155149570026460766659623960243723741437212596779580161767297321149670682427000047000712397718946486472118638780090056091542235702825736985864963592363421943353726975184567975451918105247987573044010599149673027905021130138957885113596669923366241161695565837122963976988635649640547443201925034845002113548522307980664206158188711548845245115694530280375848933481227411503982144621846732228815377656607983358898296200251680387871097014543693213877074718748683243193584032307, 16561385664507310659703460597815131331175620854125898893505075859155749890511144622913872488783791188180242785479319865960633526830814389031162024199864660323116594980719331106368397062852472114748955889862650270563487466194545102072373606964935390400328607060427961354290055443710114639781630071832997101380097322119243847190066266823291236828718017385537809056374392924015081117151158033309950857254309859691442649968222489177513517837849318096762149934959873646750864750378500351560253453052870424424427631414365680967482680769587570457938750679258205430151223470761518748987038822469422647137405393267829437115661, 27046459277694602448592524332290812177367631061914086306537115904955610821120392893033090428641088790759783810505225125618182431554899875183961418066959811832057748013953098277804562621152445358481976221983179988257658622392669474721482514871569548645762057681213193026792187879687736985533503283192537252904253565317763028483404018596514523171644666753183517320602643087213777450193062371986178076259168860180486748722567326484282893069173271762518110920685267104269429407229859993484209639764440874444582271870147714648808732931399985199947422716048582921727875237459841962093669408116061538502016560235135864203187, 26656304012303785684433399162699704691814095671158676770279115782799819097401667611247727555104978633884125246262630572285699884039990597392442760154412046297340436752418017863089245998557221143069544231044947583991838381529081774245290065442299808728542273138931461712874414662570197142795674160946728850452526786804787060582942714635903943088540232346797109678405554499677459722287119125623191067780196726820726456507802067342186435679967664032334075189916733352409403602499298544374351405005339596410771187606377781063995755795494682971576602822244457151090982442689870155439418641987576796032975032982289138437523, 15430339362720939092241771692575439580654810089653970198317149114896596238037181680990393763581287618371554846982066535980062263001619707606585504112155505335852802431392213092366756058196440934454810685146101829974548748060332228708229146991380736668433937967747468330692411917426038703359064546899782163287526256750039064809093426968389929333819191207284079703677535201724530391246890003928025687520199553868464322185815354591044585221486768114570373992719977614232251764409893171263639718616620216630797031237033969290978218328767317279717825174597882707772846934097838694418308236053838800414834627456689940059791, 18567217334857361786819913577261265078968886790989901098066320191741355103505838160569648197557648144402318678198622602821398215265062903833980611331991924162821902705417905758829862021425828310098183855605162264362860669298956185657733562472361876121183146316333113433547558152618165933865808900552444816088227098441082165477634812598644531670232452276788291537671779564658425789722419032860803991282640262179618723470437500425645011269733791887608702964571393657348573277992781115199432229176320688981128912052074722348557580462855962547978505669490105804175211061178124988260957275350940324541120102820024607088877, 10779265483116424102513175333888918968735912126282080716409998310381429332303237383487628664073567555863832134055945636657550074126628975203541323090803941066893475056319351674995896497450955897099614503220268400135112031310669044989879413178359759130908036871112663414065113664951350386824618325532532761206110118269005313068956882540007289422776225718534047101012876346009269097785027585782628699252006893938086064139042361425306202870627629615292450559291783382487842611805623198422252868756644595549320868144393828052610953995595915294930701560599016888539448223935199483656756326744914184772404419968728372785709] # 这里填入所有的n值
c_list = [644471004204038587358576160407417490938643306027967868486894032686145771114614076076527690366372762614045209015175209880518279715723521182568975220993976451106760236390912778371250746699463366097164369672789316408520079193370191810477580463635224092686607896863852671881543817329521589324466628227730589108339783619357530316049670209743367574983963078106666377633552745384690084183804939047320711873053569717432670155045869610477526046503868585690544254566603491357805849009447674789480061139157433156989123228768899846183291164697221164452100037658563026884070301188916984245139290761779580443049, 644471004204038587358576160407417490938643306027967868486894032686145771114614076076527690366372762614045209015175209880518279715723521182568975220993976451106760236390912778371250746699463366097164369672789316408520079193370191810477580463635224092686607896863852671881543817329521589324466628227730589108339783619357530316049670209743367574983963078106666377633552745384690084183804939047320711873053569717432670155045869610477526046503868585690544254566603491357805849009447674789480061139157433156989123228768899846183291164697221164452100037658563026884070301188916984245139290761779580443049, 644471004204038587358576160407417490938643306027967868486894032686145771114614076076527690366372762614045209015175209880518279715723521182568975220993976451106760236390912778371250746699463366097164369672789316408520079193370191810477580463635224092686607896863852671881543817329521589324466628227730589108339783619357530316049670209743367574983963078106666377633552745384690084183804939047320711873053569717432670155045869610477526046503868585690544254566603491357805849009447674789480061139157433156989123228768899846183291164697221164452100037658563026884070301188916984245139290761779580443049, 644471004204038587358576160407417490938643306027967868486894032686145771114614076076527690366372762614045209015175209880518279715723521182568975220993976451106760236390912778371250746699463366097164369672789316408520079193370191810477580463635224092686607896863852671881543817329521589324466628227730589108339783619357530316049670209743367574983963078106666377633552745384690084183804939047320711873053569717432670155045869610477526046503868585690544254566603491357805849009447674789480061139157433156989123228768899846183291164697221164452100037658563026884070301188916984245139290761779580443049, 644471004204038587358576160407417490938643306027967868486894032686145771114614076076527690366372762614045209015175209880518279715723521182568975220993976451106760236390912778371250746699463366097164369672789316408520079193370191810477580463635224092686607896863852671881543817329521589324466628227730589108339783619357530316049670209743367574983963078106666377633552745384690084183804939047320711873053569717432670155045869610477526046503868585690544254566603491357805849009447674789480061139157433156989123228768899846183291164697221164452100037658563026884070301188916984245139290761779580443049, 644471004204038587358576160407417490938643306027967868486894032686145771114614076076527690366372762614045209015175209880518279715723521182568975220993976451106760236390912778371250746699463366097164369672789316408520079193370191810477580463635224092686607896863852671881543817329521589324466628227730589108339783619357530316049670209743367574983963078106666377633552745384690084183804939047320711873053569717432670155045869610477526046503868585690544254566603491357805849009447674789480061139157433156989123228768899846183291164697221164452100037658563026884070301188916984245139290761779580443049, 644471004204038587358576160407417490938643306027967868486894032686145771114614076076527690366372762614045209015175209880518279715723521182568975220993976451106760236390912778371250746699463366097164369672789316408520079193370191810477580463635224092686607896863852671881543817329521589324466628227730589108339783619357530316049670209743367574983963078106666377633552745384690084183804939047320711873053569717432670155045869610477526046503868585690544254566603491357805849009447674789480061139157433156989123228768899846183291164697221164452100037658563026884070301188916984245139290761779580443049, 644471004204038587358576160407417490938643306027967868486894032686145771114614076076527690366372762614045209015175209880518279715723521182568975220993976451106760236390912778371250746699463366097164369672789316408520079193370191810477580463635224092686607896863852671881543817329521589324466628227730589108339783619357530316049670209743367574983963078106666377633552745384690084183804939047320711873053569717432670155045869610477526046503868585690544254566603491357805849009447674789480061139157433156989123228768899846183291164697221164452100037658563026884070301188916984245139290761779580443049, 644471004204038587358576160407417490938643306027967868486894032686145771114614076076527690366372762614045209015175209880518279715723521182568975220993976451106760236390912778371250746699463366097164369672789316408520079193370191810477580463635224092686607896863852671881543817329521589324466628227730589108339783619357530316049670209743367574983963078106666377633552745384690084183804939047320711873053569717432670155045869610477526046503868585690544254566603491357805849009447674789480061139157433156989123228768899846183291164697221164452100037658563026884070301188916984245139290761779580443049, 644471004204038587358576160407417490938643306027967868486894032686145771114614076076527690366372762614045209015175209880518279715723521182568975220993976451106760236390912778371250746699463366097164369672789316408520079193370191810477580463635224092686607896863852671881543817329521589324466628227730589108339783619357530316049670209743367574983963078106666377633552745384690084183804939047320711873053569717432670155045869610477526046503868585690544254566603491357805849009447674789480061139157433156989123228768899846183291164697221164452100037658563026884070301188916984245139290761779580443049] # 这里填入所有的c值,与n_list对应

# 使用中国剩余定理计算一个整数,它在所有给定的模数下与每个密文同余
resultant, mod = crt(n_list, c_list)

# 尝试计算这个整数的e次方根,这个方根应该是原始消息m
value, is_perfect = iroot(resultant, e)

# 如果方根是完全的(即没有小数部分),则将整数m转换回字节串
if is_perfect:
    flag = long_to_bytes(value)
    print(f"Recovered flag: {flag.decode()}")
else:
    print("The e-th root of the resultant is not an integer. Cannot recover the flag.")

脚本说明:

在这个脚本中,我们首先导入了所需的模块。我们使用crt函数来解决一系列同余方程,并得到一个可能的m^e值。然后,我们使用iroot函数来尝试找到这个值的e次方根,如果它存在的话。如果方根是完全的,我们就找到了明文m,并将其转换为字节串以显示。如果方根不是完全的,那么我们无法恢复明文。

确保在运行此脚本之前已经安装了gmpy2pycryptodome(提供Crypto.Util.number模块)库。如果没有安装,可以使用pip进行安装:

pip install gmpy2 pycryptodome

我这个脚本有点复杂不易理解,大家感兴趣的可以去公主主页看看;

最后:

LitCTF{CRT_i5_s0_e4sy!!!}
4、little_fermat

下载附件打开:

在这里插入图片描述

简单分析一下;

这题考察邻近素数和明文预处理,我们可以写一个脚本来恢复由两个邻近素数pq加密的RSA明文。这个脚本将首先尝试找到pq,然后计算私钥d,最后解密密文c并恢复原始明文。

脚本:(参考公主文章)

from Crypto.Util.number import *
from gmpy2 import *

# 假设的n和c值,这里应该用实际的n和c值替换
n = 122719648746679660211272134136414102389555796575857405114496972248651220892565781331814993584484991300852578490929023084395318478514528533234617759712503439058334479192297581245539902950267201362675602085964421659147977335779128546965068649265419736053467523009673037723382969371523663674759921589944204926693
c = 109215817118156917306151535199288935588358410885541150319309172366532983941498151858496142368333375769194040807735053625645757204569614999883828047720427480384683375435683833780686557341909400842874816853528007258975117265789241663068590445878241153205106444357554372566670436865722966668420239234530554168928

e = 65537

# 计算n的平方根并找到邻近的素数作为q
sqrt_n = isqrt(n)
q = next_prime(sqrt_n)
# 由于p和q是邻近素数,我们可以通过n除以q来找到p
p = n // q

# 确保我们找到了正确的p和q
assert p * q == n

# 计算私钥d
phi = (p - 1) * (q - 1)
d = invert(e, phi)

# 解密得到m
m = pow(c, d, n)

# 由于明文m在加密前与x进行了异或操作,我们需要找到x
# 在这个场景中,x是p-1
x = p - 1

# 恢复原始明文
original_m = m ^ x

# 将明文转换为字节串
flag = long_to_bytes(original_m)
print(f"Recovered flag: {flag.decode()}")

简单分析一下:

这个脚本是针对一个特定的RSA加密场景编写的,其中两个素数pq非常接近,且明文m在加密前与p-1进行了异或操作。以下是脚本的逐步分析:

  1. 确定模数n和密文c:脚本开始于给定的模数n和密文c。这两个值是RSA加密过程的输出,其中n是公钥的一部分,c是加密后的消息。

  2. 计算n的平方根:使用isqrt(n)计算n的整数平方根。由于pq是邻近素数,n的平方根会非常接近pq

  3. 寻找邻近素数q:利用next_prime(sqrt_n)找到sqrt_n的下一个素数,作为q。这一步假设qp稍大,且两者非常接近。

  4. 计算p:通过整数除法n // q计算p。由于n = p * q,这个操作能够准确找到p

  5. 验证pq:通过断言p * q == n来验证找到的pq是否正确。这是一个简单的完整性检查,确保后续步骤的正确性。

  6. 计算私钥d:首先计算欧拉函数phi = (p - 1) * (q - 1),然后使用模逆函数invert(e, phi)计算私钥d。这里的e是公钥指数,通常是一个公开知道的值(本例中为65537)。

  7. 解密密文c:使用私钥d和模数n对密文c进行解密,得到m = pow(c, d, n)。这一步恢复了加密前对明文进行异或操作的结果。

  8. 恢复原始明文:由于明文在加密前与p-1进行了异或操作,我们需要再次执行这个异或操作来恢复原始明文:original_m = m ^ x,其中x = p - 1

  9. 转换和打印明文:将恢复的明文original_m从长整数转换为字节串,然后解码(假设为UTF-8或其他适当的编码)并打印出来。

总结:这个脚本展示了如何在特定条件下,即使用邻近素数和明文预处理(异或操作),逆转RSA加密过程。

LitCTF{Y0u_know_littl3_ferm4t_th3ory}
5、真·EasyRSA

下载附件;

在这里插入图片描述

一开始想尝试分解n,但是发现不管怎么分解都是它本身,那没有办法我们只能换一种思路;
在这里插入图片描述
那我们直接参考公主文章吧!

直接上脚本;

# 导入Crypto.Util.number库,提供了一些处理大整数的实用工具函数
# 导入gmpy2库和iroot函数,用于进行大整数运算和计算整数的n次方根
from Crypto.Util.number import *
import gmpy2
from gmpy2 import iroot

# 定义公钥指数e,这是RSA加密中常用的公钥指数
e=65537

# 定义两个密文c1和c2
c1= 78995097464505692833175221336110444691706720784642201874318792576886638370795877665241433503242322048462220941850261103929220636367258375223629313880314757819288233877871049903331061261182932603536690216472460424869498053787147893179733302705430645181983825884645791816106080546937178721898460776392249707560
c2= 3784701757181065428915597927276042180461070890549646164035543821266506371502690247347168340234933318004928718562990468281285421981157783991138077081303219

# 定义模数n
n = 111880903302112599361822243412777826052651261464069603671228695119729911614927471127031113870129416452329155262786735889603893196627646342615137280714187446627292465966881136599942375394018828846001863354234047074224843640145067337664994314496776439054625605421747689126816804916163793264559188427704647589521

# 计算模数n的四次方根p,得到原始的质数
p = iroot(n,4)[0]

# 计算欧拉函数phi,它是p的四次方减p的三次方
phi = p**4 - p**3

# 使用欧拉函数phi和公钥指数e,计算私钥指数d,d是e关于phi的模逆元
d = gmpy2.invert(e,phi)

# 使用私钥指数d和模数n,对密文c1进行解密,得到明文m
m = pow(c1,d,n)

# 打印解密后的明文m
print(long_to_bytes(m))

脚本分析:

这个脚本首先定义了一些变量,包括公钥指数e和两个密文c1和c2,以及模数n。然后,计算模数n的四次方根p,得到原始的质数。欧拉函数phi被计算为p的四次方减p的三次方。接着,使用phi和e计算私钥指数d。最后,使用d和n对c1进行解密,得到明文m。(不得不说公主真的RSA真的很强捏~)

运行得到:(没错是假的flag)

b'LitCTF{HeRe_1s_Weak_F1aG}hahahaha_____hint_is_93492332457019255141294502555555489582661562346262162342211605562996217352449'

但是不要慌,跟着公主的步伐,那既然这里也得到了hint,所以我们可以尝试解c2;

附上完整脚本(解析在底下)

# 导入必要的库
from Crypto.Util.number import *
import gmpy2
from gmpy2 import iroot

# 定义公钥指数
e=65537

# 定义两个密文
c1= 78995097464505692833175221336110444691706720784642201874318792576886638370795877665241433503242322048462220941850261103929220636367258375223629313880314757819288233877871049903331061261182932603536690216472460424869498053787147893179733302705430645181983825884645791816106080546937178721898460776392249707560
c2= 3784701757181065428915597927276042180461070890549646164035543821266506371502690247347168340234933318004928718562990468281285421981157783991138077081303219

# 定义模数
n = 111880903302112599361822243412777826052651261464069603671228695119729911614927471127031113870129416452329155262786735889603893196627646342615137280714187446627292465966881136599942375394018828846001863354234047074224843640145067337664994314496776439054625605421747689126816804916163793264559188427704647589521

# 计算模数 n 的四次方根 p,得到原始的质数
p = iroot(n,4)[0]

# 计算欧拉函数 phi,它是 p 的四次方减去 p 的三次方
phi = p**4 - p**3

# 使用欧拉函数 phi 和公钥指数 e,计算出私钥指数 d,d 是 e 关于 phi 的模逆元
d = gmpy2.invert(e,phi)

# 使用私钥指数 d 和模数 n,对密文 c1 进行解密,得到明文 m
m = pow(c1,d,n)

# 打印出解密后的明文 m,这是一个假的 flag
print(long_to_bytes(m))

# 根据假的 flag 提示,我们知道 p 是一个特定的数值。我们使用这个新的 p 值重新计算解密指数 d
p = 93492332457019255141294502555555489582661562346262162342211605562996217352449

# 使用新的 p 值和 e 计算新的解密指数 d
d = gmpy2.invert(e,(p-1))

# 使用新的解密指数 d 和新的 p 值,对密文 c2 进行解密,得到最终的明文 m
m = pow(c2,d,p)

# 打印出解密后的明文 m,这是最终的正确的 flag
print(long_to_bytes(m))

简单分析:

脚本使用 RSA 算法解密了两个密文。首先,它使用公钥指数 e 和模数 n 解密了密文 c1,得到了一个假的 flag。然后,它使用一个来自假 flag 的提示重新计算了私钥指数 d,并解密了密文 c2,得到了最终的正确的 flag。

最后运行得到;

LitCTF{R1ght_Answ3r!}

三、REVERSE

1、编码喵

下载附件

简单分析一下:无壳,64位;

进去直接找到主函数main,F5反编译即可;

在这里插入图片描述

tgL0q1rgEZaZmdm0zwq4lweYzgeTngfHnI1ImMm5ltaXywnLowuYnJmWmx0=

接着我们只要找到对应的码表逆回去即可;

简单分析一下发现在函数——text_72(双击)

在这里插入图片描述

在这里插入图片描述

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/

在线base64编码

在这里插入图片描述

LitCTF{03034ed8-a2da-4aa6-b2c9-01ace9e26301}
2、hello_upx

下载附件查壳,发现upx,丢进kali去壳;

在这里插入图片描述

发现去壳失败,那我们使用010打开exe查看upx标志位;

在这里插入图片描述

修改完成,继续去壳;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

使用64ida打开;

在这里插入图片描述

简单分析一下;

  1. 变量初始化

    • v4[3]:一个64位整数数组,用来存储加密或变换后的目标字符串的值。
    • v5:一个16位整数,其作用在这个程序片段中并不明确。
    • v6[40]:一个字符数组,用以接收用户输入的字符串。
    • v7:一个整型标志,用来指示用户输入的字符串是否通过验证。
    • i:循环计数器。
  2. 接收用户输入

    • 程序输出欢迎信息,提示用户输入flag。
    • 使用scanf函数读取用户输入的字符串到v6数组。
  3. 字符串处理

    • 第一个循环对v6中的每个字符进行处理,即每个字符减去其索引值。这是一种简单的字符串变换操作。
  4. 验证处理后的字符串

    • 第二个循环将处理后的字符串与v4数组中的值进行逐字符比较。如果发现不匹配的字符,v7被设置为0,表示验证失败。
  5. 输出验证结果

    • 如果v7保持为1,即所有字符都匹配,程序将输出成功消息(尽管代码中aGood未定义,所以我们不知道确切的成功消息内容)。
    • 如果v7为0,即存在不匹配的字符,程序将输出“nononononno!”。

所以很简洁明了,我们只需要逆向V4数组即可;

中间仅仅只做了ASCll加减操作,反着来即可;

脚本:

# 定义一个名为ABC的数组,包含加密后的ASCII值
ABC = [
   0x4C, 0x68, 0x72, 0x40, 0x50, 0x41, 0x75, 0x70,
   0x2B, 0x63, 0x59, 0x25, 0x61, 0x58, 0x51, 0x65,
   0x20, 0x4E, 0x5A, 0x1E, 0x60, 0x4E, 0x5E, 0x4F, 101
]

# 初始化空字符串用于存储解密的flag
flag = ''

# 遍历ABC数组中的每个元素
for i in range(len(ABC)):
    # 对每个元素执行逆向操作:将元素值加上其索引
    # 这是因为原始加密过程中,每个字符减去了其索引值
    # 使用chr()函数将结果转换为对应的ASCII字符
    flag += chr(ABC[i] + i)

# 打印解密后的flag
print(flag)

这里加了注释就不做过多解释;

LitCTF{w3lc0me_t0_l1tctf}
3、ezpython!!!!!

下载附件根据提示,已知需要提取pyc;

百度一下发现需要pyinstxtractor提取

pyinstxtractor下载

提取命令;

python pyinstxtractor.py ezpy.exe

在这里插入图片描述

发现这里有提示说《请在 Python 3.11 中运行此脚本,以防止解组期间出现解压缩错误》;

那就切换python 3.11运行呗;

[Python 3.11官网下载](Python 版本 Python 3.11.0 |Python.org)

配置好环境变量简单切换一下即可;

在这里插入图片描述

打开提取出的ezpy.exe_extracted文件,找到ezpy.pyc进行反编译(这里注意反编译的也是需要Python 3.11的噢~)

Python 3.11在线反编译

在这里插入图片描述

X=3o4hx=0EZwf=mMv13gX=3o4hx=qje2ZjtgZQmEKXZog4==

很明显是进行了base64编码那我们逆回去就行,现在就只要找到它对应的码表即可,可以看出导入了自定义的库;

在这里插入图片描述

发现base64不止一个不知道哪一个,那没事我们一个一个进行分析就行;

在这里插入图片描述

最后在Litctfbase64.pyc发现码表;

在这里插入图片描述

8kuWYm=1JiUPs7DT4x+X5tcqZKfGvA0gFLB6y3QbV2rNOlRdMwnEohjzSe9/HIa-

最后;

在这里插入图片描述

LitCTF{61happy_LitCTF_nice_base64}

四、WEB(目前环境还未上线NSS平台稍后单发补上)

1、exx
2、一个…池子?一个…池子?
3、SAS - Serializing Authentication System
4、浏览器也能套娃?
5、高亮主题(划掉)背景查看器

标签:解码,wp,使用,LitCTF,明文,2024,flag,密文
From: https://blog.csdn.net/administratorlws/article/details/139449645

相关文章

  • 2024最新拼多多Java面试题(现场五面),全面涵盖Java高级到高并发,字节跳动java面试算法没
    总结其他的内容都可以按照路线图里面整理出来的知识点逐一去熟悉,学习,消化,不建议你去看书学习,最好是多看一些视频,把不懂地方反复看,学习了一节视频内容第二天一定要去复习,并总结成思维导图,形成树状知识网络结构,方便日后复习。这里还有一份很不错的《Java基础核心总结笔记》,......
  • 2024年6月4日第六十二篇
    今天遇到了网络请求的问题因为我要发送一个多参数的post请求,发现不能使用@requestmapping,于是我改为使用@PostMapping但是其中不包含参数@Requestparam只包含@RequestBody导致问题迟迟无法解决,最后我改为使用get请求,用@GetMapping用@RequestParam实现参数传递。<template>......
  • 2024年云计算、信号处理与网络技术国际学术会议(ICCCSPNT 2024)
    2024年云计算、信号处理与网络技术国际学术会议(ICCCSPNT2024)2024InternationalAcademicConferenceonCloudComputing,SignalProcessing,andNetworkTechnology(ICCCSPNT2024)会议简介:2024年云计算、信号处理与网络技术国际学术会议(简称ICCCSPNT2024)是一个集结了......
  • 2024年5月信息系统项目管理师(高级)考试综合知识真题及参考答案
    1、关于项目可行性研究的描述不正确的是()A.初步可行性研究报告,必须包含项目的主要投资支出B.初步的可行性研究报告可作为正式文件,支持项目决策C.初步可行性研究报告的核心内容不包括项目进度安排D.初步可行性研究是详细可行性研究的基础[参考答案]C2、信息系统战略......
  • 免费使用TasteWP一键搭建线上临时WordPress网站
    虽然用宝塔面板或者1Panel面板可以非常快速的搭建一个WordPress网站,但是有时候只想测试下我设计的页面或者开发的主题和插件,又得买服务器,绑定域名,安装程序,搭建起来也过于浪费时间了;再或者,我只想学习WordPress基础操作,从零开始搭建还是过于困难,因此,今天我推荐一个特别好用的工具:Tas......
  • 骑行无界,勇者无限!2024COSP上海国际户外展带您畅享生活的速度与激情!
    随着夏日来临,越来越多的人选择借由“绿色骑行”去触碰一座城市的脉搏,“城市骑行”正在成为时尚潮流活动和生活休闲方式。对于一部分城市打工人来说,自行车是一种通勤的工具,骑行成为健身的新选择。在小红书里输入“骑行”,大约有280万+笔记,“骑行路线”“骑行装备”“骑行穿搭”......
  • 2024.05.19校招 实习 内推 面经
    绿*泡*泡VX:neituijunsir  交流*裙,内推/实习/校招汇总表格1、自动驾驶一周资讯-理想传裁员传闻;广汽本田大规模裁员;小米SU7完成第10000辆交付,雷军:确保今年交付10万台https://mp.weixin.qq.com/s/rsavPRAm8Df-1IcezbZQ3Q2、实习|长安福特&长安福特新能源2024暑期实......
  • 2024年化学材料、清洁能源与生物技术国际学术会议(ICCMCEB2024)
    2024年化学材料、清洁能源与生物技术国际学术会议(ICCMCEB2024)会议简介2024国际化学材料、清洁能源和生物技术大会(ICCMCEB2024)将在长沙隆重举行。本次会议旨在汇聚来自世界各地的化学材料、清洁能源和生物技术领域的专家学者,共同探讨行业前沿技术和发展趋势。会议将涵盖......
  • 2024年公共事务管理与社会服务国际会议(ICPAMSS2024)
    2024年公共事务管理与社会服务国际会议(ICPAMSS2024)会议简介2024国际公共事务管理与社会服务会议(ICPAMSS2024)将在广州隆重举行。本次盛会诚挚邀请来自世界各地的公共事务管理和社会服务领域的专家、学者和从业者齐聚一堂,探索行业发展前沿,分享实践经验,推动理论创新。会议将......
  • 2024年生命科学、基础医学与微生物学国际会议(ICLSBMM2024)
    2024年生命科学、基础医学与微生物学国际会议(ICLSBMM2024)会议简介2024生命科学、基础医学和微生物学国际会议(ICLSBMM2024)将在深圳隆重举行。本次会议汇集了来自世界各地的顶尖专家和学者,讨论生命科学、基础医学和微生物学领域的最新研究成果和发展趋势。会议将涵盖基因......