aaaaaa
This commit is contained in:
114
2025/lake/chall_db.py
Normal file
114
2025/lake/chall_db.py
Normal file
@@ -0,0 +1,114 @@
|
||||
import sqlite3
|
||||
import json
|
||||
|
||||
# The raw JSON data provided
|
||||
json_source = """
|
||||
{
|
||||
"success": true,
|
||||
"data": [
|
||||
{"id": 123, "type": "dynamic", "name": "drum machine", "value": 100, "solves": 160, "solved_by_me": true, "category": "rev", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 125, "type": "dynamic", "name": "Attack of the Clones", "value": 100, "solves": 173, "solved_by_me": true, "category": "crypto", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 126, "type": "dynamic", "name": "Revenge of the Sith", "value": 100, "solves": 224, "solved_by_me": false, "category": "crypto", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 127, "type": "dynamic", "name": "The Phantom Menace", "value": 100, "solves": 280, "solved_by_me": true, "category": "crypto", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 128, "type": "dynamic", "name": "zipbomb", "value": 100, "solves": 318, "solved_by_me": false, "category": "misc", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 129, "type": "dynamic", "name": "Wordler", "value": 100, "solves": 147, "solved_by_me": true, "category": "misc", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 131, "type": "dynamic", "name": "dilemma", "value": 100, "solves": 131, "solved_by_me": true, "category": "rev", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 133, "type": "dynamic", "name": "Quantum vernam", "value": 100, "solves": 202, "solved_by_me": false, "category": "crypto", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 135, "type": "dynamic", "name": "Another Android Applaketion", "value": 100, "solves": 106, "solved_by_me": true, "category": "rev", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 137, "type": "dynamic", "name": "Guess Flag", "value": 100, "solves": 284, "solved_by_me": true, "category": "crypto", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 138, "type": "dynamic", "name": "Ez Part", "value": 100, "solves": 96, "solved_by_me": true, "category": "crypto", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 140, "type": "dynamic", "name": "gamblecore", "value": 100, "solves": 142, "solved_by_me": true, "category": "web", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 142, "type": "dynamic", "name": "illegal downloading", "value": 100, "solves": 58, "solved_by_me": true, "category": "misc", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 143, "type": "dynamic", "name": "stackception-1", "value": 100, "solves": 123, "solved_by_me": false, "category": "pwn", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 147, "type": "dynamic", "name": "Le Canard du Lac", "value": 100, "solves": 289, "solved_by_me": true, "category": "web", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 130, "type": "dynamic", "name": "MagicAuth", "value": 101, "solves": 55, "solved_by_me": false, "category": "web", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 124, "type": "dynamic", "name": "New Mitigations", "value": 102, "solves": 48, "solved_by_me": false, "category": "pwn", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 144, "type": "dynamic", "name": "stackception-2", "value": 193, "solves": 15, "solved_by_me": false, "category": "pwn", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 132, "type": "dynamic", "name": "A real CTF", "value": 217, "solves": 13, "solved_by_me": false, "category": "rev", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 134, "type": "dynamic", "name": "Unlink THIS!", "value": 304, "solves": 8, "solved_by_me": false, "category": "pwn", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 141, "type": "dynamic", "name": "Pls respond", "value": 356, "solves": 6, "solved_by_me": false, "category": "misc", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"},
|
||||
{"id": 139, "type": "dynamic", "name": "still-not-malloc", "value": 457, "solves": 3, "solved_by_me": false, "category": "pwn", "tags": [], "template": "/plugins/dynamic_challenges/assets/view.html", "script": "/plugins/dynamic_challenges/assets/view.js"}
|
||||
]
|
||||
}
|
||||
"""
|
||||
|
||||
DB_NAME = "ctf_challenges.db"
|
||||
|
||||
def create_database():
|
||||
try:
|
||||
# Load the JSON string into a Python dictionary
|
||||
data_dict = json.loads(json_source)
|
||||
challenges = data_dict['data']
|
||||
|
||||
# Connect to SQLite database (or create it if it doesn't exist)
|
||||
conn = sqlite3.connect(DB_NAME)
|
||||
cursor = conn.cursor()
|
||||
|
||||
print(f"Connected to database: {DB_NAME}")
|
||||
|
||||
# Create table
|
||||
# We store 'tags' as a TEXT field (JSON string) because SQLite doesn't have an ARRAY type.
|
||||
# We store 'solved_by_me' as INTEGER (0 or 1) because SQLite doesn't have a strict BOOLEAN type.
|
||||
create_table_query = """
|
||||
CREATE TABLE IF NOT EXISTS challenges (
|
||||
id INTEGER PRIMARY KEY,
|
||||
type TEXT,
|
||||
name TEXT,
|
||||
value INTEGER,
|
||||
solves INTEGER,
|
||||
solved_by_me INTEGER,
|
||||
category TEXT,
|
||||
tags TEXT,
|
||||
template TEXT,
|
||||
script TEXT
|
||||
);
|
||||
"""
|
||||
cursor.execute(create_table_query)
|
||||
print("Table 'challenges' created successfully.")
|
||||
|
||||
# Prepare data for insertion
|
||||
rows_to_insert = []
|
||||
for challenge in challenges:
|
||||
row = (
|
||||
challenge['id'],
|
||||
challenge['type'],
|
||||
challenge['name'],
|
||||
challenge['value'],
|
||||
challenge['solves'],
|
||||
1 if challenge['solved_by_me'] else 0, # Convert bool to int
|
||||
challenge['category'],
|
||||
json.dumps(challenge['tags']), # Convert list to JSON string
|
||||
challenge['template'],
|
||||
challenge['script']
|
||||
)
|
||||
rows_to_insert.append(row)
|
||||
|
||||
# Insert data
|
||||
insert_query = """
|
||||
INSERT OR REPLACE INTO challenges
|
||||
(id, type, name, value, solves, solved_by_me, category, tags, template, script)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
"""
|
||||
|
||||
cursor.executemany(insert_query, rows_to_insert)
|
||||
conn.commit()
|
||||
print(f"Successfully inserted {cursor.rowcount} rows.")
|
||||
|
||||
# Verification step: Read back first 3 rows
|
||||
print("\n--- Verifying Data (First 3 Rows) ---")
|
||||
cursor.execute("SELECT id, name, category, solved_by_me FROM challenges LIMIT 3")
|
||||
rows = cursor.fetchall()
|
||||
for row in rows:
|
||||
print(f"ID: {row[0]}, Name: {row[1]}, Category: {row[2]}, Solved: {bool(row[3])}")
|
||||
|
||||
except sqlite3.Error as e:
|
||||
print(f"SQLite error: {e}")
|
||||
except json.JSONDecodeError as e:
|
||||
print(f"JSON parsing error: {e}")
|
||||
finally:
|
||||
if conn:
|
||||
conn.close()
|
||||
print("\nDatabase connection closed.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
create_database()
|
||||
Reference in New Issue
Block a user