CTF | CTF比赛题解分享

news2024/11/17 12:51:12

本文由掌控安全学院 - sbhglqy 投稿

前言:由于此次比赛的题目较多,所以这是这个比赛的第一篇wp,共20题,先记录一下,防止忘记。里面有些题目是新手题较为简单,但也有许多有意思的题目,真的是做的过程痛不欲生,做完才感觉到酣畅淋漓,废话不多说,开写。

一、签到题——hello CTFer

1.题目给出了一个网址如下。

https://cyberchef.org/#recipe=From_Base64('A-Za-z0-9%2B/%3D',true,false)&input=Ylc5bFkzUm1lMWRsTVdOdmJUTmZkREJmYlRCbFkzUm1Yekp2TWpNaElTRjk

只需要对input参数的值进行两次base64解码即可获得flag。

二、Classical Crypto——ezrot

1.附件中信息如下。

>@64E7LC@Ecf0:D0;FDE020D:>!=60=6EE6C0DF3DE:EFE:@?04:!96C0tsAJdEA6d;F}%0N

根据题目可以得到这是个rot家族编码,经过尝试,此为rot47编码,解码即可获得flag。

三、Classical Crypto——可可的新围墙

1.附件内容如下。

mt3_hsTal3yGnM_p3jocfFn3cp3_hFs3c_3TrB__i3_uBro_lcsOp}e{ciri_hT_avn3Fa_j

根据题目”新围墙”可以很容易的想到是栅栏密码,不过这是个w型栅栏密码,编写脚本获得flag。

1    def dec(encrypted, num):2    matrix = [([0] * len(encrypted)) for i in range(num)]3    cur = 04    for i in range(num):5        if i == 0:6            pair = [(num - (i + 1)) * 2 - 1]7       elif i == num - 1:8           pair = [i * 2 - 1]9        else:10            pair = [(num - (i + 1)) * 2 - 1, i * 2 - 1] 11
12        pair_i = 013        j = i14        while True:15            if cur = len(encrypted):16                break17    i_s = []18    for a in range(num):19        i_s.append(a)20    for a in range(num - 2, 0, -1):21       i_s.append(a)22    i_s_len = len(i_s)23    decrypted = ''24    for j in range(len(encrypted)):25        decrypted += matrix[i_s[j % i_s_len]][j]26    return decrypted 27
28    ciphertext = 'mt3_hsTal3yGnM_p3jocfFn3cp3_hFs3c_3TrB__i3_uBro_lcsOp}e{ciri_hT_avn3Fa_j'29  for i in range(2, len(ciphertext)):30    plaintext = dec(ciphertext, i)31    if "moectf" in plaintext:32        print(plaintext)

四、Classical Crypto——皇帝的新密码

1.附件内容如下。

tvljam{JhLzhL_JPwoLy_Pz_h_cLyF_zPtwPL_JPwoLy!_ZmUVUA40q5KbEQZAK5Ehag4Av}

根据题目”皇帝的新密码”可以想到凯撒密码,当偏移量为7时获得flag。

 

五、Classical Crypto——不是”皇帝的新密码”

1.附件内容如下。

scsfct{wOuSQNfF_IWdkNf_Jy_o_zLchmK_voumSs_zvoQ_loFyof_FRdiKf_4i4x4NLgDn}
md5 of flag (utf-8) 'ea23f80270bdd96b5fcd213cae68eea5'

给出了flag的md5值,第一想法肯定是去爆破一下了,很显然拿不到答案。

这里提供几个常见的爆破md5值的网址:
https://www.somd5.com/
https://www.cmd5.com/
http://scmd5.com/

2.根据题目提示“不是皇帝的新密码”,那就不是凯撒密码,但是根据题目所给内容又像是一种代换密码。搜索凯撒密码的变种,查到了维吉尼亚密码。接下来就是技巧了,由于知道flag的开头肯定是”moectf”,根据这个去猜测密钥,最终得到密钥为”goodjob”。

验证一下得到的解密内容的md5值。

完全正确,提交即可。

六、Classical Crypto——猫言喵语

1.文件内容如下。

喵喵?喵喵喵喵喵喵喵喵喵喵喵喵 喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵?喵喵?喵喵喵喵喵?喵喵喵喵喵?喵喵喵喵喵?喵喵?喵喵喵喵喵?喵喵喵喵喵喵 喵喵喵喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵?喵喵?喵喵喵喵喵?喵喵喵 喵喵喵喵喵?喵喵?喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵?喵喵?喵喵喵喵喵喵喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵?喵喵?喵喵喵喵喵喵喵喵喵 喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵?喵喵?喵喵喵喵喵?喵喵喵 喵喵喵喵喵?喵喵喵喵喵?喵喵喵喵喵喵 喵喵喵喵喵?喵喵喵喵喵喵 喵喵喵 喵喵?喵喵喵喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵?喵喵?喵喵?喵喵喵 喵喵?喵喵?喵喵?喵喵喵喵喵喵喵喵?喵喵?喵喵?喵喵喵喵喵喵 喵喵喵喵喵喵 喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵?喵喵?喵喵喵喵喵喵喵喵喵 喵喵?喵喵喵喵喵?喵喵?喵喵喵喵喵喵喵喵?喵喵?喵喵喵喵喵?喵喵喵喵喵?喵喵喵 喵喵?喵喵喵喵喵喵喵喵?

2.根据文件提示”Morse code”,是摩斯密码。众所周知。摩斯密码只有两种符号,所以得把文件内容根据特征划分成两块。内容中的空格相当于分隔符,根据观察,可以看出”喵喵?”是一组,”喵喵喵”是一组,根据这个规律进行转换,得到如下内容。

./----/-/--..-./.-./-./-../-./--/--/--..-./.-.-/-././--..-./.---/--././--..-./.---/-/--..-./.-.-/-./-.--/-.--/-/.--/--..-./..-/.../--./..--/--/--..-./.---/.-../--..-./-.-/.--.

解码发现有问题,将”-“和”.”交换一下解码成功。

套上moectf{},提交即可。

七、Misc-Misc入门指北

1.文档最后有个base64编码的字符串,直接解码即可获得flag。

图片

 

八、Misc—打不开的图片1

1.下载得到一个破损的文件,用16进制编辑器打开,看到文件头和文件尾就可以想到是个jpg格式的文件。2.但是文件头有点不对,将第二个字节改成D8,保存。3.打开图片,啥也没有,右击属性,在详细信息中看到一串16进制编码,解码得到flag。

几个常见文件的文件头的16进制编码:
zip:504b0304
rar:52617221
png:89504e47
jpg:ffd8ff
gif:47494638

 

九、Misc-打不开的图片2

1.这次显示文件是个jpg格式的图片,但是打不开,16进制编辑器打开,看到文件头出现了IHDR头,就可以想到其实是个png格式的图片,再看到文件尾,更加证实了是个png文件。2.修改文件头前4个字节为89504e47,保存。3.打开图片,即可看到flag

 

十、Misc-狗子(1)普通的猫

1.下载得到一个音频,用audacity打开没有什么发现。最后用16进制编辑器打开,flag就藏在文件尾。

十一、Misc-building_near_lake

1.这题跟信息泄露有关,附件是个图片,先通过百度搜图看看是哪里。

2.根据原图中的umx和搜索结果可以定位到厦门大学,搜索厦门大学的经纬度。题目中说使用的是BD09坐标系,所以就要将GPS坐标转为BD09坐标。

function wgs84ToBd09(lng, lat) {
  var pi = Math.PI * 3000.0 / 180.0;
  var x = lng,
      y = lat;
  var z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * pi);
  var theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * pi);
  var bdLng = z * Math.cos(theta) + 0.0065,
      bdLat = z * Math.sin(theta) + 0.006;
  return {"bdLng": bdLng, "bdLat": bdLat};
}

 

3.还差一个拍摄设备的发布会时间,查看图片的详细信息,发现是小米的设备,照相机型号为22122RK93C。

 网上搜索,可以发现改照相机型号用于Redmi k60手机上,搜索Redmi k60手机的发布会时间得到2022年12月27日。4.填上相关信息,提交获得flag。

十二、Misc-机位查询

  1. 附件给了我们三张图片,叫我们找到这三张照片分别是在哪栋楼拍的。2.第一张照片可以看到南宁站和中铁快运营业部,放大还可以看到猪霸王煮粉,直接百度地图上搜,就可以定位到大概的位置了。

    候选地点是嘉士摩根国际。

    3.第二张照片是最简单的,直接百度识图,可以看到有个人在小红书上刚好发布过这张图片,直接拿到了拍摄地点。

    https://www.xiaohongshu.com/explore/5f223da3000000000101f3f2

4.第三张照片是最头疼的,全都是高楼,能够看到的只有广西农信,时代丽都,搜索相关位置,找到了大概区域。
 但是能够拍到这张图片的位置可不少。试了好久也没试对。最终在图片的属性信息中看到了有经纬度。接下来就可以定位了。手机上下载”经纬度定位”app,输入经纬度就得到了地址。(一开始用谷歌定位一直定位不出来)

经度:108; 21; 33.0084219999844919
纬度:22; 48; 48.3576960000066

 

最终将三个地点的前两个字的拼音进行拼接即可,即jiashi_baisheng_huijin。

十三、Web-Web入门指北

1.一次16进制解码加一次base64解码即可获得flag。

十四、Web-http

1.题目意思如下。

只要我们能满足以上5个条件,即可获得flag。
2.但是由于容器采用的是wsrx穿透,最终访问的是localhost的地址,这时burp就无用武之地了。这里用了另一款工具postman。发包即可获得flag。

 

十五、Web-彼岸的flag

1.直接从前端代码中搜索ctf就能拿到flag。

十六、Web-cookie

1.看下所给的附件内容。

## 一些api说明

注册 `POST /register`
``json
{
    "username":"koito",
    "password":"123456"
}
``

登录 `POST /login`
``json
{
    "username":"koito",
    "password":"123456"
}
``

获取flag `GET /flag`

查询服务状态 `GET /status`

告诉我们有register、login、flag、status四个api接口,最终肯定是要访问flag接口获得flag。
2.访问一下地址,页面回显如下。

访问一下flag接口。

提示我们不是admin,看来想获得flag必须是admin身份。
3.注册一个账号。注册成功,登陆一下。

发现产生了cookie。

base64解码发现可操作的地方,只需要将role改为admin,再编码回去,换掉cookie就可以了。访问flag接口的时候带上我们构造好的cookie就可以了。

十七、Web-gas!gas!gas!

1.页面如下。

2.先随便提交一次,看看页面有没有回显。

3.看到了页面提示,那这题看来是根据页面的回显来改变方向和油门。看一下方向和油门两个参数对应的参数名。

4.知道了这两个参数对应的参数名之后,就可以编写脚本了。

import requests
import re
import time

url = "xxxxxx"
session = requests.session()    # 必须要用session,只用post的话,当一次会话结束后,session的清空了
params = {'driver': 'a', 'steering_control': '-1', 'throttle': '2'}
response = session.post(url,params)
response.encoding = "utf-8"
while True:
    pattern = re.compile('<font color="red">(.*?)</font>')
    res = pattern.findall(response.text)
    # soup = BeautifulSoup(response.text, 'html.parser')
    # res = soup.find('div', class_="info")
    # print(response.text)
    print(response.text)
    print(res)
    if 'moectf' in response.text:
        print(response.text)
        break
    if res[0] == "弯道向右,抓地力太小了!":
        params['steering_control'] = -1
        params['throttle'] = 0
    elif res[0] == "弯道向左,抓地力太小了!":
        params['steering_control'] = 1
        params['throttle'] = 0
    elif res[0] == "弯道直行,抓地力太小了!":
        params['steering_control'] = 0
        params['throttle'] = 0
    elif res[0] == "弯道向右,抓地力太大了!":
        params['steering_control'] = -1
        params['throttle'] = 2
    elif res[0] == "弯道向左,抓地力太大了!":
        params['steering_control'] = 1
        params['throttle'] = 2
    elif res[0] == "弯道直行,抓地力太大了!":
        params['steering_control'] = 0
        params['throttle'] = 2
    elif res[0] == "弯道直行,保持这个速度":
        params['steering_control'] = 0
        params['throttle'] = 1
    elif res[0] == "弯道向左,保持这个速度":
        params['steering_control'] = 1
        params['throttle'] = 1
    elif res[0] == "弯道向右,保持这个速度":
        params['steering_control'] = -1
        params['throttle'] = 1
    time.sleep(0.1)
    response = session.post(url, params)
    response.encoding = "utf-8"

 

十八、AI-AI入门指北

1.题意如下。2.访问pytorch官网, 查找安装不带GPU的pytorch命令。连接来后就是flag。

十九、Reverse-base_64

1.得到一个pyc文件,进行python反编译,拿到如下代码。

import base64
from string import *
str1 = 'yD9oB3Inv3YAB19YynIuJnUaAGB0um0='
string1 = 'ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba0123456789+/'
string2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
flag = input('welcome to moectf\ninput your flag and I wiil check it:')
enc_flag = base64.b64encode(flag.encode()).decode()
enc_flag = enc_flag.translate(str.maketrans(string2, string1))
if enc_flag == str1:
    print('good job!!!!')
else:
    print('something wrong???')
    exit(0)

2.根据代码意思,其会将我们输入的flag进行base64编码后,再根据string2和string1做一个映射。所以我们只需要将str1按照逆序的过程返回去即可。

str2=str1.translate(str.maketrans(string1,string2))
print(str2)        # bW9lY3Rme3BZY19BbmRfQmFzZTY0fn0=

解码即可。

二十、pwn-test_nc

1.这题就是让我们了解python中的pwn库的,只要nc连接上之后就会给一个shell环境,这不就是妥妥的命令执行了嘛。

from pwn import *
io = remote("localhost",59290)
res = io.recv()
io.interactive()

 

申明:本公众号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法.

hack渗透视频教程,扫码免费领

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1073189.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

N个元素进栈 出栈情况种数

文章目录 1.逐一求解2.卡特兰数的引入3.得出结论 1.逐一求解 面对此类问题 我们无法直接分析元素个数 为N的情况 通常我们都会逐一分析 设定一个函数 f(N):N为元素个数 f(N)为出栈顺序种数 显然: f(1) 1:af(2) 2:a,b b,af(3) 5:a,b,c a,c,b b,a,c b,c,a /*c,a,b*/ …

【血压仪器】开发血压计方案pcba电路板

血压计方案测量准确&#xff0c;语音播报结果&#xff0c;大屏幕&#xff0c;显示更清晰&#xff0c;算法经过大量临床测试&#xff0c;更稳定等特点&#xff0c;另外对于此类方案&#xff0c;由于已经拥有成熟方案&#xff0c;可配合客户需求开发设计&#xff0c;可以在短时间…

opencv-phase 函数

计算梯度强度和方向 梯度的方向与边缘的方向总是垂直的。图像中的边缘可以指向各个方向&#xff0c;通常会取水平&#xff08;左、右&#xff09;、垂直&#xff08;上、下&#xff09;、对角线&#xff08;左上、右上、左下、右下&#xff09;等八个不同的方向计算梯度。 角度…

gds/网表导入virtuoso注意事项

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?拾陆楼知识星球入口 gds和网表导入到virtuoso中都需要添加参考库,这里需要注意的是如果上层模块/顶层调用下层模块时参考库时,需要把library中的模块cell的单独copy到新的库中,模块的via layout或module schematic和sy…

将一个shapefile 由地理坐标系统投影到投影坐标系统

如题&#xff1a; 所需数据&#xff1a; idll.shp&#xff0c;一个以十进制度表示经纬度数值的shapefile&#xff0c;为Idaho 州的轮廓图。 任务要求: 定义idll.shp空间参考为地理坐标系North American Datum 1927&#xff0c;并将idll.shp 投影到Idaho 州横轴墨卡托&#xf…

桶装水一键订水系统,支持通过手机端一键订水票;

桶装水一键订水系统&#xff0c;支持通过手机端一键订水票、模版消息推送送水状态&#xff0c;支持门店送水员一键接单送水&#xff0c;上门核销完成送水过程的专业送水(订水)系统&#xff1b; 桶装水订水送水系统&#xff08;多门店版&#xff09; 1、专属门店 在线建立专属门…

MATLAB算法实战应用案例精讲-【图像处理】SLAM技术详解

目录 前言 几个高频面试题目 SLAM和路径规划对比 算法原理 SLAM组成 常用的SLAM传感器 常用的两种地图类型 SLAM算法实现4要素 主流SLAM算法 2D激光SLAM算法 1. Gmapping 2. Hector slam 3. KartoSLAM 4. LagoSLAM 5. CoreSLAM 3D激光SLAM算法对比 测试的SLAM…

SpringBoot项目整合

一、创建项目 IDEA中采用spring initialzer...创建&#xff0c;jdk选择8&#xff0c;maven,jar。。。springboot版本2.5.0&#xff08;稳定&#xff09; 项目依赖&#xff1a; 二、项目结构&#xff1a; 原始pom.xml文件 <?xml version"1.0" encoding"UT…

Java基础篇 数组

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; Java从入门到精通 ✨特色专栏&#xf…

[VC++]圆形进度条

[VC]圆形进度条 源码开发环境&#xff1a;VC6.0 WIN10 64位下编译通过利用绘制饼图的原理&#xff0c;来制作的圆形进度条&#xff0c;可以显示百分比。软件运行截图如下&#xff1a; 附件源码下载(点击下载&#xff09;

低投入,高产出的数字人直播间软件强势“出圈”,铭顺科技带你一探究竟

数字人直播的魅力在于它的独特性&#xff0c;通过先进的数字技术&#xff0c;创作者可以打造自己独一无二的数字形象&#xff0c;让观众与其互动。 与传统的直播相比&#xff0c;数字人直播模式的投入成本相对较低&#xff0c;却能获得高额产出。传统直播需要大量的设备、场地…

ROS2创建工作区

ROS2创建工作区 ros2官方使用colcon工具来进行代码编译&#xff0c;首先需要安装colcon&#xff1a; sudo apt install python3-colcon-common-extensions创建工作区&#xff1a; mkdir -p ~/ros2_ws/src cd ~/ros2_ws进入src文件夹下拉取一部分例子代码&#xff1a; cd ~/…

RK3568笔记二:部署手写数字识别模型

若该文为原创文章&#xff0c;转载请注明原文出处。 环境搭建参考RK3568笔记一&#xff1a;RKNN开发环境搭建-CSDN博客 一、介绍 部署手写数字识别模型&#xff0c;使用手写数字识别&#xff08;mnist&#xff09;数据集训练了一个 LENET 的五层经典网络模型。Lenet是我们的…

Step2:Java内存区域与内存溢出异常

文章目录 1.1 概述1. 2 运行时数据区域1. 3 HotSpot虚拟机对象探秘1. 4 作业:OutOfMemoryError异常体验1.1 概述 对于Java程序员来说,再虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,不容易出现内存泄露和内存溢出的问题,看起来由虚…

Jenkins 设置定时任务

1、点击项目后点击Configure 2、点击Build Triggers勾选Build periodically 3、设置规则 # 样例展示&#xff1a; # 每天的22:00 执行 0 22 * * * # 每个月的1号22:00 执行 0 22 1 * *# 每周一到周五的晚上22&#xff1a;00&#xff0c; 1-5 表示周一到周五 0 22 * * 1-5# 每…

短视频平台的那些事

短视频平台的那些事 文章目录 短视频平台的那些事1. 前言2. 概览介绍3. 业务框架4. 关键技术能力4.1 视频处理4.1.1 FFMPEG技术 4.2 视频安全&#xff0c;合规4.2.1 视频安全审核4.2.2 视频MD5校验4.2.3 视频AI指纹 4.3 视频内容理解4.3.1 视频分类4.3.2 视频标签4.3.3 视频质量…

体育场馆能源消耗监测管理平台,为场馆提供能源服务

随着能源问题的不断重视&#xff0c;体育场馆能源问题也被人们广泛的关注。为了让体育场馆的能源高效利用&#xff0c;体育场馆能源消耗监测管理平台应用而生。 该平台通过采集、监测场内数据&#xff0c;并对数据进行实时分析与反馈&#xff0c;从而帮助管理者了解到场内能源…

用 Python 进行数据分析,不懂 Python,求合适的 Python 书籍或资料推荐?

想要学好Python数据分析&#xff0c;打好基础最重要&#xff0c;学习Python语言基础语法知识&#xff0c;推荐菜鸟教程这个网站。 Python 基础教程 | 菜鸟教程 ​www.runoob.com/python/python-tutorial.html 如果觉得文字教程生硬难懂的话&#xff0c;可以看视频教学&#xf…

网络安全工程师需要学习什么?争做网络安全守护使者

文章目录 前言 一、计算机基础知识二、网络安全技术三、信息安全法律法规四、风险评估与管理五、安全运维六、渗透测试与防护七、安全知识演练八、心理承受力与逆向思维九、团队合作与沟通能力十、持续学习和自我提升十一、道德与伦理十二、综合素质与领导力 如何入门学习网络…

LeetCode 143.重排链表

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 分析题目后我们可以直接进行模拟实现。 具体用到的就是我们之前的知识的结合&#xff0c;首先使用快慢指针找到链表的中间结点。然后将后半段链表给翻转一下&#xff0c;然后再让这…