引言
今天讲的东西会稍微多一点,
我们直接开始吧~
General Skills / Based
题目首先提到 1337
,这个数字是什麽意思呢?
大家可以先参考维基百科: Leet
其实 1337
本身就是 Leet 这个字的 Leet 写法,
听起来很拗口,我稍微说明一下,
Leet 简单来说就是骇客语,
会将英文字母换成其他外形或发音相像的数字或符号,
藉此有一点混淆视觉的效果,且感觉更有骇客风格。
几个 Leet 例子:
当然写法有很多种,没有一定的规范,
但会有比较惯用的换法。
这有点像中文的拆字流行文化:
回到题目,题目要求先 nc 到一个服务器去:
$ nc jupiter.challenges.picoctf.org 29221
跑出一些讯息:
( 题目每次都会变,所以请你遵照自己跑出来的结果为主。 )
Let us see how data is stored
sludge
Please give the 01110011 01101100 01110101 01100100 01100111 01100101 as a word.
...
you have 45 seconds.....
Input:
可以看出程序要求将一串二进位数字转成许多字母并串起来,而且有限时。
再者,这题会有许多小题要答,这题二进位答对後还会出现其他题。
这边有三种解法:
如果要写 Python 解题,用的还是「题目出现後再贴上程序转换」的方法的话,势必需开两个以上的 shell , webshell 没办法这样做。
因此可以简单使用网路上转换工具,可以简单无脑复制贴上解题,但必须先判断题目目前是什麽进位制,再用相应进位制转换器转换。
不是用 webshell 的话,可以用简单 Python 程序解题,分别写出每题对应的转换程序,然後开另一个视窗来用该程序转换,原视窗则跑题目服务器。
使用 pwntools
。这是最进阶的方法,需额外套件,
但此套件使用率将会非常高,在更进阶的题目中再集中讲解,
这边暂不介绍。
开始解题:
网页转换
这里就不赘述了,可自行搜寻 binary to string
、 octal to string
、 hex to string
等关键字,网路上有许多转换器。
简单 Python 程序
这个方法需要至少开两个 shell ,其中一个跑 nc ,另一个写程序转换。这边只叙述写转换程序的部份:
l = input().split() # 读取字串并用空格切割
for b in l:
print(chr(int(b, base=2)), end='')
# base 2 to base 10 ,转成字元,并且字元间不换行
print() # 最後换行
l = input().split()
for b in l:
print(chr(int(b, base=8)), end='')
print()
s = input()
l = []
for i in range(len(s)//2): # 两两切一块
l.append(s[i*2:i*2+2]) # 放到 l 中
for b in l:
print(chr(int(b, base=16)), end='')
print()
写好程序後储存成 .py 档,在另一个 shell 执行它,
再来就是 nc 过程。
在原本的 shell 执行 nc 命令:
$ nc jupiter.challenges.picoctf.org 29221
下面是其中一次我执行的结果:
Let us see how data is stored
falcon
Please give the 01100110 01100001 01101100 01100011 01101111 01101110 as a word.
...
you have 45 seconds.....
Input:
01100110 01100001 01101100 01100011 01101111 01101110
经转换後得到 falcon
你会发现上面第二行就直接给你答案 falcon 了,算是第一题让你试水温用。
第二题:
Please give me the 143 150 141 151 162 as a word.
Input:
143 150 141 151 162
经转换後得到 chair
第三题:
Please give me the 6c696d65 as a word.
Input:
6c696d65
经转换後得到 lime
最後拿到 flag :
You've beaten the challenge
Flag: picoCTF{learning_about_converting_values_00a975ff}
我个人觉得App的名称、icon很重要,毕竟代表你整个app,所以今天开头先来个设定。 因为我记得我...
在介绍 gulp-gh-pages 之前 我们必须先在 GitHub 上新增一个远端数据库 点选 N...
程序基本结构 程序的基本结构可概分为循序式结构、选择式结构,与重复式结构三种,几乎是在循序结构式的基...
资料分布与离群值处理 今日学习目标 资料特徵观察与离群值分析 检视资料的分布状态 偏度 (Skewn...
要将array内的资料交换的方式有很多种,但我认为最直觉的是以下两种。 第一种:建立一个新的阵列然後...