Cryptohack wp (GENERAL篇)

Posted Cryglz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cryptohack wp (GENERAL篇)相关的知识,希望对你有一定的参考价值。

本篇是GENERAL篇,以下题目中没提及到的题目均在course的其他篇目中

Encoding Challenge


给了三个文件,一个挑战文件和两个示例文件,主要是pwntools库的运用:挑战代码如下:

#!/usr/bin/env python3

from Crypto.Util.number import bytes_to_long, long_to_bytes
from utils import listener # this is cryptohack\'s server-side module and not part of python
import base64
import codecs
import random

FLAG = "crypto????????????????????"
ENCODINGS = [
    "base64",
    "hex",
    "rot13",
    "bigint",
    "utf-8",
]
with open(\'/usr/share/dict/words\') as f:
    WORDS = [line.strip().replace("\'", "") for line in f.readlines()]


class Challenge():
    def __init__(self):
        self.challenge_words = ""
        self.stage = 0

    def create_level(self):
        self.stage += 1
        self.challenge_words = "_".join(random.choices(WORDS, k=3))
        encoding = random.choice(ENCODINGS)

        if encoding == "base64":
            encoded = base64.b64encode(self.challenge_words.encode()).decode() # wow so encode
        elif encoding == "hex":
            encoded = self.challenge_words.encode().hex()
        elif encoding == "rot13":
            encoded = codecs.encode(self.challenge_words, \'rot_13\')
        elif encoding == "bigint":
            encoded = hex(bytes_to_long(self.challenge_words.encode()))
        elif encoding == "utf-8":
            encoded = [ord(b) for b in self.challenge_words]

        return "type": encoding, "encoded": encoded

    #
    # This challenge function is called on your input, which must be JSON
    # encoded
    #
    def challenge(self, your_input):
        if self.stage == 0:
            return self.create_level()
        elif self.stage == 100:
            self.exit = True
            return "flag": FLAG

        if self.challenge_words == your_input["decoded"]:
            return self.create_level()

        return "error": "Decoding fail"


listener.start_server(port=13377)

这是一个Python脚本,定义了一个名为Challenge的类,该类生成涉及各种编码的一系列挑战。

脚本首先导入一些模块:Crypto.Util.number中的bytes_to_long和long_to_bytes,以及Python标准库中的base64和codecs。它还导入一个名为listener的模块,该模块不是Python的一部分,而是专门针对cryptohack平台开发的。

接下来,脚本定义了一个可能的编码列表ENCODINGS。这些编码用于生成挑战。

然后,脚本打开一个名为/usr/share/dict/words的文件,其中包含一个单词列表,并将文件的内容读入一个名为WORDS的列表中。文件的每一行都被去除了任何空白,并且单引号被移除。

Challenge类有两个方法:__init__和challenge。__init__方法初始化了两个实例变量:challenge_words,用于保存当前阶段的挑战词,以及stage,用于跟踪当前挑战的阶段。

create_level方法为当前阶段生成一个新的挑战。它通过递增stage变量,从WORDS列表中随机选择三个单词来形成challenge_words字符串,并从ENCODINGS列表中随机选择一个编码。根据所选择的编码,create_level使用以下方法之一对challenge_words字符串进行编码:

base64.b64encode:将challenge_words字符串编码为base64。
encode().hex():将challenge_words字符串编码为十六进制字符串。
codecs.encode(challenge_words, \'rot_13\'):使用ROT13编码challenge_words字符串。
hex(bytes_to_long(self.challenge_words.encode())):将challenge_words字符串编码为十六进制格式的大整数。
[ord(b) for b in self.challenge_words]:将challenge_words字符串编码为表示字符串中字符的Unicode代码点的整数列表。
create_level方法返回一个包含编码类型和编码后挑战词的字典。

challenge方法是主要的函数,它将用户输入作为参数,并返回响应。如果当前阶段为0,challenge通过调用create_level生成一个新的挑战。如果当前阶段为100,challenge将实例变量exit设置为True并返回标志。否则,如果用户输入与解码后的挑战词匹配,challenge通过调用create_level生成一个新的挑战。否则,它返回一个错误消息。

脚本最后通过使用listener模块在端口13377上启动服务器。

脚本的主要目的是生成一系列的编码挑战。每个挑战包括一个编码类型和一个经过特定编码的挑战词。用户需要解码挑战词并将其作为输入提供给脚本,以通过当前的挑战并进入下一个阶段。在挑战的前100个阶段中,用户需要成功解码挑战词才能进入下一个阶段。当达到第100个阶段时,脚本会返回标志。这意味着用户需要连续成功解码100个挑战才能获取完整的flag
解密代码如下:

from pwn import *
import json

r = remote(\'socket.cryptohack.org\', 13377, level = \'debug\')

def json_recv():
    line = r.recvline()
    return json.loads(line.decode())

def json_send(hsh):
    request = json.dumps(hsh).encode()
    r.sendline(request)

from binascii import *

from base64 import b64decode as dd

from string import *
def rot13(x):
    ss = ascii_lowercase
    res = \'\'
    for i in x:
        if i in ss:
            res += ss[(13+ss.index(i))%26]
        else:res += i
    return res

def dec(tp,c):
    if tp == \'bigint\':
        m = unhexlify(c[2:]).decode()
    elif tp == \'base64\':
        m = dd(c.encode()).decode()
    elif tp == \'rot13\':
        m = rot13(c)
    elif tp == \'hex\':
        m = bytes.fromhex(c).decode()
    elif tp == \'utf-8\':
        m = \'\'.join(chr(i) for i in c)
    return m

def func(received):
    print("Received type: ",end=\'\')
    print(received["type"])
    print("Received encoded value: ",end=\'\')
    print(received["encoded"])
    c = received["encoded"]
    tp = received[\'type\']
    to_send = "decoded": dec(tp,c)
    print(\'to_sent:\',to_send)
    json_send(to_send)
    rrr = json_recv()
    print(rrr,\'================\',sep = \'\\n\')
    return rrr

rcvd = json_recv()
for i in range(100):
    rcvd = func(rcvd)

Lemur XOR

下载下来是两张图片:
lemur.png:
flag.png:

两张图片异或

from PIL import Image
import numpy as np

# 打开第一张图像
image1 = Image.open(\'flag.png\')

# 打开第二张图像
image2 = Image.open(\'lemur.png\')

# 将图像转换为NumPy数组
array1 = np.array(image1)
array2 = np.array(image2)

# 执行异或运算
result_array = np.bitwise_xor(array1, array2)

# 创建新的图像对象
result_image = Image.fromarray(result_array)

# 保存结果图像
result_image.save(\'result.jpg\')

得到图像为:

分析WordPress数据表之用户表(功能篇)

数据表分析

wp_users

技术图片

wp_usermeta

技术图片

 

 

用户系统就是靠着这两张表来实现的。

具体事例分析

添加用户

技术图片

 

 技术图片

 

 添加成功后,我们会分别在wp_users及wp_usermeta表中分别看到test001的数据。

wp_users

技术图片

wp_usermeta

技术图片

wp_users表字段分析:
ID(用户ID)
user_login(用户登录账户名)
user_pass(用户密码)
user_nicename(用户昵称)
user_email(用户邮箱)
user_url(用户博客URL)
user_registered(注册时间)
user_activation_key(激活)
user_status(状态)
display_name(显示名称)

wp_usermeta表字段分析:
umeta_id(用户元数据表自增ID)
user_id(用户ID)
meta_key(元数据键)
meta_value(元数据值)

通常添加用户都会包含这些必须的数据,如图:
技术图片

umeta_id和user_id就不作分析了,很好理解。

主要说说meta_key里面的值到底是个什么意思(有的不清楚是什么意思,就不作解释了,等后续明白了再补充)?
nickname(用户昵称)
first_name(用户姓)
last_name(用户名)
description(个人说明)
rich_editing(编写文件不使用可视化编辑器,默认是true,表示使用可视化编辑器)
comment_shortcuts(管理评论时启用键盘快捷键)
admin_color(管理界面配色)
use_ssl(是否使用ssl)
show_admin_bar_front(是否显示管理面板)
locale(站点使用什么语言,如中文或英文)
wp_capabilities(权限)
wp_user_level(用户等级)
dismissed_wp_pointers

随着用户操作增加的meta_key内容如下:
session_tokens(会话token,登录就会产生,退出就会清除,我想用户下线功能就是这样实现的)
wp_user-settings(用户设置)
wp_user-settings-time(用户设置操作的时间)

以上是关于Cryptohack wp (GENERAL篇)的主要内容,如果未能解决你的问题,请参考以下文章

cryptohack wp day

cryptohack wp day(10)

cryptohack wp day

cryptohack wp day

cryptohack wp day

wordpress升级完后,有错误,wwwroot/wp-includes/general-template.php on line 3133