御林夏令营

签到题

见此 https://www.cnblogs.com/BUGCAT/p/17781082.html

[Baby]babyphp

flag1

对于flag1,只有传入的a和b的值不相等,而且SHA1加密后的值相同才会出现flag

php对数组进行sha1加密都为false,所以我们传入两个数组进去

http://101.35.209.40:2003/?a[]=1&b[]=2

flag2

代码中给提示说要 cat /flag ,那就是要将 Yu 赋值为 exec('cat /flag');

但是!这种肯定不是暴力碰撞出来的(,所以只能找工具生成

看到工具生成的两个文件后面有乱码,为了不影响代码就可以在 exec(‘cat /flag’); 加上 ?> 来终止 php 的执行

这里有几个要注意的点(卡了好久):

工具生成的文件中会有Hex值为 00 的字符,如果是直接复制粘贴文件内容然后到 url 处输出就错了,首先 00 会变 20 (空格),还有一些乱码也可能会被错误识别,正确的做法是直接将文件中的内容拿去 url 编码,然后贴在 url 里面就OK了(这里直接用Burp一条龙处理就OK)

exec('cat /flag'); } ?> 这种其实是错误的,是不需要花括号的,我本来以为 eval() 函数是一个直接代码替换,虽然说可以这么理解,但是编译器会首先检查 eval() 中的字符串是否是可执行的代码,是的话才能替换,所以如果加了花括号,就会报错,因为缺少了匹配的花括号( eval() 函数内的代码字符配对和函数外的完全无关 )

最后有个最难受的,就是 exec(‘cat /flag’); 这条指令,cat 虽然是输出用的,但是这里要输出到一个文件或变量中去,就要改为 exec(‘cat /flag’,$outp); ,这样就会将执行结果输入到 $outp 这个变量里,最后再输出就行了,所以要传入的代码是这样的

exec('cat /flag',$outp);
print_r($outp);
?>

【[Baby]babyphp】 全部解决

[Baby]babyunserialize

flag1

对于flag1,观察代码可知会将 POST 数据中的 auth 反序列化,然后判断其中的值,那么只要创建有对应值的数组(类好像没法反序列话) auth,然后 POST 传入就行

!!注意传 POST 时 Content-Type 这行要加

[Easy]♪绝♩对♫音♬感♪

这道题做做停停,终于搞出来了

下载音频,看看波形图,好像没什么东西

用 Winhex 或类似软件打开,看看头和尾,末尾有这么一句话

The interval of each byte data is 9 and the first byte is at the beginning of the wav data

每隔九个,我把编辑器设置一下

这样就比较好看,如果有隐藏信息的话就是一排下来

然后就可以翻到这个东西,看起来像一封邮件,和题干里说的一样

但是没有找到三体((,接下来就不会做的了

闲的时候水水群,看到这么一段聊天(

原来题干里有提示,赶紧重新仔细看一下题干,邮件特别标注了英文名 Spam ,网上搜搜,有惊喜发现

还得是群里的佬

然后就尝试把文本里的邮件给抽出来

一开始脑抽了,一个一个对照然后打在记事本里,结果就是打了一堆小错误,换行也没有注意

检查半天解码后得到的是乱码,直接放弃人工赛道了,不如自己写个 C++ 程序提取

相当简单,没十五分钟就提取出来了(16进制编码)(我前面到底在干什么

然后把编码去解码一下就得到邮件的文本了,再去 spam mimic 网站解码一下就得到 flag 了

CTF中Crypto大全(还在更新)

[Easy]♪绝♩对♫音♬感♪ 解决

[Middle]马赛克星球

恢复图片了!

下载附件,发现图片很大,23.1M,但是分辨率只有 648*328 (这数字一看就是故意搞的()),所以我们可能要修改一下图片的尺寸

STFW

CTF Misc(1)图片隐写基础以及原理,覆盖了大部分题型

通过CRC32爆破修改图片的宽高 ctf-misc图片隐写

所以来进行CRC爆破

用hex打开图片看看

import os
import binascii
import struct

crcbp = open("D:\pythonProject\Recycle.png", "rb").read()    #打开图片
# print(crcbp)
for i in range(10000):
    for j in range(10000):
        data = crcbp[12:16] + \
            struct.pack('>i', i)+struct.pack('>i', j)+crcbp[24:29]
        crc32 = binascii.crc32(data) & 0xffffffff
        if(crc32 == 0x8990B635):    #图片当前CRC
            print(i, j)
            print('hex:', hex(i), hex(j))
            break

爆破后可以得到图片的分辨率为 3000*4200 ,在hex中进行修改,可以得到完整图片,下面附有flag

找到隐藏的信息了!

继续看看hex,发现最后有一段python代码

from PIL import Image
import math
import random

final_image = Image.open("base.png")
flag_image = Image.open("flag.png")

final_image_width = final_image.width
final_image_height = final_image.height

flag_image_width = flag_image.width
flag_image_height = 156

prime_li = []
c_li = []

if __name__ == '__main__':
    a = 0
    c = 0
    while 1:
        a += 1
        if is_prime(a):
            prime_li.append(a)
            c += 1
            if c > flag_image_width * flag_image_height:
                break
    for i in range(0, len(prime_li) - 1):
        value = (prime_li[i] + prime_li[i + 1]) * (prime_li[i + 1] - prime_li[i])
        if value in c_li:
            while value in c_li:
                value -= i
        c_li.append(value)

    k = 0
    for num in c_li:
        try:
            final_image.putpixel(
                (num % final_image_width, int(num / final_image_width)),
                flag_image.getpixel((k % flag_image_width, int(k / flag_image_width))),
            )
            k += 1
        except:
            print(f"The num: {num} is too big")

    for yy in range(0, final_image_height):
        for xx in range(0, final_image_width):
            if (yy * final_image_width + xx) not in c_li:
                final_image.putpixel(
                    (xx, yy),
                    (
                        random.randint(0, 255),
                        random.randint(0, 255),
                        random.randint(0, 255),
                    ),
                )

    final_image.save("mosaic.png")

仔细读了一下,发现是把flag的图片写入给的图片,然后其他的地方就随机生成色块

我们就可以依照上面,试着写出解密的代码

import math
from PIL import Image

shai = []
prime_li = []
c_li = []
final_image = Image.open("Recycle(2).png")
flag_image = Image.open("flag.png")

final_image_width = final_image.width
final_image_height = final_image.height

flag_image_width = flag_image.width
flag_image_height = 156

# Total = 500000000
# 
# shai = [True] * (Total+1)
# shai[0] = shai[1] = False
# for i in range(2,int(math.sqrt(Total+1))):
#     if shai[i]:
#         for j in range(i*i, int(math.sqrt(Total+1)), i):
#             shai[j] = False
#
# print("Part 1 Finish")
# print(Total)
#
# def is_prime(x):
#     if x < 0:
#         return False
#     return shai[x]

# 一开始写了一段埃筛发现不好判断筛的范围,可能会跑很久()

def is_prime(x):
    if x <= 1:
        return False
    for i in range(2, int(math.sqrt(x)+1) ):
        if x % i == 0:
            return False
    return True

if __name__ == '__main__':
    a = 0
    c = 0
    while 1:
        a += 1
        if is_prime(a):
            prime_li.append(a)
            # print(f"qwq {a}")
            c += 1
            if c > flag_image_width * flag_image_height:
                break
    for i in range(0, len(prime_li) - 1):
        value = (prime_li[i] + prime_li[i + 1]) * (prime_li[i + 1] - prime_li[i])
        if value in c_li:
            while value in c_li:
                value -= i
        c_li.append(value)
        # print(f"qwq {value} {len(c_li)} {len(prime_li)}")
    print(len(c_li))
    k = 0
    for num in c_li:
        try:
            flag_image.putpixel(
                (k % flag_image_width, int(k / flag_image_width)),
                final_image.getpixel((num % final_image_width, int(num / final_image_width))),
            )
            k += 1
        except:
            print(f"The num: {num} is too big")
            break

    flag_image.save("mosaic.png")

这里的 Recycle(2) 就是上面那张图片中间的乱像素点,要把它截出来,这个比较考验技术力和耐心((

现在就只需要看看 flag_image.width 定多大合适

经过多次尝试,以及翻了Akejyo大佬的blog(

2023·御林安全招新MISC部分

得知定 38 刚好不会报 “The num: {num} is too big”

然后就得到

看起来挺有规律的一张图(至少不是乱码),STFW,试试用 npiet 解一下

[Middle]马赛克星球 解决

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇