CTF入门学习
如下题目来自于 攻防世界(https://adworld.xctf.org.cn/task)。
- 入门题1:this_is_flag
- Most flags are in the form flag{xxx}, for example:flag{th1s_!s_a_d4m0_4la9}
- 答案:flag{th1s_!s_a_d4m0_4la9}
- 解析: 考验对flag的认知,flag夺旗。这题说明之后的答题格式都是flag{}
- 入门题2:掀桌子
- 菜狗截获了一份报文如下
- c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2,生气地掀翻了桌子(╯°□°)╯︵ ┻━┻
- 答案:flag{hjzcydjzbjdcjkzkcugisdchjyjsbdfr}
- 解析:尝试各种解密解码都不对之后,尝试进制,最大为f,故16进制,故16进制转换为10进制,转换后不对,减去128将其装换为字符串范围内,正确。flag 十进制 为102 108 97 103 ,其对应的16进制为 0X66 0X6C 0X61 0X67,java代码示例:
-
static void getFlag(){ String str = "c8e9aca0c6f2e5f3e8c4efe7a1a0d4e8e5a0e6ece1e7a0e9f3baa0e8eafae3f9e4eafae2eae4e3eaebfaebe3f5e7e9f3e4e3e8eaf9eaf3e2e4e6f2"; String flag = ""; for (int i = 0; i < str.length(); i = i + 2) { String hex = str.substring(i, i + 2); long sub = Long.parseLong(hex, 16); flag = flag + (char) Integer.parseInt(Long.toString(sub-128)); } System.out.println(flag); }
- 入门题3:gif
- 菜狗截获了一张菜鸡发给菜猫的动态图,却发现另有玄机
- 答案:flag{FuN_giF}
- 解析:
- 打开是一组黑白图片,将其装换为二进制如下:
- 01100110 01101100
- 0110000101100111
- 0111101101000110
- 0111010101001110
- 0101111101100111
- 0110100101000110
- 01111101
- flag 的二进制为 01100110、01101100、01100001、01100111
- 进行查询,验证其包含flag,将二进制转换为10进制,在转换为字符得到flag.
- 故解题思路正确。注意进制和编码问题,这也是解题可以