A CTF challenge for miniLCTF 2022:https://github.com/XDSEC/miniLCTF_2022/tree/main/Challenges/kvdb
Easy key-value database written in
C/C++
language.
ADD
: Add a new kvpair to database.DEL
: Delete a kvpair fromm database bykey
.MDF
: Modify a kvpair'svalue
.RNM
: Rename a kvpair'skey
.CPY
: Copy kvpair.GET
: Getvalue
bykey
.DUMP
: Dump all kvpair in an array.SHUT
: Close current TCP connection.
In kvdb.h
:
#define OPCODE_ADD "ADD"
#define OPCODE_DELETE "DEL"
#define OPCODE_MODIFY "MDF"
#define OPCODE_RENAME "RNM"
#define OPCODE_COPY "CPY"
#define OPCODE_GET "GET"
#define OPCODE_DUMP "DUMP"
#define OPCODE_CLEAR "CLR"
#define OPCODE_SHUTDOWN "SHUT"
In big endian
- Integer data format
<data_type(16 bits)>|<integer(64 bits)>
- Float data format
<data_type(16 bits)>|<float(64 bits)>
- String data format (integer, float, string)
<data_type(16 bits)>|<str_len(32 bits)>|[char(8 bits)]*str_len
- Array format
<data_type(16 bits)>|<counts(32 bits)>|[data]*counts
- Empty data
<data_type>
In kvdb.h
:
#define DATA_TYPE_EMPTY 0x0
#define DATA_TYPE_INTEGER 0x1
#define DATA_TYPE_FLOAT 0x2
#define DATA_TYPE_STRING 0x3
#define DATA_TYPE_ARRAY 0x4
#define DATA_TYPE_TERM 0xff
"KVDB"|<op len(16 bits)>|<opcode>|[data]*n
N indicates the number of parameters. Please refer to
supported methods
.
"KVDB"|data
The reason for the
query failure
will be returned instring
data format
- ADD(KEY,VALUE)
- DEL(KEY)
- MDF(KEY)
- RNM(OLD_KEY, NEW_KEY)
- CPY(SRC_KEY, DST, KEY)
- GET(KEY)
- DUMP()
- CLR()
- SHUT()
-
git clone https://github.com/yikesoftware/kvdb
-
cd kvdb
-
make
- Release:
make
- Debug:
make debug
- This will show
data_t
construction info andhandler return
instderr
.
- This will show
- Disable optimization:
make noopt
- Release: