2022_1024安全挑战赛_t3复现

2022_1024安全挑战赛_t3复现

太菜了,哎。。。。。。

(1)题目

通过网上大佬的评论得知这是一个异或的冰蝎流量加密。

参考博客:https://liriu.life/PHP-5ba36eb0362743ed8fa5588c97325f7e

(2)分析

我们可以通过明文与密文异或算出key。

做题时卡死在了这里。

冰蝎传上去的php文件与这几个php文件内容相识,其中前面有几个字符是不变的,于是就可以选来作为明文。

import base64
from base64 import b64decode

phrases = [ b'<?\n@error_reporting(0);\n\n\nfuncti',
            b'<?\n@error_reporting(0);\n\nfunctio',
            b'<?\n@error_reporting(0);\n@set_tim',
            b'<?\n@error_reporting(0);\nset_time',
            b'<?\nerror_reporting(0);\nfunction ',
            b"<?\nerror_reporting(0);\nheader('C",
            b'<?\nfunction main($action, $remot',
            b'<?php\n@error_reporting(0);\n\n\nfuncti',
            b'<?php\n@error_reporting(0);\n\nfunctio',
            b'<?php\n@error_reporting(0);\n@set_tim',
            b'<?php\n@error_reporting(0);\nset_time',
            b'<?php\nerror_reporting(0);\nfunction ',
            b"<?php\nerror_reporting(0);\nheader('C",
            b'<?php\nfunction main($action, $remot',
            b'<?php\n\n$taskResult = array();\n$p',
            b'@error_reporting(0);\n\nfunction g',
            b'@error_reporting(0);\nfunction ma',
            b"assert|eval(base64_decode('",
            ]

def xor(l0, l1):
    ret = [chr(ord(chr(a)) ^ ord(chr(b))) for a, b in zip(l0, l1)]
    return "".join(ret)

def check(cipher):
    cipher = b64decode(cipher)
    for phrase in phrases:
        print(phrase)
        p = phrase[0:16]
        c = cipher[0:16]
        k = xor(p, c)
        print("-"*99)
        print(k)

if __name__ == '__main__':
    cipher="密文"
    key = check(cipher)

爆出flag

flag3{Beh1_nder}
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2021-2023 00hello00

请我喝杯咖啡吧~

支付宝
微信