2023数字中国创新大赛网络数据安全赛道初赛WP

数据安全题目-SQL注入

解题过程如下,全靠大神带飞,有幸参与,菜鸟要学的可太多了。。。。。。

数据安全-端口管理系统

①直接访问,抓包,用户名密码明文传输

②考虑访问/www.zip,源码可下载,进行源码分析,可能存在注入,尝试注入

③已知库信息

④直接用Sqlmap跑注入点,发现密码处存在注入,跑出payload

⑤继续跑表等信息,跑admin,得到加密后的密文

第一次容器失效,再次跑出密文:

dmnOatTDBuqnMgQXCH4r/Yv/r4slOh+O2ZViLh5/u6yZV9f4mxd+GpYuPigRPmT3

⑥分析之前的源码,可知经过了AES加密算法处理,依据AES加密算法原理需考虑密钥key和偏移量iv进行解密

⑦使用python,依据lib.php编写一个脚本(详见ase.py),打印出key和iv

⑧再将加密的密文解密可得flag

flag{b9331d74-fd8c-44bb-93b3-e7591f74a3d4}

脚本代码

import math
import hashlib
import base64


class AES_key:
    def __init__(self):
        self.pi = "6.2831853174"

    def get_chars(self):
        chars_list = []
        for i in range(1, 27):
            chars_list.append(chr(96 + i))
        return chars_list

    def get_pi_chars(self):
        n_pai = self.pi
        chars_list = self.get_chars()
        n_pai = n_pai.replace(".", "")
        n_pai_array = list(n_pai)
        pi_chars_list = []
        for i in range(len(n_pai_array)):
            pi_chars_list.append(chars_list[int(n_pai_array[i])])
        return "".join(pi_chars_list)

    @staticmethod
    def aaa(n: int) -> int:
        return n % 5

    def bbb(self, n: int) -> int:
        s = (n + 1) * (n - 1) % 5
        s += n * 4 % 3
        s += n // 4 * 3
        s = self.aaa(314) / ((s % 5) * n + 7) + 5
        return s

    def ccc(self, n: int) -> str:
        k = 3
        chars_list = self.get_chars()
        pad_chars_list = []
        for i in range(0, int(n * k), k):
            pad_chars_list.append(chars_list[i])
        return "".join(pad_chars_list)


class AES_enc:
    def __init__(self, data: str):
        self.cipher = self.enc_AES(data)

    def enc_AES(self, data: str) -> str:
        s = AES_key()
        key = s.get_pi_chars() + s.ccc(s.bbb(2568))
        print(f"key:{key}")
        iv = hashlib.md5(key.encode("utf-8")).hexdigest()[:16]
        print(f"iv:{iv}")
        mod = 'AES-128-CBC'
        enc = openssl_encrypt(data, mod, key, 1, iv)
        return base64.b64encode(enc.encode("utf-8")).decode("utf-8")

    def get_cipher(self) -> str:
        return self.cipher

    def set_cipher(self, cipher: str):
        self.cipher = cipher


def openssl_encrypt(data, mod, key, options, iv):
    # 请使用 OpenSSL 加密函数
    return data


a = AES_enc("aaa")
print(a.cipher)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐