【2023】春节解题领红包之web篇——不完美题解

查看 168|回复 11
作者:梦旅意中人   
前言
“2023challenge里找不出flag,200响应是你最无尽的温柔。”
本文从一个初学者的视角出发,希望能够带给同为小白朋友们一些学习方法,掌握在面对问题时的入手方向,当然web题目也是第一次尝试,才学疏浅,不足之处,还望多多包涵。
为什么称为不完美题解呢,因为找到的静态flag为flag1-9、11,动态flag为flagC。在官方降低难度后勉强完成了Web高级,也算是有一些收获,接下来我将介绍解题步骤和一系列工具,希望能给大家一些帮助。
分析
如果面对问题毫无头绪怎么办呢?当然是通过搜索引擎了获取信息,而互联网信息海洋浩瀚如烟,如何获取到我们需要的信息呢?对于这个问题我们首先要知道我们在做什么,我们参加吾爱官方一年一度的活动,目前是Web题目,那么它属于哪个方向呢?查看历年题解/题目分类就可以知道是CTF,那基本方向已经确定,可以通过 “CTF Web”的关键字来搜索,这里再可以加上一个“思路”,这个时候可以有一个大致的了解,当然不用深入的去看,只需要粗略的浏览一下即可。然后开始根据题目要求去B站观看视频。
flag1
视频00:17,flag1{52pojiehappynewyear}。


image-20230207101405604.png (2.12 MB, 下载次数: 0)
下载附件
2023-2-7 17:09 上传

flag2
视频00:19的二维码,扫描即可获取。flag2{878a48f2}


image-20230207101534917.png (2.11 MB, 下载次数: 0)
下载附件
2023-2-7 17:10 上传

flag3
视频00:25, 一般来说可能由于左上角的数字在动,注意力全集中在左上方,而此处需要注意一下右下角的iodj3{06i95dig},根据我们题目所提示的flag格式,那么它原本样子应该是flag3,此时iodj对应flag,可以推断出i左移3位得到f,其它以此类推,可以知道这是移动3位的凯撒加密,可以手动推出答案,也可以使用在线网站解密,CTF工具箱,在其中选择凯撒加密即可,找不到可用Ctrl+F页面搜索。当然这里需要注意一下了,既然视频中已经涉及到凯撒密码了,指不定还有其它的密码,我们可以使用“CTF 加密类型”关键字来搜索,用于扩充一下知识面,这里分享一下我通过多次搜素得出的密码类型文章https://cloud.tencent.com/developer/article/1934568,以及关于一些脑洞大开的加密方式http://blog.neargle.com/SecNewsBak/drops/CTF%E4%B8%AD%E9%82%A3%E4%BA%9B%E8%84%91%E6%B4%9E%E5%A4%A7%E5%BC%80%E7%9A%84%E7%BC%96%E7%A0%81%E5%92%8C%E5%8A%A0%E5%AF%86%20.html


image-20230207101857465.png (1.61 MB, 下载次数: 0)
下载附件
2023-2-7 17:10 上传

flag4
flag4其实在出题人的个性签名里,这个地方可是真够隐秘的,当然这串字符串看起来很奇怪,根据flag3中的密文类型识别的文章,可以知道这个字符串应该是Base64编码,因此flag3中提到的工具箱,对字符串进行Base64解码即可(http://www.hiencode.com/base64.html),解得flag4{9cb91117}


flag4.png (734.72 KB, 下载次数: 0)
下载附件
2023-2-7 17:09 上传

flag5
flag5出现于视频00:30,此处可以听见音乐中掺杂了一些滴滴答答的声音,类似于影视剧中的电报音,这里其实是摩尔斯电码,也被称作摩斯密码,这里可以使用一个名为Morse Code Reader的安卓应用,美中不足的是高版本Andorid系统会闪退,因此将在flag8中介绍另一种方法。由图可知flag5{eait},此处可以发现视频中的音频似乎隐藏了一些信息,我们搜索关键字可变为CTF 音频,可以对其做一些了解,例如https://www.sqlsec.com/2018/01/ctfwav.html


flag5.png (82.21 KB, 下载次数: 1)
下载附件
2023-2-7 17:09 上传

flag6
视频开头处可以听到类似电话按键的声音,并且也有提示此处为flag6,但这个比较考验听力,一开始我用手机按键边按边听,然而最终的答案却不正确,这里推荐一个识别电话按键音的工具dtmf2num。


image-20230207111605931.png (1.72 MB, 下载次数: 0)
下载附件
2023-2-7 17:10 上传

可以看到效果相当的好啊,由此可知,flag6{590124},这里涉及了音频操作,因此推荐一个在线音频处理网站https://100audio.com/sound/100audio_editor/,可以使用它裁剪音频,当然也可以在flag8中使用其它工具。


flag6.png (26.35 KB, 下载次数: 0)
下载附件
2023-2-7 17:09 上传

flag7
在00:30出现的由0和1组成的二进制字符串,刚开始分析将其以摩尔斯电码分析无果,后来将其分为8个一组的二进制字符串,转为ASCii码后我们的flag7{5d06be63}出现,这里需要我们有一点点的积累,可以意识到8位的二进制数字可以用来表示字符。转换工具网址https://coding.tools/cn/binary-to-text


image-20230207130146601.png (153.87 KB, 下载次数: 1)
下载附件
2023-2-7 17:10 上传

flag8
根据flag5中提到的文章可知,这里涉及了一个新的名词,隐写,所以我们可以搜索CTF 隐写相关内容,放一个我搜索出来的https://www.freebuf.com/column/232141.html,由于flag5中工具不兼容高版本系统的问题,这里在分析flag8时一并给出一个通用方案,使用Au(论坛搜索可得)音频处理工具,结合这里文章对音频的频谱图做一个分析,以及对flag6的摩尔斯电码再做一次分析。要分析音频可以选择将音频分离出来,或者直接将视频拖入Au中也可以的,可以很清楚的看到我们的flag8{c394d7}已经出现了,这是频谱图,在Au中可以选择左上角鼠标所指位置,或者直接按快捷键Shift+D调出即可,同时在00:30处起可以看到一些亮黄色的小长条,这就是我们听到的摩尔斯电码声,将短的用.代替,长的用-代替,可以得到..-. .-.. .- --. ..... . .- .. -,使用http://www.hiencode.com/morse.html解码后也可得到同工具识别出的结果。


image-20230207120717455.png (1.2 MB, 下载次数: 0)
下载附件
2023-2-7 17:10 上传

flag9
通过反复观看视频,可以听到最后几秒处似乎有声音,但是又不是flag的声音,这里其实需要将音频反转后可以听到音乐中混杂的flag9,在Au中依次点击效果,反向将原音频反转,然后左键按住选择前三秒之后,再右键点击存储选区为,在弹窗中选择自己的文件路径,保存文件即可。不过这里依旧很考验听力,Au虽然有降噪功能,但稍微麻烦一些,分离后依旧有些不太清楚。使用https://vocalremover.org/可以将音频中的人声分离出来,之后将Music的按钮拉到最小,将得到flag9{21c5f8}。


image-20230207130818007.png (920.1 KB, 下载次数: 0)
下载附件
2023-2-7 17:10 上传

flag11
如果有对flag3中推荐的文章细看的话,那么可以很快知道在视频00:30时底部的字符串其实就是brainfuck,一开始我以为它是JSFuck,各种拆解分析无果之后,发现了flag3中的文章,进而flag11{5d06be63}得以出现,这里给出brainfuck的解码网站。https://www.splitbrain.org/services/ook


image-20230207131512589.png (1.22 MB, 下载次数: 1)
下载附件
2023-2-7 17:10 上传

flagC
flagC属于动态码,在视频中有提示到说2023challenge.52pojie.cn这个网站无法访问,可能是因为域名解析(DNS,域名解析服务,由于不同服务器之间通信需要的是ip地址,但ip比较长不太好记,为此人们给服务器配备了域名,而将域名指向服务器称为域名解析服务,这样一来通过易于记忆的域名就可以找到对应的服务器)的问题,以及它和吾爱用的是同一个服务器,根据这些信息可以知道,2023challenge.52pojie.cn它的域名解析指向了吾爱主站(www.52pojie.cn)的服务器,首先我们得知道吾爱主站所解析的服务器的ip地址,然后相办法将2023challenge.52pojie.cn这个域名解析到主站服务器上。
在此之前提一个小问题,这也是面试中高频 问题,权当复习了。

浏览器输入URL按下回车后发生了什么?
简单来说分为以下几点:
[ol]

  • 浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容。若没有,则跳到第三步操作。

  • 在发送http请求前,需要域名解析(DNS解析),解析获取相应的IP地址。

  • 浏览器向服务器发起tcp连接,与浏览器建立tcp三次握手。

  • 握手成功后,浏览器向服务器发送http请求,请求数据包。

  • 服务器处理收到的请求,将数据返回至浏览器

  • 浏览器收到HTTP响应

  • 读取页面内容,浏览器渲染,解析html源码

  • 生成Dom树、解析css样式、js交互。
    [/ol]

    其实我们重点关注第一步,读取缓存的操作,由于我们无法访问因此浏览器缓存读取后仍然无法到达目标地址,因此需要考虑系统缓存,这里的系统缓存其实就是hosts文件中存放缓存,试想如果我们在hosts文件中添加了网站到服务器之间的映射关系,那么就可以不用后边的路由缓存,亦不用在进行DNS服务器解析,直接就可以访问网站了。所以我们先通过https://www.t00ls.com/domain.html 网站查询吾爱主站对应的服务器ip。


    image-20230207144559570.png (193.68 KB, 下载次数: 1)
    下载附件
    2023-2-7 17:10 上传

    任选其中之一将其填入hosts文件中,根据此文https://blog.csdn.net/chasegan/article/details/107622167进行修改,或者使用 火绒 安全工具的修改hosts文件功能对其进行修改。


    image-20230207144952693.png (41.94 KB, 下载次数: 1)
    下载附件
    2023-2-7 17:10 上传

    如果修改后仍然无法打开,请检查win10的系统代{过}{滤}理是否关闭!!!(这个问题卡了我好久)


    image-20230207145140780.png (324.44 KB, 下载次数: 0)
    下载附件
    2023-2-7 17:10 上传

    一切就绪就可以打开网站了,非常滴有感觉啊,点击登录后,结果发现输入框不能输入,这里直接F12一手,点击这里的选择工具定位到输入框后,可以看到右边的源码中有一个disabled属性,在它上面双击,然后删掉它,就可发现我们uid的可以填写了。


    image-20230207145553225.png (146.21 KB, 下载次数: 0)
    下载附件
    2023-2-7 17:10 上传

    然而,事情并没有那么简单,输入uid却提示你不是admin,无法获取flag,眼看到手的flag就飞了,这怎么行。此时需要把搜索的关键字变为"CTF Web admin",相信可以找到一些相关的信息的。通过https://blog.csdn.net/qq_37410729/article/details/109248378这篇文章可以看到同类型的题目的解法,根据它用到了cookie,那我们可以先看看我们的cookie是什么样,在当前的F12打开窗口中,依次选择应用程序,在左栏窗口中选择Cookie,然后带点击我们当前网站的域名,发现右边侧栏中有一个名为2023_challenge_jwt_token的项目,虽然这么长一串字符串不知道是什么,但是我们可以先对进行一些搜索,既然2023_challage看起来与我们访问的网站域名只差一个下划线,但是我们关注的点应该在其后半部分,也就是jwt_token上,依据“CTF Web jwt_token”关键字进行查询,这里我选择去掉了token这个关键字,原因在于并非越多的信息越有利于搜索,有时候简洁的关键字更有机会获得准确的答案,本来这里准备详细写一篇JWT相关博客,但鉴于发文时间已经较晚,且发现了一篇写的非常好的文章https://blog.csdn.net/qq_45521281/article/details/106073624,分享给大家,此文章是我在前者搜索关键字的基础上衍生后找到的,对本题的解决有很大作用。通过文章可以了解到JWT是一种身份凭证,因为同一网站不同网页之间切换时要需通过此身份凭证验证你的资格,确定有相应的权限才能进行访问。


    image-20230207150832598.png (136.96 KB, 下载次数: 0)
    下载附件
    2023-2-7 17:10 上传

    将右侧栏中发现的JWT字符串复制出来,进入jwt.io这个网站中,很快啊,就可以看到字符串原本的内容,我们重点关注第二栏,里面有uid和role两个参数,这里我已经将user修改成了admin,这样的话如果服务器忽略了签名校验错误,那么我们role将从user变为admin(出题人说是服务器忽略了签名校验错误,之前表述不准确,这里作以修改),至此我们已经完成了对密钥的伪造,下一步就是尝试骗过服务器了。


    image-20230207152733620.png (105.25 KB, 下载次数: 1)
    下载附件
    2023-2-7 17:10 上传

    这里依然是在我们的F12窗口中,在我们选择的第一栏2023_challenge_jwt_token对应的值上双击,然后粘贴上一步生成的密钥,然后最重要的一步来了,在
    [color=]当前页面
    的URL网址后回车,或者刷新页面,可以看到flagC获取成功(截至发文前网站居然还未下线,i了i了)。


    image-20230207153915662.png (145.33 KB, 下载次数: 0)
    下载附件
    2023-2-7 17:10 上传

    千万不要像我一样又去login页面重新登录,然后以为自己能够从login到home,然而只能得到一个302(临时重定向,以为还有机会)响应,哪怕后边变成了admin,也只不过是302,只有home页面,不管你是user还是admin,每次响应都是200。像极了满世界找爱你的人,以为变成了admin后,login就会给你结果,结果连个200都没有,你要的找爱你的人在home呀,home,不是别人给的home,在你的home呀(官方他真的,我哭死),程序都懂得的事,你不懂吗(恼火)?这段话当个乐呵就行了哈哈哈哈哈哈。


    image-20230207154704671.png (121.31 KB, 下载次数: 0)
    下载附件
    2023-2-7 17:10 上传

    些许尝试
    除了以上的操作外,其实也进行了许多的其它尝试,对视频分割成帧,试图寻找其中的奥秘,将视频上方的01字符串构造出一个条形码,结果扫不出来。对背景音乐尝试提取隐写,一无所获。在网站的CSS样式表中,找到了一张附着在图片末尾的pwd,却不知道该放到哪里。。。
    总结
    不出意外的话,这应该是题解的最后一篇了,以前有觉得每天坐电脑前写写文章多好的,这几天的写题解改变了我的看法,让我感受到美好的事物总藏于幻想之中,一旦进入现实便会落得一地鸡毛。想起上个月22日零点整等待题目出现,结果才发现白天题目才出来哈哈哈哈,从19年第一次参加吾爱的活动,第一题磕磕绊绊、连蒙带猜,到现在能够顺利解出一两题也算是一种进步吧。不过还是有遗憾的,今年Windows中级题目变成了64位,然后也增加了反调试,难度一下子就上去了,学习x64dbg使用,脱掉了upx壳(不脱也行,在某篇帖子的评论区学到了大佬的000000的手法,非常滴妙啊),期间读了《逆向工程核心原理》后边也想办法过掉了反调试,找了好久终于找到了关键call,只能爆破success,却没获取到flag。遗憾年年有,今年特别多,也暴露出一些问题,汇编语言的不熟练,导致分析进度缓慢。由于平时主要忙于学Java,分给其它的时间就所剩无几了,好在今年的Web有所收获哈哈哈。想起刚开始做今年的题的时候,有坛友评论了去年的题解帖子,问我一些问题,仿佛看到了当年刚开始学习的自己,从什么都不知道到现在知道一点点,一想到这就不再敢犯懒了,新的一年,继续加油!
    其它题解
    【2023】春节解题领红包之二https://www.52pojie.cn/thread-1742329-1-1.html
    【2023】春节解题领红包之三https://www.52pojie.cn/thread-1742449-1-1.html
    【2023】春节解题领红包之四https://www.52pojie.cn/thread-1742785-1-1.html

    下载次数, 服务器

  • 梦旅意中人
    OP
      


    guyinqian 发表于 2023-2-7 21:51
    @梦旅意中人 想请问一下,实际生活中如果不知道JWT Token的加密Secret,那是不是这种JWT伪造是无效的呢?

    对的,不知道Secret基本无解。因为一旦Secret泄露的话,那对这个网站来说剑指就是灾难,因为所有的页面全部就没有了区分,没有权限也直接可以被访问,所以这种东西一般来说是需要被保护的很好的,当然也有工具可以破解加密的jwt,不过仅限于弱口令,形如123456、admin等这种特别简单的,实际的话其实都很复杂的,可以有效抵御攻击,这道题目实际上是为了做题方便留下的这个缺口,不过没有不透风的墙,不排除现实中有这样的可能。
    Ganlv   

    “域名与服务器的关系为一对一关系,即一个域名只指向一个服务器ip” 这个说法不正确。你下面的图片里,一个域名就可以解析出多个 IP,至少 CDN 就是利用这个来实现的。
    jwt.io 显示 Signature Verified 是因为你改了右边。你改左边的时候,会解析左边,并用右下角的 secret 校验。你改右边的时候,会用右下角的 secret 签名。
    能改 role:admin 是因为服务器忽略了签名校验错误,直接进行下一步了。
    a1069517910   

    感谢楼主分享!!!
    移情√似水   

    如贴主一样,刚开始学习的自己,从什么都不知道出发开始探索,其中找到乐趣,一想到这就不再敢犯懒了,新的一年,继续加油!
    梦旅意中人
    OP
      


    移情√似水 发表于 2023-2-7 18:48
    如贴主一样,刚开始学习的自己,从什么都不知道出发开始探索,其中找到乐趣,一想到这就不再敢犯懒了,新的 ...

    加油加油哈哈哈哈,新的一年,更上一层楼!
    陌生的感觉   

    学习了,感觉能力不行,看不懂
    梦旅意中人
    OP
      


    陌生的感觉 发表于 2023-2-7 19:20
    学习了,感觉能力不行,看不懂

    哈哈哈哈哈,一点一点来嘛,慢慢都就会了。
    oynn   

    我怎么没发现!!!
    梦旅意中人
    OP
      


    oynn 发表于 2023-2-7 20:56
    我怎么没发现!!!

    发现啥?
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部