Web
Blank_Page
根据题目所说查看源代码,打开网址发现键盘上和鼠标查看源代码的方式 都被禁用了,于是想到的就只有用bp抓包查看源代码了,但是还有一种着实让我想不到啊,在网页前面加入view-source:
也可以查看源代码



哆啦A梦的数学题
打开题目发现是数学计算题,肯定很简单吧,把答案输入发现无法按动按钮,猜测肯定是源代码button被禁用了,打开源代码,发现button是disabled,于是将dis删掉就可以使用按钮了,然后就是简单的计算数学了,按动按钮就可以得出flag


这个题重点考察对源代码的分析,对按钮不能使用的原因分析
ez_upload1
打开附件发现一个上传文件,索性随便上传一种文件,但是提示我是否有其他文件可以上传呢,在不断尝试后发现只有php文件不会出现类似现象,说明应该是需要php类型的文件,与之前的写过的题目类似 然后植入一段普通的木马病毒,然后上传上去,会得出文件路径

然后毫无置疑题目也提醒了用蚁剑于是打开蚁剑然后配置网址与命令,因为我木马病毒写的是cmd命令,所以连接密码为cmd,可以根据个人来设置,然后点击添加就可以了
然后打开这个加入的数据,在根目录下就可以找到flag,然后点进去就得到了答案

web签到
打开题目发现似乎是get传参,看代码知道if($Yunxi1=="W3lc0me" && $Yunxi2=="Yunxi" )
$W3ll =$_POST ["W3ll"];
if($W3ll== "D1d")时,system('cat /flag'); 当上面那个if满足时且post date中满足下面那个if时,系统会自动抓取flag
这里要注意在网址后面执行url时不可加‘;' 只有当末尾出现()时才加;

ez_upload2
这个题跟ez_upload1有异曲同工之妙,但是这个是上传的图片,然而这个却无法实行怕php的命令,上传图片然后抓包发现Content-Type: image/png的类型,然后就再传入一个php文件上传后提醒我说我发现新大陆,说明与php脱不了干系,于是对上传的php文件进行抓包,发现Content-Type: application/octet-stream的类型,既然单传php文件不能使用蚁剑,而说明png文件类型的可以做出效果,于是将php文件的type改为png的type,然后再试试可不可以用蚁剑,返现真的可以了



然后按照ez_upload1的步骤一样,再在蚁剑中寻找flag
ezrce1
打开发现是get传参,但是看题目发现system命令被禁用了,于是在网上搜了其他的,例如passthru可以直通网络,然后用这个查看yunxi文件下的内容,然后用查看里面的内容

会发现下面有flag,于是尝试着抓取flag,用cat tac命令都可以,会发现就可以抓取到flag了
read
打开页面点击小tip会发现弹出一个Linux里面的敏感有哪些,于是搜索会发现有很多种,将第一种输入,因为它是用于存储用户账号信息,包括用户名、用户ID(UID)、组ID(GID)、全名、家目录和默认shell。


输入正确后,看看里面有什么内容,发现一个文件叫做zzc.php,然后将zzc.php输入就可以得到提示flag在secret.php中,然后输进去就可以得到flag了


weak passwd
打开界面为登陆界面,因为没有验证码,就可以盲猜用爆破,而且题目给了txt.1000猜测肯定就是密码1000,这里既然给了账号为TGlu ,然后密码随机输入,进行bp抓包,然后爆破得出长度不同的密码口令

这说明密码是blink182,账号为TGlu,然后登陆进去会发现一大堆照片,找不到flag的踪影,于是查看源代码会发现flag
2048game
打开发现不能使用f12和鼠标右键,然后使用ctrl+u查看源代码,发现分数不足无法得到flag,分数需要达到6666666666666才能赢,只有分数大于等于6666666666666才能得到flag但是在网页中我无法更改分数,于是打开源代码,在源代码中更改分数,发现并不能得到flag,肯定后端做了设置

后面说Read score from URL query parameter (if available),既然是url那么最先想到的就是get传参。于是在网址后面加入?score=666666666666后会得到一串密文 明显是base64,然后再用base64解密就可以了


admin
打开发现需要登录,但是右下角又发现有注册界面,于是注册一个试试再登陆会出现这样一个界面,点击按钮后发现这个一看发现flag并不在这里,那该怎么办呢,题目提示sql注入


页面显示正常,并且与原始页面无异,这表明SQL查询可能正常执行,用于测试
然后查看数据库的 ,发现库名是TGlu --+是注释符,在Mysql中注释符有--空格 ,# ,/**/,在浏览器中为什么用–+来注释而不是–空格,因为在url传参时,空格会被忽略掉,+号会被解析成空格。
既然存在数据库 那么就可以开始查看表名,我们获得了两个表名,根据表名可以猜到用户的账户密码在User里面,然后就可以对User进行查列名
-1' union select group_concat(column_name) from information_schema.columns where table_name='User' --+ 就是用于查看User里面的列名,接下来就是爆破用户名和密码了

-1' union select group_concat(username,'~',password) from User --+ 表示从User中爆出用户名和密码 用户名为admin 密码为12345678!@#TGlu

然后登陆就可以得到真正的flag了
可以参考下SQL各种注入详解加案例--持续更新_sql注入-优快云博客,这个说的也是很详细的
Rce2
打开发现与ezrce1很像啊,但是这个php代码不仅禁用了flag ,system还禁用了cat命令并且不分大小写。一样禁用了system那就用passthru 这两个命令起的作用是一样的,列出当前目录下的文件,发现有一个index.php的文件

然后查看该文件下的内容,发现出现flag,但是吧cat命令被禁用了 ,那我们该如何获取flag呢,当然抓取命令又不止一个 我们可以使用tac命令抓取,这里可以查看哈tac与cat的区别,空格也被过滤了,然后使用%09代替空格

flag也被过滤了,可以使用fla*代替,*自动查找g

图片库
上传一个图片发现需要自己找文件路径,下面给了三个可点击的按钮,于是挨着挨着点,发现第二个的描述说可以得到文件的路径,使用了get传参,但是("/\.\.|\b(flag|start|sh)\b/i", $file)),这一堆说明这些命令被禁用了,无法使用,include($filepath),这些代码使用了php伪协议


将主页源代码转化为base64,然后用base64解密就可以得到源代码,查看文件路径,发现是base64对文件名加密,然后加上文件扩展名,我的文件名是q加密后是cQ==


对上传图片进行抓包,因为他不允许上传php文件,只有在包里强行改变文件类型,并植入一句话木马可以用于执行cmd命令,打开蚁剑或者直接post传参
1.post传参,执行cmd命令,然后直接抓取flag


2.蚁剑连接:连接成功后直接在根目录下找flag


穿..穿..穿..
打开发现不能使用/etc/passwd, 然后看提示说是穿越我也不懂,只有搜搜看到底是什么
就是要插入“.."等路径符号进行不断地穿越

但是我穿越一次不能都得到文件,只有尝试多次穿越,在发现穿越了四次之后就可以得到capoo.php,然后再打开文件会发现提示flag在同级目录里面,但是我不知道flag在哪个文件里面啊,然后看到提示说想想flag可能叫啥名字,要么就是flag.txt要么就是flag.php 不断地尝试嘛根据前面都是php类型的文件,就试试php文件

输入读取后发现没得啥子影响,但是网页又响应了的,说明执行了,于是查看源代码会发现flag在里面Yunxi{8ea740a7-85a4-4b05-b0c1-ba3420e2ad24}


Reverse
蜡笔小新师兄的诱惑
根据提示说用ida,于是下载好附件,将附件放入ida打开,就可以直接得到flag

re,从0开始的ctf世界
打开附件发现是一个exe文件,于是直接果断的尝试放进ida,根据题目中说的仿c,直接查看伪代码,发现一串很像Yunxi{}的格式内容,估计是加密后的密文,然后直接随波逐流暴力解密,发现是个凯撒密码加密Yunxi{1_@m_ba<k_#@_#@}



云曦欢迎你!
方法一(没有技术含量):
下载好附件用查壳软件查壳,发现这是32位,并且没有壳然后用ida32打开
拖进ida32后,用f5查看没有什么用啊,于是尝试用shift+F12检索就可以找到flag
用010editor也可以直接打开找到flag

方法二:
是兄弟就来逆我
方法一:手搓

这里打开发现其中的一些字母和符号被替换,3-10行是第二次替换,其中13-19行表示括号里前面那个被后面那个替换,而且第21行说如果有1就用9替换,没有的话就是1,然后再用3-10行的将13-10行的蓝色替换例如这样

发现Yunxi是604,乍一看发现是下面输出的s反着来弄的,于是就将输出的s反着对着上面的替换的字母,如果没有的就直接抄下来,最后替换的结果是这种的,就可以得出答案Yunxi{this=is-r3ally-easy-r3-with=python}

方法二:利用python脚本
将原本中的s进行顺序调换,然后发现其中一些字母和{ - 被进行了两次的替换,找出替换的原值,然后写出脚本进行替换就可以了,但是要注意替换顺序,否则会出现错误替换

我心如铁,坚不可摧!!!!
运用exeinfope查看发现这是一个64位的文件,并且使用了upx压缩工具压缩

放进ida64查看hex区域,用Alt+t快捷搜索Yunxi发现没有结果,那么可能经过upx对源程序也进行了加密,要想让它变成正常的exe那么就需要对它解密



用upx -d进行脱壳,当出现unpacked 1 file 那么就显示脱壳成功了,将脱壳后的exe放进exeinfope查看,显示没有壳了


然后将没有壳的exe放入ida中,发现脱完壳后就可以直接得到flag了,反着输入就可以了

绕
打开附件放进Exeinfo PE看有没有壳,是多少位的,发现是32位的一个exe

用ida32打开,找到main,点进去发现输入的字符长度是24

出现了很明显的w s a d, 分别为下上右左 ,典型的迷宫,猜测迷宫长度为13

然后提取变量,题目中给出要求最短路径且为24步

搞不来脚本,直接手搓,搓出来的路径用md5加密


address in the IDA 国家队

先把文件放进Exeinfo PE中查看有没有壳,发现有个upx壳,然后放进kali中脱壳,出现1 file则已经脱壳了
char 是一个基本数据类型,专门用于存储单个字符。这个字符通常是ASCII码中的一个字符
这里定义了一个名为Str1和str的字符数组,该数组分别能够存储528,272个字符(包含可能作为字符串结束符的空字符'\0')。注释// [rsp+20h] [rbp-60h] BYREF通常与汇编语言或调试器的输出相关
还定义了两个siza_t类型的变量 v6和i
下面主要内容输出了一个Buffer和aFlag的字符串
printf函数是一个标准输出函数,用于向控制台(或标准输出设备)打印格式化的字符串,它至少输出两个变量,而这里刚好与两个变量,并将读取的字符串传入str字符数组中
scanf函数用于从标准输入(通常是键盘)读取格式化的数据,"%259s"是格式字符串,它告诉scanf要读取一个字符串,并且这个字符串的最大长度是259个字符,然后将读取的字符串存入到Str中
下面是个循环语句初始化表达式 0i64 将i进行初始化表达,strlen(Str) > i表示循环语句,防止循环循环迭代时调用strlen函数,显得很麻烦
Str[i]^ = i;会对字符串中的每个字符执行这样的操作。这意味着字符串中的每个字符都会被修改为它与自己索引值的异或结果。
v6 = strlen(Str);意味着变量v6将被赋值为字符串Str的长度
base64_encode(Str, Str1, v6);中Str表示要进行base加密的原始数据并且进行base64加密,Str1表示用于储存加密后的指针和数组,V6表示原始数据长度
strcmp函数来比较字符串Str1和特定的Base64编码字符串"ZAUvh21+QmXoRWjpgpk8BG1oCAz5MVT6NFwq"的长度
如果这两个字符串相等,那么strcmp函数返回0,那么逻辑非操作符!会将这个0转换为true(在C语言中用非零值表示真),随后执行puts("鹤望兰永不凋零 比翼鸟永世长存");来打印出这句话。
如果这两个字符串不相等,即strcmp函数不返回0,那么!strcmp(...)的结果为false,此时将执行else分支,打印出asc_404188所指向的字符串。
总说:代码会对字符串先进行异或计算然后进行base64加密,那么我们需要解出最初的字符串是什么

这里发现一个base64_table这是用于base64解码和编码过程中使用的字符表


然后用码表对数据进行base64解密,这需要用到加密时的码表,解出来原始数据是Ytl{m~65%98&vh|`=ee|9%$:(+g,然后需要进行异或操作

然后运行脚本就可以了

Crypto
不能再简单
打开题目说几种Base的差别:base64包含大小写字母a到z数字0-9以及+和/两个特殊字符;base32主要由大写字母A-Z和数字2-7组成;base16只包含数字0-9和大写字母A-F,先用base32解码,然后用base64解码就可以了


有趣的符号
打开一看就像是okk解密,首先将okk转化为text CTF密码(编码)--0ok、Brainfuck、jsfuck、猪圈、unicode、Bubble - harmor - 博客园含有多种解密的工具

然后再将brainfuck转化为text就可以了Yunxi{ce26d9fdead0fc2010c8d47383bc930a}

考考你
盲猜开头是Yunxi然后就比对差值,发现从1开始依次增加1,{}就不用计算在内了,然后再将得到的进行md5加密就可以了

Do you know XOR?
打开发现是xor,那么xor是什么呢,虽然现在还不是很懂怎么写脚本,但是打开大概能够看得懂,然后将数值填入就可以计算出



Do you know RSA?

自己下载的python中并没有pycryptodome这个库,需要自己pip进去,然后用代码计算出就可以了

haha是关键
根据题目提示haha是关键,而且维吉尼亚密码解密,既然不止一种古典密码,那我就挨着挨着尝试,并且不止一次

估计师姐怕我们尝试太久吧,直接放在第一个古典密码中,连续解密两次就出来了
简单的RSA
打开附件发现两组n和c而且给出e,我也不知道能想到什么,只有搜搜看,这样看下来貌似也只有最大公约数(GCD)攻击比较适合了


如果两个模数n1和n2有公共因子d,并且使用相同的公钥指数e加密了相同的明文m,那么可以通过计算n1和n2的GCD来找到d,进而可能通过d来解密密文。 其中 n1和n2是由相同的两个大素数p和q乘积得到(只是乘了不同的系数)

但是我写不来脚本 ,只有借鉴师姐给的wp中的脚本,然后解密出来

这个题拓宽了我对rsa的认识,原来rsa存在这么多中算法,具体的可以看[CTF密码学]RSA相关题目解题方法与python脚本总结(附例题)_ctf rsa-优快云博客
babyRSA
一看e很小但是nc却很大,典型的低加密指数攻击,n很大时我们就不能因式分解了,当然还有其他思路,例如当e很小时,比如e=3,有,我们可以对k进行爆破,直到
可以开根,借此得到m。
函数通过循环尝试找到一个整数 k,使得 m = c + n * k 的 e 次方根是一个整数。这是基于这样一个事实:对于足够大的 k,m 的 e 次方根将接近一个整数,这个整数就是原始的加密信息 m。可以参考下面链接学一下,里面有很种rsa的算法,原来rsa那么深奥,是我浅陋了
[CTF密码学]RSA相关题目解题方法与python脚本总结(附例题)_ctf rsa-优快云博客

import gmpy2
from Crypto.Util.number import *
def de(c, e, n):
k = 0
while True:
m = c + n*k
result, Yunxi = gmpy2.iroot(m, e)
if True == Yunxi:
return result
k += 1
e= 3
n= 12179577292159201980209631055496948102805120763418474466936520932304371979520139806025602222124053914511816288527603040402360070391278550405169804880161873839434208078894439913459004224454704760622617871373616234053749095252608617778430379641573072111810029985636947578653098562253008291154803698055135515034765818681677950372055408758254373569716492570273962727440020939894647913409333889845559543682629800185046461336355078780391997551992379373834093669760432655453231383589199629072125828536561731140937426042424354665558243756127815699181270083009772850320337477918541227301365099104143237535599765525672653801831
c= 24787004176081997995351052355008396603022515595812291086248661047699976898511806221533556787623849858207553998225780175104729080805882870626684198891200274181976238742233392202382454514941157259169863059433228683199443436020924558548245843373130422540390547675300859024242321569125
m=de(c,e,n)
print(m)
print(long_to_bytes(m))
haha的rsa
这道题看着不会,但是只有利用ai来写代码,运用了rsa解密中的CRT及中国剩余定理,wp中还有广义中国剩余定理,我也弄不来,然后运行代码就可以得出答案了

Misc
南无啊弥陀佛
下载附件,打开发现最里面的文件被加密了,但是密码路径一无所知,看题目提示发现是伪加密伪加密就是指通过修改压缩包的特定字节,然后让解压软件误以为压缩包使用了密码,其实压缩包并未使用密码。
010editor打开加密文件发现 文件头中的全局方式位标记为09 00,目录中源文件的全局方式位标记为09 00 ,这就是经过加密过的,于是将09改为00就可以打开文件



打开文件后发现是一串佛语,于是用与佛论禅进行解密就可以得到flag了,这题就是考察一个misc伪加密的原理

蜡笔小新被鲨鱼制裁
打开附件我没有发现什么东西,因为我的电脑不能直接打开这个pcapng文件,于是把它放进010editor中试试,然后再搜索Yunxi,看有没有结果,果然不出所料flag就在这里

所见不一定为实
下载好附件发现无法打开文件,因为文件无效,这给我整蒙了,但是总得试试010editor吧也发现无法打开,文件损坏
运用查壳软件查一下文件发现里面说NOT EXE - .png picture - 600 x 600 truecolor with alpha chan.8 bits/ch ( EOF ok ),这说明这是一个png文件类型,而文件类型却是zip,这说明文件后缀名及类型影响了文件,使得文件不可以打开,于是将后缀名改为png就可以得到flag了

猫猫虫
打开发现是个gif动图,然后在线搜索在线GIF图片帧拆分工具 - UU在线工具在线分析工具,然后截出第十一个发现有flag,但是仔细发现两个竖杠不同,经过不断地比对发现长的是小写的L,短的是大写的i,然后挨着挨着输入就正确了Yunxi{Best_capoo!!!This_is_a_fIIlIlIllI1ag}
想看zzc师兄的帅照吗
打开附件发现一个完整的参考照片,另外一个照片发现尺寸与原照片不同才导致看不清,唯一的方法就是将尺寸改为原来的尺寸应该就可以出现flag了


然后都放入010editor发现 有出现ff c0 然后将修改后的参数改为原参数值,然后图片就完全显示出来了


乌萨奇
打开发现一个图片,而且you有flag,但是眨眼一看肯定是假的flag,于是将图片放入010editor中,发现一堆很像base64的密文,然后放入工具进行解密就可以得到答案了

简单的社工
在识别图片后发现是云南省红河哈尼族彝族自治州开远市的凤凰山上的开远楼,经度103.267143,纬度23.714316 ,但是发现并不对,感觉百度地图有点坑人。用百度地图拾取坐标系统查看后正确的坐标是103.27_23.69,然后md5加密就可以了

美丽的小姐我叫Bond,GGBond~
看提示似乎要用去盲水印的工具,于是将下载的图片放进去盲水印的工具就可以直接得到flag

师兄看你找flag
打开附件发现是一个docx的文档

然后解压打开document,然后用CTRL+f搜索Yunxi会发现只有一半,于是再搜索}就可以发现另一半



这个demo好听吗
将附件的核心价值观解码后发现clovepeeking,然后发现一个音频文件

盲猜解出来的肯定就是隐写解密密码,然后进行解密后发现出现两个文件 然后就可以flag就在里面



似曾相识的密码
发现解压不了,有密码保护,根据题目提示直接暴力破解


暴力破解后发现密码是8080,然后将文件解压口令8080然后就可以得到一张图片,然后进行foremost分离,一看这个图就感觉有点像音频的感觉



然后用foremost在图片中分出一个wav音频,听着像是摩斯密码,然后就寻找摩斯面膜音频在线转文本,但是我找不到,只有用师兄给的链接,然后点进去转,但是发现不能点decode,这里师兄怕不是又在考验我们,点击f12 将decode中的disable改为able然后就可以使用decode,再将转化出来的文本用Yunxi{}包括就可以提交flag


你能get到师姐的忧伤吗
将图片放入010editor,根据题目提示这是我们的之间的秘密,猜测的oursecret隐写了,在010editor里面搜索password发现真的有密码,那肯定无疑了

用oursecret解开发现一个文件,结果打开是个师姐的照片 ,再用010editor打开发现还有个png文件,然后用kali的foremost进行分离


这个东西我分离里好多次,反正用师姐那个方法分类我的总是打开原图片,我在网上找了很多种方法,之前总是出现Processing: stdin的现象

你小子一定行!!!
先将图片用记事本打开发现一串乱码,但是上面几个却是感觉比较正常,然后挨着挨着用随波逐流解密,发现真能解出来,但是肯定方法不是这样的,这是另辟蹊径

残缺的二维码
打开发现是个残缺的二维码,于是只有想到把他拼接好,保存一个这样的边角补充,于是用画布将残缺二维码补好,扫描就可以得到一串base64的密文,再用base64解密就可以得到答案Yunxi{c5206b79eba24042sdg9680bf078c1}


Pwn
what is nc?
直接打开网页就是flag

真正的签到题
将附件放入010editor中发现时ELF文件


但是不知道有什么用,然后把文件放进pe中查看,发现是64位,直接放入ida64进行查看找到main,然后常规用法f5进行反编译,发现会陈列一个网页出现的图形,下面还有start_shell,点进去打开看发现一堆函数
接下来就是分析函数
第六行:v1变量,用于存储__readfsqword函数或指令返回的值
if ( fgets(s, 256, stdin) ):fgets将读取的字符串储存在s中,限制长度256
strcspn(s, "\n"):这个函数会返回s中第一个不在"\n"中的字符的索引(即第一个换行符\n的索引)。因为"\n"只包含一个字符(换行符),所以这个函数实际上就是在找s中第一个换行符的位置。
然后就是进行一个s与ls的比较是否相等,如果满足相等,就可以调用system函数执行ls命令
不满足就会输出那串怪怪的汉字
然后又出现了一个判断语句,如果存在s= 69470就可以得到flag

然后用kali打开,用ls查看,然后再输入69470就可以得到flag了

login
ez_pwn?
根据题目提示re2text看一下是个什么东西,他有个显著的特征,有明显的后门函数system("/bin/sh") ret2text就是执行程序中已有的代码,例如程序中写有system等系统的调用函数

下载附件发现是64位的,然后用ida64打开寻找主函数

双击fuc 函数发现一个可能存在的数组越界(栈溢出)
这里出现一个字符组表示yunxi里面数组大小为10,最多可以储存九个字符,然后出现一个get函数它从输入的字符串中读取九个字符
然后下面一行表示将读取后的字符储存在yunxi这个数组中
但是注意一点是get它无法输入字符的长度,一旦超过的yunxi所规定的长度那么就会出现缓冲区溢出

双击char,栈结构如下所示,0x10就是数组的大小,然后后面就是保存的扩展基址指针寄存器(32位是ebp)以及返回地址。s是存储的扩展基址指针寄存器,代表这个函数结束以后扩展基址指针寄存器要被修改为什么。
r是返回地址,代表这个函数结束以后程序会跳转到哪个地址继续执行,我们大多数情况下都是利用这个返回地址来进行操作。
由于栈的生长方向是由高地址往低地址增长的,我们可以看到左边是变量所在的相对位置,以s为基准。
在read读入字符的时候,第一个字符会被放在相对地址是0x10的位置,第二个字符会被放在0x0f的位置上,当我们读入的字符超过了yunxi的长度,那么会接着向下(高地址)存放,这个时候就会覆盖掉原来保存在高地址的s和r,以让程序跳转到不同的地方
函数可以读入0x64个字符,而yunxi的长度为10,s为8,r为8,可以修改s和r,(在32位程序中s和r为4,64位程序中s和r为8,这是由计算机位数决定的,一个字符长度是一个字节,一个字节的长度是8位(即长度为8的二进制数),32/8 = 4,64/8 = 8

看主函数下面还有一个backdoor函数,双击打开,发现典型的后门函数,然后查看函数的位置(0×400694),然后还要找到system的位置(0x400480)


还需要寄存的地址,这个rdi;ret就是寄存器的位置(0×400673)
然后运行脚本,但是我的python一直没有安装出pwn库 就运行不了
CTF竞赛各类题型解题思路分享



759

被折叠的 条评论
为什么被折叠?



