1+ {
2+ "cells" : [
3+ {
4+ "cell_type" : " markdown" ,
5+ "id" : " introduction" ,
6+ "metadata" : {},
7+ "source" : [
8+ " ## Introduction\n " ,
9+ " \n " ,
10+ " Secret text is hidden somewhere in the array of data `arrayz1.npy`. Explore the data to reveal it.\n " ,
11+ " \n " ,
12+ " **Tip:** https://numpy.org/doc/stable/reference/generated/numpy.reshape.html"
13+ ]
14+ },
15+ {
16+ "cell_type" : " markdown" ,
17+ "id" : " objective" ,
18+ "metadata" : {},
19+ "source" : [
20+ " ## Objective\n " ,
21+ " \n " ,
22+ " Identify the hidden flag in the array of data. Once you find the secret text send it surrounded in brackes to the submission endpoint like this: `{SECRETTEXT}`"
23+ ]
24+ },
25+ {
26+ "cell_type" : " code" ,
27+ "execution_count" : null ,
28+ "id" : " api_key" ,
29+ "metadata" : {},
30+ "outputs" : [],
31+ "source" : [
32+ " CRUCIBLE_API_KEY = \" YOUR_API_KEY\" # Replace with your actual API key"
33+ ]
34+ },
35+ {
36+ "cell_type" : " markdown" ,
37+ "id" : " required_packages" ,
38+ "metadata" : {},
39+ "source" : [
40+ " ### Install Required Packages\n " ,
41+ " \n " ,
42+ " Install the required packages.\n "
43+ ]
44+ },
45+ {
46+ "cell_type" : " code" ,
47+ "execution_count" : null ,
48+ "id" : " imports" ,
49+ "metadata" : {},
50+ "outputs" : [],
51+ "source" : [
52+ " %pip install requests"
53+ ]
54+ },
55+ {
56+ "cell_type" : " markdown" ,
57+ "id" : " notebook_variables" ,
58+ "metadata" : {},
59+ "source" : [
60+ " ### Set Notebook Variables\n " ,
61+ " \n " ,
62+ " Set the variables used throughout the notebook\n "
63+ ]
64+ },
65+ {
66+ "cell_type" : " code" ,
67+ "execution_count" : null ,
68+ "id" : " setup" ,
69+ "metadata" : {},
70+ "outputs" : [],
71+ "source" : [
72+ " CHALLENGE = \" arrayz1\"\n " ,
73+ " CRUCIBLE_URL = \" https://platform.dreadnode.io\"\n " ,
74+ " CHALLENGE_URL = \" https://arrayz1.platform.dreadnode.io\"\n " ,
75+ " ARTIFACT_FILES = ['arrayz1.npy']"
76+ ]
77+ },
78+ {
79+ "cell_type" : " markdown" ,
80+ "id" : " 8" ,
81+ "metadata" : {},
82+ "source" : [
83+ " ### Download Data\n " ,
84+ " \n " ,
85+ " Before diving into data analysis, you'll need to download the necessary dataset for this challenge."
86+ ]
87+ },
88+ {
89+ "cell_type" : " code" ,
90+ "execution_count" : null ,
91+ "id" : " 9" ,
92+ "metadata" : {},
93+ "outputs" : [],
94+ "source" : [
95+ " import requests\n " ,
96+ " \n " ,
97+ " \n " ,
98+ " for artifact in ARTIFACT_FILES:\n " ,
99+ " url = f\" {CRUCIBLE_URL}/api/artifacts/{CHALLENGE}/{artifact}\"\n " ,
100+ " print(url)\n " ,
101+ " headers = {\" X-API-Key\" : CRUCIBLE_API_KEY}\n " ,
102+ " response = requests.get(url, headers=headers)\n " ,
103+ " if response.status_code == 200:\n " ,
104+ " with open(artifact, \" wb\" ) as file:\n " ,
105+ " file.write(response.content)\n " ,
106+ " print(f\" {artifact} was successfully downloaded\" )\n " ,
107+ " else:\n " ,
108+ " print(f\" Failed to download {artifact}\" )"
109+ ]
110+ },
111+ {
112+ "cell_type" : " markdown" ,
113+ "id" : " submit_findings_label" ,
114+ "metadata" : {},
115+ "source" : [
116+ " ### Submit Your Findings\n " ,
117+ " \n " ,
118+ " This is where you submit the secret text. Be sure to send the phrase wrapped in brackets `{SECRETTEXT}`"
119+ ]
120+ },
121+ {
122+ "cell_type" : " code" ,
123+ "execution_count" : null ,
124+ "id" : " submit_findings_code" ,
125+ "metadata" : {},
126+ "outputs" : [],
127+ "source" : [
128+ " import requests\n " ,
129+ " \n " ,
130+ " \n " ,
131+ " def query(input_data):\n " ,
132+ " response = requests.post(\n " ,
133+ " f\" {CHALLENGE_URL}/score\" ,\n " ,
134+ " headers={\" X-API-Key\" : CRUCIBLE_API_KEY},\n " ,
135+ " json={\" data\" : input_data},\n " ,
136+ " )\n " ,
137+ " return response.json()\n " ,
138+ " \n " ,
139+ " \n " ,
140+ " response = query(\" {SECRETTEXT}\" )\n " ,
141+ " print(response)"
142+ ]
143+ },
144+ {
145+ "cell_type" : " markdown" ,
146+ "id" : " submit_flag_label" ,
147+ "metadata" : {},
148+ "source" : [
149+ " ## Submit Your Flag\n " ,
150+ " \n " ,
151+ " When you find the answer, you will get a flag back. It will look something like `gAAAAA ...`.\n " ,
152+ " You can submit it using the code below, or, on the challenge page."
153+ ]
154+ },
155+ {
156+ "cell_type" : " code" ,
157+ "execution_count" : null ,
158+ "id" : " submit_flag_code" ,
159+ "metadata" : {},
160+ "outputs" : [],
161+ "source" : [
162+ " import requests\n " ,
163+ " \n " ,
164+ " \n " ,
165+ " def submit_flag(flag):\n " ,
166+ " url = f\" {CRUCIBLE_URL}/api/challenges/{CHALLENGE}/submit-flag\"\n " ,
167+ " headers = {\" X-API-Key\" : CRUCIBLE_API_KEY}\n " ,
168+ " payload = {\" challenge\" : CHALLENGE, \" flag\" : flag}\n " ,
169+ " response = requests.post(url, headers=headers, json=payload)\n " ,
170+ " if response.status_code == 200:\n " ,
171+ " if response.json().get(\" correct\" ) is True:\n " ,
172+ " print(\" The flag was correct. Congrats!\" )\n " ,
173+ " else:\n " ,
174+ " print(\" The flag was incorrect. Keep trying!\" )\n " ,
175+ " else:\n " ,
176+ " print(\" There was an error submitting your flag\" )\n " ,
177+ " print(response.text)\n " ,
178+ " \n " ,
179+ " \n " ,
180+ " FLAG = \" gAAAAA...\" # Replace with the flag once you find it\n " ,
181+ " submit_flag(FLAG)"
182+ ]
183+ }
184+ ],
185+ "metadata" : {
186+ "kernelspec" : {
187+ "display_name" : " base" ,
188+ "language" : " python" ,
189+ "name" : " python3"
190+ },
191+ "language_info" : {
192+ "codemirror_mode" : {
193+ "name" : " ipython" ,
194+ "version" : 3
195+ },
196+ "file_extension" : " .py" ,
197+ "mimetype" : " text/x-python" ,
198+ "name" : " python" ,
199+ "nbconvert_exporter" : " python" ,
200+ "pygments_lexer" : " ipython3" ,
201+ "version" : " 3.12.4"
202+ }
203+ },
204+ "nbformat" : 4 ,
205+ "nbformat_minor" : 5
206+ }
0 commit comments