[2021铁人赛 Day17] General Skills 14

  • 引言
    今天讲的东西会稍微多一点,
    我们直接开始吧~

  • General Skills / Based
    https://ithelp.ithome.com.tw/upload/images/20211001/201114296LL2FYCK5e.png
    题目首先提到 1337 ,这个数字是什麽意思呢?
    大家可以先参考维基百科: Leet

    其实 1337 本身就是 Leet 这个字的 Leet 写法,
    听起来很拗口,我稍微说明一下,
    Leet 简单来说就是骇客语,
    会将英文字母换成其他外形发音相像的数字或符号,
    藉此有一点混淆视觉的效果,且感觉更有骇客风格。

    几个 Leet 例子:

    • Never -> N3v3r
    • This -> 7h1$

    当然写法有很多种,没有一定的规范,
    但会有比较惯用的换法。

    这有点像中文的拆字流行文化:

    • 矮额 -> 矢委客页
    • 爆哥 -> 火暴可可

    回到题目,题目要求先 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:  
    

    可以看出程序要求将一串二进位数字转成许多字母并串起来,而且有限时。
    再者,这题会有许多小题要答,这题二进位答对後还会出现其他题。

    这边有三种解法:

    1. 如果要写 Python 解题,用的还是「题目出现後再贴上程序转换」的方法的话,势必需开两个以上的 shell , webshell 没办法这样做。

      因此可以简单使用网路上转换工具,可以简单无脑复制贴上解题,但必须先判断题目目前是什麽进位制,再用相应进位制转换器转换。

    2. 不是用 webshell 的话,可以用简单 Python 程序解题,分别写出每题对应的转换程序,然後开另一个视窗来用该程序转换,原视窗则跑题目服务器。

    3. 使用 pwntools 。这是最进阶的方法,需额外套件,
      但此套件使用率将会非常高,在更进阶的题目中再集中讲解,
      这边暂不介绍。


    开始解题:

    1. 网页转换
      这里就不赘述了,可自行搜寻 binary to stringoctal to stringhex to string 等关键字,网路上有许多转换器。

    2. 简单 Python 程序
      这个方法需要至少开两个 shell ,其中一个跑 nc ,另一个写程序转换。这边只叙述写转换程序的部份:

      • binary to string
        l = input().split() # 读取字串并用空格切割
        for b in l:
            print(chr(int(b, base=2)), end='')
            # base 2 to base 10 ,转成字元,并且字元间不换行
        print() # 最後换行
        
      • octal to string
        l = input().split()
        for b in l:
            print(chr(int(b, base=8)), end='')
        print()
        
      • hex to string
        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}
    

<<:  动态记忆体分配

>>:  DAY18聚类演算法(kmeans)

Day 16 - App设定(icon、名称)

我个人觉得App的名称、icon很重要,毕竟代表你整个app,所以今天开头先来个设定。 因为我记得我...

Gulp 一键部属到 Github Pages DAY93

在介绍 gulp-gh-pages 之前 我们必须先在 GitHub 上新增一个远端数据库 点选 N...

DAY27 学习30天的c++

程序基本结构 程序的基本结构可概分为循序式结构、选择式结构,与重复式结构三种,几乎是在循序结构式的基...

[Day 23] 资料分布与离群值处理

资料分布与离群值处理 今日学习目标 资料特徵观察与离群值分析 检视资料的分布状态 偏度 (Skewn...

Day 22 Reversing Array

要将array内的资料交换的方式有很多种,但我认为最直觉的是以下两种。 第一种:建立一个新的阵列然後...