CyberArena / db /schema /014_recreate_web_exploitation.sql
Hussien Haider
H
cb16781
Raw
History Blame Contribute Delete
3.87 kB
-- 014_recreate_web_exploitation.sql
-- Re-creates the `web_exploitation_challenges` table that was dropped in
-- migration 013. This version is Red-Team-only (team_role = 'red') and
-- stores a complete web exploitation scenario that includes:
-- - A realistic HTTP request/response pair (raw strings)
-- - The vulnerability type / class / description
-- - The expected payload (flag or exploit string)
-- - A hint of what to look for in the intercepted traffic
--
-- The AI generator must produce diverse scenarios across XSS, SQLi, CSRF,
-- SSRF, IDOR, LFI, XXE, Command Injection, Auth Bypass, and File Upload.
BEGIN;
CREATE EXTENSION IF NOT EXISTS pgcrypto;
CREATE TABLE IF NOT EXISTS public.web_exploitation_challenges (
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
team_role text NOT NULL DEFAULT 'red'
CHECK (team_role IN ('red')),
module text NOT NULL DEFAULT 'web-exploitation',
topic text NOT NULL,
title text NOT NULL,
story text NOT NULL,
task_outline text NOT NULL,
-- Describes the vulnerable endpoint / scenario
vulnerability_type text NOT NULL,
vulnerability_class text NOT NULL,
vulnerability_description text NOT NULL,
-- The raw HTTP exchange (simulated)
http_request text NOT NULL,
http_response text NOT NULL,
-- The expected answer (flag or exploit payload)
flag_preview text NOT NULL,
flag_hash text NOT NULL,
-- Hints (3 levels, jsonb)
hints jsonb DEFAULT '[]'::jsonb,
difficulty text NOT NULL
CHECK (difficulty IN ('مبتدئ','سهل','متوسط','صعب','خبير')),
xp_reward integer DEFAULT 200,
created_at timestamptz DEFAULT now()
);
-- Fast pool / dashboard queries
CREATE INDEX IF NOT EXISTS idx_web_exploit_topic ON public.web_exploitation_challenges(topic);
CREATE INDEX IF NOT EXISTS idx_web_exploit_vuln ON public.web_exploitation_challenges(vulnerability_type);
CREATE INDEX IF NOT EXISTS idx_web_exploit_diff ON public.web_exploitation_challenges(difficulty);
-- RLS — open read for anon, insert/delete for service role
ALTER TABLE public.web_exploitation_challenges ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS "Open read web_exp" ON public.web_exploitation_challenges;
CREATE POLICY "Open read web_exp" ON public.web_exploitation_challenges
FOR SELECT USING (true);
DROP POLICY IF EXISTS "Service role insert web_exp" ON public.web_exploitation_challenges;
CREATE POLICY "Service role insert web_exp" ON public.web_exploitation_challenges
FOR INSERT WITH CHECK (true);
DROP POLICY IF EXISTS "Service role delete web_exp" ON public.web_exploitation_challenges;
CREATE POLICY "Service role delete web_exp" ON public.web_exploitation_challenges
FOR DELETE USING (true);
-- Update the v_challenge_type_consistency view to include web_exploitation
DROP VIEW IF EXISTS v_challenge_type_consistency;
CREATE VIEW v_challenge_type_consistency AS
SELECT 'encryption_challenges' AS table_name, COUNT(*) AS bad_rows
FROM encryption_challenges WHERE module <> 'crypto'
UNION ALL
SELECT 'code_fixing_challenges', COUNT(*)
FROM code_fixing_challenges WHERE module <> 'code-fixing'
UNION ALL
SELECT 'log_analysis_challenges', COUNT(*)
FROM log_analysis_challenges WHERE module <> 'log-analysis'
UNION ALL
SELECT 'vulnerability_hunter_challenges', COUNT(*)
FROM vulnerability_hunter_challenges WHERE module <> 'vulnerability-hunter'
UNION ALL
SELECT 'web_exploitation_challenges', COUNT(*)
FROM web_exploitation_challenges WHERE module <> 'web-exploitation';
COMMIT;