<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Salaheldinaz</title><link>https://salaheldinaz.com/</link><description>OSINT &amp; Cyber Security Consultant | Investigator</description><language>en-US</language><lastBuildDate>Sun, 20 Sep 2026 18:59:01 +0000</lastBuildDate><atom:link href="https://salaheldinaz.com/" rel="self" type="application/rss+xml"/><item><title>Google Map Exporter — Export Any Google Map to KML, KMZ, or GeoJSON</title><link>https://salaheldinaz.com/blog/google-map-exporter/</link><guid isPermaLink="true">https://salaheldinaz.com/blog/google-map-exporter/</guid><pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate><description>A Python CLI and Chrome extension that exports public Google Maps to KML, KMZ, and GeoJSON — preserving layers, placemarks, and marker icons.</description><category>google-maps</category><category>kml</category><category>kmz</category><category>geojson</category><category>geoint</category><category>osint</category><category>python</category><category>chrome-extension</category><category>project</category><content:encoded><![CDATA[<span class="hero-label not-prose">OSINT / GEOINT Tool</span>

<p>When you come across a Google Map packed with useful placemarks — incident locations, field reports, points of interest — getting that data <em>out</em> is surprisingly annoying. Google doesn&rsquo;t offer a native bulk export, and manually copying coordinates one by one is not realistic at scale.</p>
<p><strong>Google Map Exporter</strong> solves this with two approaches: a Python CLI for repeatable, scriptable exports and a Chrome extension for one-click downloads straight from your browser.</p>
<p>The project is on GitHub: <a href="https://github.com/salaheldinaz/google-map-exporter">salaheldinaz/google-map-exporter</a></p>
<hr>
<h2 id="how-it-works">How It Works</h2>
<p>Google Maps stores all map data in a JavaScript variable called <code>window._pageData</code> embedded in the page source. This includes placemarks (coordinates, names, descriptions), layer definitions, and marker icon references.</p>
<p>Both the CLI and the extension read this raw data, parse it, and reconstruct the map as standard GIS formats.</p>
<p><img src="https://salaheldinaz.com/blog/google-map-exporter/images/screenshot-pagedata_hu_66683356a7c1aa42.webp" width="709" height="366" alt="Screenshot placeholder — annotated view of _pageData structure in browser DevTools" loading="lazy" decoding="async">
<em><code>window._pageData</code> in the browser source — the raw payload the exporter parses.</em></p>
<hr>
<h2 id="output-formats">Output Formats</h2>
<table>
	<thead>
			<tr>
					<th>Format</th>
					<th>Use case</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><strong>KML</strong></td>
					<td>Google Earth, QGIS, most GIS tools</td>
			</tr>
			<tr>
					<td><strong>KMZ</strong></td>
					<td>Zipped KML — includes downloaded marker icons packaged inside</td>
			</tr>
			<tr>
					<td><strong>GeoJSON</strong></td>
					<td>Web maps, analysis pipelines, any dev/GIS workflow</td>
			</tr>
	</tbody>
</table>
<p>All three formats preserve:</p>
<ul>
<li>Placemark name, coordinates, and description</li>
<li>Layer/folder grouping</li>
<li>Marker icon metadata (and optionally the icon files themselves)</li>
</ul>
<hr>
<h2 id="python-cli">Python CLI</h2>
<p>The CLI is the right tool when you need automation, offline parsing, or want to integrate exports into a pipeline.</p>
<h3 id="setup">Setup</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">python3 -m venv .venv
</span></span><span class="line"><span class="cl"><span class="nb">source</span> .venv/bin/activate
</span></span><span class="line"><span class="cl">pip install -r requirements.txt
</span></span><span class="line"><span class="cl">playwright install chromium
</span></span></code></pre></div><p>The CLI tries a plain HTTP fetch first. If the response is too thin (Google often returns a minimal page to scrapers), it falls back to a headless Playwright session.</p>
<h3 id="usage">Usage</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Export a live map URL</span>
</span></span><span class="line"><span class="cl">python main.py --url <span class="s2">&#34;https://www.google.com/maps/d/viewer?mid=...&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Parse a saved HTML dump (no network needed)</span>
</span></span><span class="line"><span class="cl">python main.py path/to/saved_page.html
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Set output directory and filename prefix</span>
</span></span><span class="line"><span class="cl">python main.py --url <span class="s2">&#34;...&#34;</span> --output-dir output --prefix my_map
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Skip icon downloading (use remote URLs in the KML instead)</span>
</span></span><span class="line"><span class="cl">python main.py --url <span class="s2">&#34;...&#34;</span> --no-download-icons
</span></span></code></pre></div><p>Output lands in a timestamped folder under <code>output/</code> by default. Downloaded icons go into <code>icons/</code> inside that folder and are automatically packaged into the KMZ.</p>
<p><img src="https://salaheldinaz.com/blog/google-map-exporter/images/screenshot-cli-output_hu_adf73f34abfa7f2a.webp" width="714" height="247" alt="Screenshot placeholder — CLI running, showing parsed placemarks and output file paths" loading="lazy" decoding="async">
<em>CLI output after a successful export — timestamped folder, KML/KMZ/GeoJSON files, and downloaded icons.</em></p>
<hr>
<h2 id="chrome-extension">Chrome Extension</h2>
<p>The extension is the faster path when you already have the map open in Chrome and just want to grab the data.</p>
<h3 id="install">Install</h3>
<p><strong>Option A — Download the release (no Node.js required)</strong></p>
<ol>
<li>Go to the <a href="https://github.com/salaheldinaz/google-map-exporter/releases">Releases page</a> and download the latest <code>.zip</code>.</li>
<li>Unzip it anywhere on your machine.</li>
<li>Go to <code>chrome://extensions</code>, enable <strong>Developer mode</strong>, click <strong>Load unpacked</strong>, and point it at the unzipped folder.</li>
</ol>
<p><strong>Option B — Build from source</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nb">cd</span> extension
</span></span><span class="line"><span class="cl">npm install
</span></span><span class="line"><span class="cl">npm run build
</span></span></code></pre></div><p>Then load the <code>extension/</code> folder the same way: <code>chrome://extensions</code> → Developer mode → Load unpacked.</p>
<h3 id="use">Use</h3>
<ol>
<li>Open a Google Map in Chrome (viewer or editor URL).</li>
<li>Click the extension icon.</li>
<li>Select your formats (KML, KMZ, GeoJSON — any combination).</li>
<li>Hit <strong>Download</strong>.</li>
</ol>
<p>The extension reads <code>window._pageData</code> directly from the live page, runs the same parser as the CLI, and downloads the selected files instantly — no server, no API key, no clipboard gymnastics.</p>
<p><img src="https://salaheldinaz.com/blog/google-map-exporter/images/screenshot-extension-popup_hu_e4a6bffd121cb425.webp" width="813" height="566" alt="Screenshot placeholder — extension popup showing format checkboxes and Download button" loading="lazy" decoding="async">
<em>The extension popup — pick your formats, click Download.</em></p>
<p><img src="https://salaheldinaz.com/blog/google-map-exporter/images/screenshot-downloaded-files_hu_142258cc0a6de415.webp" width="710" height="494" alt="Screenshot placeholder — downloaded files in Finder/Explorer after export" loading="lazy" decoding="async">
<em>Exported files ready to open in Google Earth or QGIS.</em></p>
<hr>
<h2 id="opening-the-export-in-google-earth">Opening the Export in Google Earth</h2>
<p>Once you have a KMZ, drop it into Google Earth Pro (File → Open) or drag it into the web version. Layers map to folders, placemarks retain their names and descriptions, and if you exported icons they&rsquo;ll render with the original markers.</p>
<p><img src="https://salaheldinaz.com/blog/google-map-exporter/images/screenshot-google-earth_hu_72e8020a6822ce5a.webp" width="1416" height="990" alt="Screenshot placeholder — KMZ loaded in Google Earth showing placemarks and layers" loading="lazy" decoding="async">
<em>Exported KMZ loaded in Google Earth — original layers, names, and marker icons intact.</em></p>
<hr>
<h2 id="opening-the-export-in-qgis">Opening the Export in QGIS</h2>
<p>GeoJSON drops straight into QGIS via Layer → Add Layer → Add Vector Layer, or just drag the file onto the canvas. The <code>layerName</code> property on each feature lets you filter or style by the original map layer.</p>
<p><img src="https://salaheldinaz.com/blog/google-map-exporter/images/screenshot-qgis_hu_e1e86c9cc6d9db8a.webp" width="1269" height="715" alt="Screenshot placeholder — GeoJSON layer loaded in QGIS with attribute table visible" loading="lazy" decoding="async">
<em>GeoJSON export in QGIS — each feature carries the original layer name, name, description, and icon URL.</em></p>
<hr>
<h2 id="notes-and-limitations">Notes and Limitations</h2>
<ul>
<li><strong>Map structure can change.</strong> Google occasionally updates the <code>_pageData</code> format. If the CLI produces zero placemarks, try saving the page as HTML and passing the file path instead, or switch <code>playwright_headless</code> to <code>False</code> to watch what the browser loads.</li>
<li><strong>Extension needs a live page.</strong> The popup reads <code>window._pageData</code> from the active tab. If the popup spins forever, reload the map tab and reopen the extension.</li>
<li><strong>Terms of service.</strong> This tool works on any map you can view in a browser. Use it for maps you have the right to access and export.</li>
</ul>
<hr>
<h2 id="repo">Repo</h2>
<p><a href="https://github.com/salaheldinaz/google-map-exporter">github.com/salaheldinaz/google-map-exporter</a></p>
]]></content:encoded></item><item><title>Track the Unseen - Spot Change Anywhere, Any Time</title><link>https://salaheldinaz.com/blog/pwtt-qgis-plugin/</link><guid isPermaLink="true">https://salaheldinaz.com/blog/pwtt-qgis-plugin/</guid><pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate><description>A beginner-friendly guide to installing and using the PWTT plugin for QGIS — the same radar-based method behind Bellingcat's damage maps, now available for anyone to run at home.</description><category>qgis</category><category>geoint</category><category>open-source</category><category>osint</category><category>project</category><category>bellingcat</category><content:encoded><![CDATA[<span class="hero-label not-prose">Open-Source Intelligence Guide</span>

<p><em>The QGIS plugin featured in this guide was developed by <a href="https://x.com/Salaheldinaz">Salaheldinaz</a>. It was tested extensively over the past few days by <a href="https://x.com/m_osint">Mostafa</a>. We put together this walkthrough to help others get started.</em></p>
<h2 id="what-is-this-about">What Is This About?</h2>
<p>Imagine you could look at any place on Earth and ask: <em>“Has something changed here in the last few months?”</em> — a building destroyed, a new structure built, a road carved through a forest. That is exactly what the <strong>PWTT QGIS Plugin</strong> lets you do, for free, from your own computer.</p>
<p>PWTT stands for <strong>Pixel-Wise T-Test</strong>. It was originally developed by researcher Ollie Ballinger and used by <a href="https://www.bellingcat.com/resources/2026/04/07/tool-damage-assessment-destruction-sentinel-satellite-imagery-iran-us-gulf/">Bellingcat to map war damage</a> in places like Ukraine, Gaza, and Iran — places where governments often block access to optical satellite imagery. The method was published as a <a href="https://www.sciencedirect.com/science/article/pii/S0034425725004298">peer-reviewed paper in <em>Remote Sensing of Environment</em></a> and validated across over 2 million labeled buildings in 30 cities.</p>
<p>The plugin featured in this guide takes that same technology and makes it more practical for everyday use: you can save your areas of interest, create monitoring projects, run batch analysis, and view time-series data — all inside QGIS on your own machine.</p>
<div class="callout callout-info not-prose"><p class="callout-title">Why radar and not regular photos?</p><div class="callout-body">Regular satellite photos (optical imagery) can be blocked by clouds, only work during daytime, and governments can sometimes restrict access. Radar (SAR) works through clouds, at night, and no government can stop the European Space Agency from collecting this data. It is a public good, freely available to everyone.</div>
</div>

<hr>
<h2 id="how-pwtt-works">How PWTT Works?</h2>
<p><em>(The Simple Version)</em></p>
<p>The European Space Agency operates a satellite called <strong>Sentinel-1</strong>. Instead of taking photos like a camera, it sends pulses of microwave energy toward the ground and measures what bounces back — like sonar, but from space.</p>
<p><img src="https://salaheldinaz.com/blog/pwtt-qgis-plugin/images/sentinel1_sar_explainer_light.svg" alt="Sentinel-1 SVG illustration" loading="lazy" decoding="async"></p>
<p>Buildings, roads, and structures bounce the signal back in a specific way. When a building is destroyed, or a new one is built, the bounce pattern changes.</p>
<p>The <strong>PWTT</strong> method works in three simple steps:</p>
<div class="step not-prose">
  <div class="step-head">
    <span class="step-num">1</span>
    <span class="step-title">Establish a &#39;normal&#39; baseline</span>
  </div>
  <div class="step-body">The plugin collects months of radar data from <em>before</em> your date of interest. This builds a picture of what the area normally looks like to the satellite.</div>
</div>

<div class="step not-prose">
  <div class="step-head">
    <span class="step-num">2</span>
    <span class="step-title">Collect an &#39;after&#39; window</span>
  </div>
  <div class="step-body">It then collects radar data from <em>after</em> your date of interest — the period you want to investigate.</div>
</div>

<div class="step not-prose">
  <div class="step-head">
    <span class="step-num">3</span>
    <span class="step-title">Compare them pixel by pixel</span>
  </div>
  <div class="step-body">For every single pixel, the plugin runs a statistical test asking: <em>&ldquo;Did this spot change more than you would expect by normal variation?&rdquo;</em> Pixels that changed significantly get flagged. The result is a color-coded map where purple/red areas show the strongest changes.</div>
</div>

<div class="callout callout-info not-prose"><p class="callout-title">Not just for war damage</p><div class="callout-body">While the original tool was designed to detect destroyed buildings, the same principle works in reverse. If something <em>new</em> appears — a military base, or a construction site — the radar signal changes just the same. This plugin can detect <em>any</em> significant physical change on the ground.</div>
</div>

<hr>
<h2 id="what-this-looks-like-in-practice">What This Looks Like in Practice</h2>
<p>To give you a sense of what the plugin can actually reveal, here are two real examples. In both cases, the PWTT plugin flagged areas of change from radar data alone — then optical satellite imagery from Planet Labs was used to confirm what happened on the ground.</p>
<h3 id="example-1-detecting-change-in-a-desert-compound">Example 1: Detecting change in a desert compound</h3>
<div class="case-study-figure not-prose">

<figure class="image-compare not-prose" id="image-compare-0">
  <div class="image-compare-frame"><img class="image-compare-img image-compare-base" src="https://salaheldinaz.com/blog/pwtt-qgis-plugin/images/matan-3-oct-2025a_hu_b1a990223a0ca77e.webp" width="1600" height="900" alt="Amber variant" loading="lazy" decoding="async">
    <div class="image-compare-top-clip"><img class="image-compare-img image-compare-top" src="https://salaheldinaz.com/blog/pwtt-qgis-plugin/images/matan-28-aug-2025a_hu_a0bb8484d45a4288.webp" width="1600" height="900" alt="Blue baseline" loading="lazy" decoding="async">
    </div>
    <div class="image-compare-divider" aria-hidden="true"></div>
    <label class="sr-only" for="image-compare-0-range">Before (28 August 2025) / After (3 October 2025) comparison</label>
    <input id="image-compare-0-range" class="image-compare-range" type="range" min="0" max="100" value="50" aria-valuemin="0" aria-valuemax="100" aria-valuenow="50" aria-describedby="image-compare-0-hint">
    <span id="image-compare-0-hint" class="sr-only">Drag to compare Before (28 August 2025) on the left with After (3 October 2025) on the right.</span>
  </div>
  <figcaption class="image-compare-caption">
    <span class="image-compare-label image-compare-label-before">Before (28 August 2025)</span>
    <span class="image-compare-label image-compare-label-after">After (3 October 2025)</span>
  </figcaption>
</figure>
<script>
(function () {
  var root = document.getElementById("image-compare-0");
  if (!root) return;
  var range = root.querySelector(".image-compare-range");
  if (!range) return;
  function apply(v) {
    root.style.setProperty("--compare-pos", v + "%");
    range.setAttribute("aria-valuenow", String(v));
  }
  range.addEventListener("input", function () {
    apply(Number(range.value));
  });
  apply(Number(range.value));
})();
</script>


<div class="post-caption not-prose"><p>Matan As Sarra, Libya | 21.688°N, 21.828°E.</p>
<p><em>The PWTT time series chart for this location shows slight deviations in the VV radar signal on approximately 2 April 2025 and 12 September 2025 - both data points dip noticeably below the cluster of neighboring readings. Optical satellite imagery from Planet Labs confirms a visible change on the ground around that date.</em> <em>Imagery source: Planet Labs.</em></p>
</div>


</div>

<p>In this example, the plugin&rsquo;s time series chart showed a subtle dip in the VV radar signal around September 2025. The deviation was small — not enough to cross the tool&rsquo;s statistical significance threshold on its own — but it stood out from the otherwise stable baseline. A closer look using optical imagery confirmed a visible change at the site between August and October 2025.</p>
<figure><img src="https://salaheldinaz.com/blog/pwtt-qgis-plugin/images/matan-orbit-normalized_hu_e983468e948baf23.webp" width="807" height="439" alt="matan orbit normalized" loading="lazy" decoding="async">
</figure>

<div class="post-caption not-prose"><em>View time series option in the plugin</em></div>

<div class="callout callout-warning not-prose"><p class="callout-title">Key takeaway</p><div class="callout-body">The PWTT results do not always need to cross the statistical  threshold to be useful. Even subtle deviations can serve as leads — but  they must always be verified with additional sources like optical imagery before drawing conclusions.</div>
</div>

<hr>
<h3 id="example-2-tracking-new-construction-near-an-airstrip">Example 2: Tracking new construction near an airstrip</h3>
<div class="case-study-figure not-prose">

<figure class="image-compare not-prose" id="image-compare-1">
  <div class="image-compare-frame"><img class="image-compare-img image-compare-base" src="https://salaheldinaz.com/blog/pwtt-qgis-plugin/images/asosa-11-april-2026_hu_f3edb5675d4ac86a.webp" width="1600" height="900" alt="Amber variant" loading="lazy" decoding="async">
    <div class="image-compare-top-clip"><img class="image-compare-img image-compare-top" src="https://salaheldinaz.com/blog/pwtt-qgis-plugin/images/asosa-may-16-2025_hu_996ecb379824089c.webp" width="1600" height="900" alt="Blue baseline" loading="lazy" decoding="async">
    </div>
    <div class="image-compare-divider" aria-hidden="true"></div>
    <label class="sr-only" for="image-compare-1-range">Before (16 May 2025) / After (11 April 2026) comparison</label>
    <input id="image-compare-1-range" class="image-compare-range" type="range" min="0" max="100" value="50" aria-valuemin="0" aria-valuemax="100" aria-valuenow="50" aria-describedby="image-compare-1-hint">
    <span id="image-compare-1-hint" class="sr-only">Drag to compare Before (16 May 2025) on the left with After (11 April 2026) on the right.</span>
  </div>
  <figcaption class="image-compare-caption">
    <span class="image-compare-label image-compare-label-before">Before (16 May 2025)</span>
    <span class="image-compare-label image-compare-label-after">After (11 April 2026)</span>
  </figcaption>
</figure>
<script>
(function () {
  var root = document.getElementById("image-compare-1");
  if (!root) return;
  var range = root.querySelector(".image-compare-range");
  if (!range) return;
  function apply(v) {
    root.style.setProperty("--compare-pos", v + "%");
    range.setAttribute("aria-valuenow", String(v));
  }
  range.addEventListener("input", function () {
    apply(Number(range.value));
  });
  apply(Number(range.value));
})();
</script>


<div class="post-caption not-prose"><p>Asosa airport, Ethiopia.</p>
<p>New construction detected. The PWTT plugin flagged several change clusters (red/yellow pixels) near an airstrip. The optical imagery confirms new structures appeared between May 2025 and April 2026. The plugin detected these changes using radar data alone; the optical imagery serves as ground-truth confirmation. <em>Imagery source: Planet Labs.</em></p>
</div>



</div>

<p>In this second example, the plugin flagged several clusters of change (shown in red and yellow) near an airstrip in a rural area. Comparing optical imagery from May 2025 (before) and April 2026 (after) shows that the detected changes correspond to new structures and ground disturbance — evidence of construction activity that would have been difficult to spot without monitoring.</p>
<p>These examples illustrate the two sides of the plugin&rsquo;s value: it can detect both <em>destruction</em> (things disappearing) and <em>construction</em> (things appearing). For journalists and researchers, this means you can use a single tool to monitor any kind of physical change in an area of interest — from conflict damage to clandestine building activity.</p>
<hr>
<h2 id="what-you-need-before-starting">What You Need Before Starting</h2>
<p>Before installing the plugin, you will need three things. All of them are free.</p>
<div class="prereqs not-prose">

  <div class="prereq">
  <h4 class="prereq-title">QGIS 3.22&#43;</h4>
  <div class="prereq-body">QGIS is a free, open-source geographic information system. If you do not have it installed, download it first. The plugin runs inside QGIS.</div><a class="prereq-link" href="https://qgis.org/">Download QGIS →</a></div>

  <div class="prereq">
  <h4 class="prereq-title">Copernicus account</h4>
  <div class="prereq-body">Copernicus is the EU&rsquo;s Earth observation programme. A <strong>free</strong> account unlocks satellite data through the openEO or Local backends.</div><a class="prereq-link" href="https://browser.dataspace.copernicus.eu/">Create account →</a></div>

  <div class="prereq">
  <h4 class="prereq-title">Google Earth Engine</h4>
  <div class="prereq-body">Google&rsquo;s planetary-scale analysis platform. A free account is needed for the GEE backend (recommended for beginners — the fastest option). Setup takes a few extra steps — see the <strong>detailed walkthrough below</strong>.</div><a class="prereq-link" href="https://earthengine.google.com/">Sign up →</a></div>


</div>

<div class="callout callout-info not-prose"><p class="callout-title">🤔 Which backend should I pick?</p><div class="callout-body">The plugin supports two processing backends: <strong>Google Earth Engine</strong> (cloud-based, fast, recommended for beginners) and <strong>openEO</strong> (cloud-based via Copernicus). If you are just starting out, go with <strong>Google Earth Engine</strong>.</div>
</div>

<hr>
<h2 id="detailed-walkthrough">Detailed Walkthrough</h2>
<h3 id="setting-up-google-earth-engine">Setting Up Google Earth Engine</h3>
<p>Google Earth Engine requires a bit more setup than just creating an account. You need to create a Google Cloud project, enable the Earth Engine API, set up OAuth credentials, and register the project with Earth Engine. It sounds complicated, but it is mostly clicking through forms. Follow these steps exactly.</p>
<h4 id="part-a-enable-the-earth-engine-api">Part A: Enable the Earth Engine API</h4>
<div class="step not-prose">
  <div class="step-head">
    <span class="step-num">1</span>
    <span class="step-title">Go to Google Cloud Console</span>
  </div>
  <div class="step-body">Open <a href="https://console.cloud.google.com/">console.cloud.google.com</a> and sign in with the same Google account you used to sign up for Earth Engine. If you do not have a Google Cloud project yet, you will be prompted to create one. Give it any name you like (e.g., &ldquo;pwtt&rdquo;).</div>
</div>

<h5 id="registering-your-project-with-earth-engine">Registering Your Project with Earth Engine</h5>
<p>Navigate to <a href="https://console.cloud.google.com/earth-engine">Earth Engine → Configuration</a> in your Google Cloud Console. You will see two options: <strong>Register for commercial use</strong> and <strong>See if you are eligible for noncommercial use</strong>. For journalism and research, click <strong>&ldquo;Get started&rdquo;</strong> under noncommercial use.</p>
<p>The registration walks you through five steps:</p>
<ol>
<li><strong>Organization type:</strong> Select what best describes you (e.g., &ldquo;Other&rdquo; for individual journalists).</li>
<li><strong>Noncommercial eligibility:</strong> Choose &ldquo;Individual research or noncommercial use.&rdquo; In the description field, briefly describe your use (e.g., &ldquo;OSINT research&rdquo; or &ldquo;PWTT damage assessment&rdquo;).</li>
<li><strong>Plan:</strong> Select <strong>&ldquo;Community&rdquo;</strong> — this is the free tier with 150 EECU-hour limit, which is sufficient for most investigative work. No billing account is required.</li>
<li><strong>Describe your work:</strong> Check the category that fits (e.g., &ldquo;Human Rights&rdquo;).</li>
<li><strong>Review and Register:</strong> Review your selections and click <strong>Register</strong>.</li>
</ol>
<p><img src="https://salaheldinaz.com/blog/pwtt-qgis-plugin/images/google-earth-03_hu_c7fd92470f77746a.webp" width="844" height="1101" alt=" Google Earth Engine API registration page " loading="lazy" decoding="async"></p>
<p><div class="step not-prose">
  <div class="step-head">
    <span class="step-num">2</span>
    <span class="step-title">Enable the Google Earth Engine API</span>
  </div>
  <div class="step-body">Navigate to <strong>APIs &amp; Services</strong> in the left sidebar. Click <strong>Library</strong>, search for <strong>&ldquo;Google Earth Engine API&rdquo;</strong>, and click <strong>Enable</strong>. Once enabled, you should see the API details page showing the status as &ldquo;Enabled.&rdquo;</div>
</div>

<img src="https://salaheldinaz.com/blog/pwtt-qgis-plugin/images/google-earth-02_hu_cf29de002ed64677.webp" width="1270" height="483" alt=" Google Earth Engine API page — Status: Enabled " loading="lazy" decoding="async"></p>
<div class="callout callout-default not-prose"><p class="callout-title">You are now set up</p><div class="callout-body">Your Google Cloud project has the Earth Engine API enabled, OAuth credentials configured, and is registered for noncommercial Earth Engine access. When you authenticate from the PWTT plugin in QGIS, use this project name and the downloaded credentials JSON file.</div>
</div>

<hr>
<h4 id="part-b-configure-oauth-consent-screen">Part B: Configure OAuth Consent Screen</h4>
<p>Before you can create credentials, Google requires you to set up an &ldquo;OAuth consent screen.&rdquo; This is a one-time setup for your project.</p>
<div class="step not-prose">
  <div class="step-head">
    <span class="step-num">3</span>
    <span class="step-title">Open the Google Auth Platform</span>
  </div>
  <div class="step-body">In the left sidebar, click <strong>OAuth consent screen</strong> (or navigate to <strong>Google Auth Platform → Overview</strong>). You will see a message saying &ldquo;Google Auth Platform not configured yet.&rdquo; Click <strong>&ldquo;Get started&rdquo;</strong>.</div>
</div>

<div class="step not-prose">
  <div class="step-head">
    <span class="step-num">4</span>
    <span class="step-title">Fill in App Information</span>
  </div>
  <div class="step-body">In the <strong>Project configuration</strong> form, Step 1 asks for App Information. Enter any name in the <strong>App name</strong> field (e.g., &ldquo;PWTT&rdquo;) and select your email from the <strong>User support email</strong> dropdown. Click <strong>Next</strong>.</div>
</div>

<div class="step not-prose">
  <div class="step-head">
    <span class="step-num">5</span>
    <span class="step-title">Set Audience to External</span>
  </div>
  <div class="step-body">In Step 2, select <strong>&ldquo;External&rdquo;</strong> and click <strong>Next</strong>. This means any Google account can use it (your own account is enough).</div>
</div>

<div class="step not-prose">
  <div class="step-head">
    <span class="step-num">6</span>
    <span class="step-title">Finish the consent screen</span>
  </div>
  <div class="step-body">Complete the remaining steps (Contact Information and Finish). On the final step, check the box to agree to the <strong>Google API Services User Data Policy</strong>, then click <strong>Continue</strong> and <strong>Create</strong>. You should see a green &ldquo;OAuth configuration created!&rdquo; confirmation.</div>
</div>

<h4 id="part-c-create-oauth-client-credentials">Part C: Create OAuth Client Credentials</h4>
<div class="step not-prose">
  <div class="step-head">
    <span class="step-num">7</span>
    <span class="step-title">Create an OAuth client</span>
  </div>
  <div class="step-body">From the OAuth Overview page, click <strong>&ldquo;Create OAuth client&rdquo;</strong>. On the next screen, select <strong>&ldquo;Desktop app&rdquo;</strong> from the <strong>Application type</strong> dropdown. Give it any name (e.g., &ldquo;Pwtt2&rdquo;). Click <strong>Create</strong>.</div>
</div>

<div class="step not-prose">
  <div class="step-head">
    <span class="step-num">8</span>
    <span class="step-title">Save your credentials</span>
  </div>
  <div class="step-body">A dialog will appear showing your <strong>Client ID</strong> and <strong>Client secret</strong>. Click <strong>&ldquo;Download JSON&rdquo;</strong> to save these credentials to a file on your computer. You will need this file later when authenticating from QGIS. Keep this file private — do not share it publicly.</div>
</div>

<div class="callout callout-warning not-prose"><p class="callout-title">Important</p><div class="callout-body">Your Client ID and Client secret are like passwords — they grant access to your Google Cloud project. Never share them publicly or include them in screenshots you publish.</div>
</div>

<div class="step not-prose">
  <div class="step-head">
    <span class="step-num">9</span>
    <span class="step-title">Verify credentials are listed</span>
  </div>
  <div class="step-body">Back on the Earth Engine API Credentials tab, you should now see your new OAuth client listed under &ldquo;OAuth 2.0 Client IDs.&rdquo; This confirms everything is set up correctly on the Google Cloud side.</div>
</div>

<hr>
<h3 id="setting-up-copernicus-account">Setting Up Copernicus account</h3>
<p>Setting up a Copernicus account is quick and straightforward. Simply visit <a href="https://identity.dataspace.copernicus.eu/auth/realms/CDSE/login-actions/registration">the Copernicus registration page</a> to create your account. Once registered and logged in, you can easily generate your OAuth credentials by going to <a href="https://shapps.dataspace.copernicus.eu/dashboard/#/account/settings">the account settings section</a>.</p>
<hr>
<h3 id="installing-the-plugin-in-qgis">Installing the Plugin in QGIS</h3>
<p>Installing the PWTT plugin in QGIS can be done in two ways.
If the plugin is not available in the repository or you need a specific version, you can also install it manually by downloading the plugin as a .zip file and installing it via the &ldquo;Install from ZIP&rdquo; option in the QGIS Plugin Manager.</p>
<div class="step not-prose">
  <div class="step-head">
    <span class="step-num">1</span>
    <span class="step-title">official QGIS plugin repository</span>
  </div>
  <div class="step-body">The easiest and recommended method is to install it directly from the official QGIS plugin repository.
<a href="https://plugins.qgis.org/plugins/pwtt_qgis/">Plugin page on QGIS plugins website</a>
_
<img src="https://salaheldinaz.com/blog/pwtt-qgis-plugin/images/qgis-plugin-interface_hu_ac5c4ac5a8cb89f.webp" width="1600" height="1122" alt="qgis-plugin-interface" loading="lazy" decoding="async"></div>
</div>

<div class="step not-prose">
  <div class="step-head">
    <span class="step-num">2</span>
    <span class="step-title">Installing the plugin from ZIP file</span>
  </div>
  <div class="step-body"><p>If the plugin is not available in the repository or you need a specific version, you can also install it manually by downloading the plugin as a .zip file from <a href="https://github.com/Salaheldinaz/PWTT-QGIS-Plugin">here</a> and installing it via the &ldquo;Install from ZIP&rdquo; option in the QGIS Plugin Manager.</p>
<p>_
<img src="https://salaheldinaz.com/blog/pwtt-qgis-plugin/images/qgis-plugin-interface-02_hu_ac5b4e4abdb8db14.webp" width="1600" height="1116" alt="qgis-plugin-interface" loading="lazy" decoding="async"></p>
</div>
</div>

<hr>
<h3 id="after-installing-the-plugin">After installing the Plugin</h3>
<p>Open the PWTT panel by clicking the new <strong>PWTT</strong> icon in your toolbar (or go to <strong>Plugins → PWTT</strong>). If the plugin tells you that some Python packages are missing, click the <strong>&ldquo;Install Dependencies&rdquo;</strong> button. This downloads small helper libraries the plugin needs to talk to the satellite data servers.</p>
<p>In the PWTT panel, select your preferred backend (e.g., <strong>Google Earth Engine</strong>). Click <strong>Authenticate</strong>. A browser window will open asking you to log in with your Google account and authorize access. Follow the prompts.</p>
<p>For <strong>Copernicus/openEO</strong>: enter your Copernicus credentials directly or use the browser-based OIDC login.</p>
<hr>
<h2 id="running-your-first-analysis">Running Your First Analysis</h2>
<figure class="my-3"><img src="https://salaheldinaz.com/blog/pwtt-qgis-plugin/images/dock-controls_hu_4537ad7f08ca3882.webp" width="1600" height="1180" alt="plugin interface" loading="lazy" decoding="async">
</figure>

<div class="step not-prose">
  <div class="step-head">
    <span class="step-num">1</span>
    <span class="step-title">Draw your Area of Interest (AOI)</span>
  </div>
  <div class="step-body">In the PWTT panel, click <strong>&ldquo;Draw rectangle on map&rdquo;</strong>. Your cursor will change — click and drag on the map to draw a rectangle around the area you want to analyze. Keep it small for your first test (a city block or neighborhood).</div>
</div>

<div class="step not-prose">
  <div class="step-head">
    <span class="step-num">2</span>
    <span class="step-title">Set your dates</span>
  </div>
  <div class="step-body"><p>Set two dates:</p>
<p><strong>War/Event start date</strong> — This is the date of the event you are investigating. Everything <em>before</em> this date becomes your &ldquo;normal&rdquo; baseline. (Despite the name, this works for any event — not just wars.)</p>
<p><strong>Inference start date</strong> — This is when the &ldquo;after&rdquo; comparison begins. It must be the same as or later than the war start date.</p>
</div>
</div>

<div class="step not-prose">
  <div class="step-head">
    <span class="step-num">3</span>
    <span class="step-title">Choose your settings</span>
  </div>
  <div class="step-body">For your first run, the defaults work well: <strong>12 months</strong> of pre-event data, <strong>2 months</strong> of post-event data, and a <strong>T-statistic cutoff of 3.3</strong>.
A higher cutoff means the plugin only flags more extreme changes (fewer results, but more confident). A lower cutoff flags more changes (more results, but more noise).</div>
</div>

<div class="step not-prose">
  <div class="step-head">
    <span class="step-num">4</span>
    <span class="step-title">Pick an output folder and run</span>
  </div>
  <div class="step-body">Select an output directory where results will be saved, then click <strong>Run</strong>. A confirmation dialog will show your settings — review them and confirm. The analysis runs in the background; you will see progress in the QGIS task bar and the <strong>PWTT Job Log</strong> dock.</div>
</div>

<div class="step not-prose">
  <div class="step-head">
    <span class="step-num">5</span>
    <span class="step-title">Read your results</span>
  </div>
  <div class="step-body"><p>When the job finishes, a color-coded layer appears on your map. The default color scheme is:</p>
<p><strong>🟣 Purple</strong> = strongest change signal (most significant)</p>
<p><strong>🔴 Red</strong> = strong change</p>
<p><strong>🟡 Yellow</strong> = moderate change (just above the detection threshold)</p>
<p>Transparent areas mean no significant change was detected.</p>
</div>
</div>

<figure class="my-3"><img src="https://salaheldinaz.com/blog/pwtt-qgis-plugin/images/result-map_hu_72067c4d772ff891.webp" width="1600" height="940" alt="Analysis result" loading="lazy" decoding="async">
</figure>

<hr>
<h2 id="what-the-plugin-can-do">What the Plugin Can Do</h2>
<p>This plugin is a QGIS implementation of the original PWTT tool. Here is what it adds for everyday monitoring:</p>
<div class="feature not-prose">
  <div class="feature-icon" aria-hidden="true">💻</div>
  <div class="feature-text">
    <strong class="feature-title">Runs locally on your machine</strong>
    No need for a remote server or command line. Everything works inside the QGIS interface you already know.
  </div>
</div>

<div class="feature not-prose">
  <div class="feature-icon" aria-hidden="true">📌</div>
  <div class="feature-text">
    <strong class="feature-title">Save preferred areas of interest</strong>
    Draw your AOI once, save it, and come back to it later without re-drawing.
  </div>
</div>

<div class="feature not-prose">
  <div class="feature-icon" aria-hidden="true">📁</div>
  <div class="feature-text">
    <strong class="feature-title">Create monitoring projects</strong>
    Organize different areas into projects. This speeds up repeat monitoring — you set up once, then re-run with new dates whenever you need an update.
  </div>
</div>

<div class="feature not-prose">
  <div class="feature-icon" aria-hidden="true">📈</div>
  <div class="feature-text">
    <strong class="feature-title">Time-series view</strong>
    Using the Earth Engine backend, you can view a timeline chart showing <em>when</em> changes happened — not just <em>where</em>. This helps pinpoint the exact period of an event.
  </div>
</div>

<div class="feature not-prose">
  <div class="feature-icon" aria-hidden="true">🔀</div>
  <div class="feature-text">
    <strong class="feature-title">Automatic splitting of large areas</strong>
    If your area of interest is very large, the plugin automatically splits it into manageable tiles so the analysis does not crash or time out.
  </div>
</div>

<div class="feature not-prose">
  <div class="feature-icon" aria-hidden="true">📦</div>
  <div class="feature-text">
    <strong class="feature-title">Export and import AOIs</strong>
    Share your areas of interest with colleagues or import areas that others have prepared. Useful for collaborative investigations.
  </div>
</div>

<div class="feature not-prose">
  <div class="feature-icon" aria-hidden="true">⚡</div>
  <div class="feature-text">
    <strong class="feature-title">Run multiple areas simultaneously</strong>
    Queue up several areas and let them process in parallel, rather than running them one at a time.
  </div>
</div>

<div class="limitation not-prose"><p class="limitation-title">Limitations to Keep in Mind</p><div class="limitation-body">No tool is perfect. Understanding the limitations will help you avoid drawing wrong conclusions from your results. You can view the  limitations in the <a href="https://www.sciencedirect.com/science/article/pii/S0034425725004298">original published paper</a>.</div>
</div>

<hr>
<h2 id="tips-for-beginners">Tips for Beginners</h2>
<p><strong>Start small.</strong> For your first run, pick a well-known location where you already know something changed (a documented demolition, a construction site). This lets you verify the results and build confidence in the tool.</p>
<p><strong>Use longer baselines.</strong> The default 12-month pre-event window works well in most cases. A longer baseline gives the statistical test more data to establish &ldquo;normal,&rdquo; which reduces false positives.</p>
<p><strong>Cross-reference everything.</strong> This tool is a starting point for investigation, not a final verdict. Always compare your findings with optical satellite imagery (Google Earth, Sentinel-2), news reports, and other open-source intelligence.</p>
<p><strong>The T-statistic cutoff is your sensitivity dial.</strong> The default of 3.3 is a good balance. Lower it (e.g., 2.5) to catch more subtle changes (but more noise). Raise it (e.g., 4.0 or 5.0) to only see the most dramatic changes.</p>
<hr>
<h2 id="further-reading">Further Reading</h2>
<p>The original research paper explaining the PWTT method in detail: <a href="https://www.sciencedirect.com/science/article/pii/S0034425725004298">&ldquo;Open access battle damage detection via Pixel-Wise T-Test on Sentinel-1 imagery&rdquo;</a> — published in <em>Remote Sensing of Environment</em>, 2025.</p>
<p>Bellingcat&rsquo;s practical application of the tool: <a href="https://www.bellingcat.com/resources/2026/04/07/tool-damage-assessment-destruction-sentinel-satellite-imagery-iran-us-gulf/">&ldquo;When Satellite Imagery Goes Dark: New Tool Shows Damage in Iran and the Gulf&rdquo;</a> — April 2026.</p>
<p>The original PWTT code repository by Ollie Ballinger: <a href="https://github.com/oballinger/PWTT">github.com/oballinger/PWTT</a></p>
<div class="callout callout-default not-prose"><div class="callout-body">This guide is intended for educational and journalistic purposes.  Always verify findings with multiple sources before drawing conclusions. a construction site, a deforested area — the radar signal changes just  the same. This plugin can detect <em>any</em> significant physical change on the ground.</div>
</div>

]]></content:encoded></item><item><title>Adsb-History Self-Hosted</title><link>https://salaheldinaz.com/blog/adsb-history-tool/</link><guid isPermaLink="true">https://salaheldinaz.com/blog/adsb-history-tool/</guid><pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate><description>How I added Docker-based deployment to Turnstone (adsb-history), making it easy to self-host a full ADS-B historical query system — with or without Firebase and with support for external Postgres databases.</description><category>adsb</category><category>docker</category><category>osint</category><category>aviation</category><category>open-source</category><category>osint</category><category>project</category><content:encoded><![CDATA[<p><a href="https://github.com/bellingcat/adsb-history">Turnstone</a> is a full-stack application for querying historical ADS-B aircraft data — originally built by <a href="https://www.bellingcat.com/resources/2026/03/05/turnstone-flight-tracking-tool/">Bellingcat</a> as an investigative journalism tool. It lets you filter aircraft positions by geographic region, altitude, speed, bearing, type, and more against a large historical dataset.</p>
<p>The original project requires manually setting up PostgreSQL with PostGIS, a Flask API, a Vue.js frontend, and Firebase authentication. That&rsquo;s a lot of moving parts to coordinate before you can run a single query. My <a href="https://github.com/salaheldinaz/adsb-history/">modified version of Turnstone</a> adds a Docker-based deployment that brings it all together with a single command.</p>
<figure><img src="https://salaheldinaz.com/blog/adsb-history-tool/images/screenshot-search_hu_348804b173627.webp" width="1600" height="1157" alt="Turnstone search interface" loading="lazy" decoding="async"><figcaption class="post-caption">The Turnstone query builder with bounding box selection and filters</figcaption>
</figure>

<h2 id="what-changed">What Changed</h2>
<p><img src="https://img.shields.io/badge/Docker-2496ED?logo=docker&amp;logoColor=white" alt="Docker" loading="lazy" decoding="async"></p>
<p>The PR adds Docker Compose orchestration for the entire stack, optional Firebase-free (&ldquo;local&rdquo;) mode, support for an external Postgres database, improved data loading scripts, and updated documentation.</p>
<p>Everything persistent lives under a single <code>data/</code> directory in the repo root — heatmap files, Postgres data, modes CSV, query history backups, and optionally your Firebase service account key.</p>
<hr>
<h2 id="quick-start-local-postgres-no-firebase">Quick Start (Local Postgres, No Firebase)</h2>
<p>This is the easiest path. You get a fully self-contained stack with no Google accounts required.</p>
<h3 id="1-clone-and-configure">1. Clone and configure</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">git clone https://github.com/salaheldinaz/adsb-history.git
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> adsb-history
</span></span><span class="line"><span class="cl">cp docker/.env.example docker/.env
</span></span></code></pre></div><p>Both <code>DISABLE_AUTH=1</code> and <code>VITE_DISABLE_AUTH=1</code> are set by default in <code>.env.example</code>, so no changes are needed for a Firebase-free setup. All other defaults work out of the box.</p>
<h3 id="2-download-heatmap-data">2. Download heatmap data</h3>
<p>The heatmap data comes from <a href="https://github.com/adsblol/globe_history/releases">adsblol/globe_history</a>. The download script handles fetching and extracting the split <code>.tar.aa</code>/<code>.tar.ab</code> archive:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">./scripts/download-globe-history.sh data
</span></span></code></pre></div><p>When run from a terminal, the script is <strong>interactive</strong> — it shows a numbered catalog of all available prod releases and lets you pick by index, a date, or a date range:</p>
<figure><img src="https://salaheldinaz.com/blog/adsb-history-tool/images/screenshot-interactive-heatmap_hu_a0c38e5dc3c5d3c8.webp" width="1143" height="642" alt="Turnstone interactive heatmap downloader" loading="lazy" decoding="async">
</figure>

<p>When piped or run non-interactively (e.g. in CI), it downloads the latest release automatically. The script extracts each release into <code>data/&lt;tag&gt;/</code> — note the directory name for step 4.</p>
<h3 id="3-start-the-stack">3. Start the stack</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker compose -f docker/docker-compose.yml up -d
</span></span></code></pre></div><p>This starts Postgres (with PostGIS), the Flask API, and the Nginx-fronted Vue frontend.</p>
<h3 id="4-load-the-heatmap-data">4. Load the heatmap data</h3>
<p>To load all downloaded releases at once (bulk):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker compose -f docker/docker-compose.yml run --rm data-loading /data
</span></span></code></pre></div><p>Or to load a single specific release:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker compose -f docker/docker-compose.yml run --rm data-loading <span class="se">\
</span></span></span><span class="line"><span class="cl">  /data/&lt;RELEASE_DIR&gt;/heatmap
</span></span></code></pre></div><p>Replace <code>&lt;RELEASE_DIR&gt;</code> with the tag directory from step 2 (e.g. <code>v2026.04.15-planes-readsb-prod-0</code>). The loader accepts gzip-compressed and raw binary files, handles big-endian format, and supports both <code>YYYY-MM-DD</code> and <code>YYYY.MM.DD</code> date directory naming.</p>
<h3 id="5-open-the-app">5. Open the app</h3>
<ul>
<li><strong>Frontend:</strong> http://localhost:8080</li>
<li><strong>API:</strong> http://localhost:5000</li>
</ul>
<figure><img src="https://salaheldinaz.com/blog/adsb-history-tool/images/screenshot-map_hu_26c22e4863bef532.webp" width="1600" height="1492" alt="Aircraft positions on the map" loading="lazy" decoding="async"><figcaption class="post-caption">Query results shown as points on the map</figcaption>
</figure>

<hr>
<h2 id="using-an-external-postgres-database">Using an External Postgres Database</h2>
<p>If you already have a PostGIS-enabled Postgres instance (e.g. on a NAS, a VPS, or a managed cloud database), you can point the stack at it instead of running a local container.</p>
<h3 id="1-set-docker_database_url-in-your-env">1. Set <code>DOCKER_DATABASE_URL</code> in your <code>.env</code></h3>
<p>Docker containers can&rsquo;t reach <code>localhost</code> — use the actual host address. On Docker Desktop (Mac/Windows) that&rsquo;s <code>host.docker.internal</code>; on Linux the compose file already sets <code>extra_hosts</code> for you:</p>
<pre tabindex="0"><code>DOCKER_DATABASE_URL=postgresql://user:password@host.docker.internal:5432/adsb
</code></pre><h3 id="2-initialize-the-external-database-once">2. Initialize the external database (once)</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">./scripts/init-external-db.sh
</span></span></code></pre></div><p>This script is idempotent — safe to run multiple times. It applies <code>docker/postgres/01_schema.sql</code> and loads <code>data/modes.csv</code> if present. It also checks that PostGIS is installed and exits clearly if it isn&rsquo;t.</p>
<h3 id="3-start-with-the-external-db-override">3. Start with the external-db override</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">docker compose <span class="se">\
</span></span></span><span class="line"><span class="cl">  -f docker/docker-compose.yml <span class="se">\
</span></span></span><span class="line"><span class="cl">  -f docker/docker-compose.external-db.yml <span class="se">\
</span></span></span><span class="line"><span class="cl">  up -d
</span></span></code></pre></div><p>The override file stubs out the local Postgres container so <code>depends_on</code> chains still work, while the API and data-loading containers connect via <code>DOCKER_DATABASE_URL</code>.</p>
<h3 id="4-load-data-the-same-way">4. Load data the same way</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Bulk — all releases under data/</span>
</span></span><span class="line"><span class="cl">docker compose <span class="se">\
</span></span></span><span class="line"><span class="cl">  -f docker/docker-compose.yml <span class="se">\
</span></span></span><span class="line"><span class="cl">  -f docker/docker-compose.external-db.yml <span class="se">\
</span></span></span><span class="line"><span class="cl">  run --rm data-loading /data
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Or single release</span>
</span></span><span class="line"><span class="cl">docker compose <span class="se">\
</span></span></span><span class="line"><span class="cl">  -f docker/docker-compose.yml <span class="se">\
</span></span></span><span class="line"><span class="cl">  -f docker/docker-compose.external-db.yml <span class="se">\
</span></span></span><span class="line"><span class="cl">  run --rm data-loading /data/&lt;RELEASE_DIR&gt;/heatmap
</span></span></code></pre></div><hr>
<h2 id="optional-firebase-authentication">Optional: Firebase Authentication</h2>
<p>If you want to enable user accounts and Firestore-backed query history (the original upstream behaviour), add Firebase credentials:</p>
<ol>
<li>Create a project at <a href="https://console.firebase.google.com">console.firebase.google.com</a> and enable Authentication.</li>
<li>Download a service account JSON key and place it in <code>data/firebase-service-account.json</code>.</li>
<li>In <code>docker/.env</code>, set:
<pre tabindex="0"><code>FIREBASE_SERVICE_ACCOUNT_KEY=/data/firebase-service-account.json
FIREBASE_PROJECT_ID=your-project-id
VITE_FIREBASE_API_KEY=...
# (plus the other VITE_FIREBASE_* vars from .env.example)
</code></pre></li>
<li>Set <code>DISABLE_AUTH=0</code> and <code>VITE_DISABLE_AUTH=0</code> (overriding the defaults).</li>
</ol>
<p>When Firebase is disabled, the frontend uses a stub user and stores query history in the browser&rsquo;s IndexedDB instead of Firestore.</p>
<hr>
<h2 id="query-history-backup--restore">Query History Backup &amp; Restore</h2>
<p>Whether you use Firebase or not, you can back up and restore your saved queries through the UI. Look for the <strong>&ldquo;Save to data folder&rdquo;</strong> and <strong>&ldquo;Restore from data folder&rdquo;</strong> buttons in the Query History panel. These write to/from <code>data/query-history-backup.json</code> via the API, so backups survive container restarts.</p>
<figure><img src="https://salaheldinaz.com/blog/adsb-history-tool/images/screenshot-history_hu_7f2e454470ef781e.webp" width="646" height="852" alt="Query history panel" loading="lazy" decoding="async"><figcaption class="post-caption">Saved queries with backup and restore options</figcaption>
</figure>

<hr>
<h2 id="environment-variables-reference">Environment Variables Reference</h2>
<table>
	<thead>
			<tr>
					<th>Variable</th>
					<th>Default</th>
					<th>Description</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><code>DOCKER_DATABASE_URL</code></td>
					<td><em>(unset)</em></td>
					<td>Full Postgres connection string for Docker containers (use <code>host.docker.internal</code> for a local DB)</td>
			</tr>
			<tr>
					<td><code>DB_HOST</code></td>
					<td><code>postgres</code></td>
					<td>Postgres hostname (bundled container)</td>
			</tr>
			<tr>
					<td><code>DB_PORT</code></td>
					<td><code>5432</code></td>
					<td>Postgres port</td>
			</tr>
			<tr>
					<td><code>DB_NAME</code></td>
					<td><code>adsb</code></td>
					<td>Database name</td>
			</tr>
			<tr>
					<td><code>DB_USER</code></td>
					<td><code>adsb</code></td>
					<td>Database user</td>
			</tr>
			<tr>
					<td><code>DB_PASS</code></td>
					<td><code>adsb</code></td>
					<td>Database password</td>
			</tr>
			<tr>
					<td><code>DISABLE_AUTH</code></td>
					<td><code>1</code></td>
					<td>Set to <code>0</code> to enable Firebase on the backend</td>
			</tr>
			<tr>
					<td><code>VITE_DISABLE_AUTH</code></td>
					<td><code>1</code></td>
					<td>Set to <code>0</code> to enable Firebase on the frontend</td>
			</tr>
			<tr>
					<td><code>VITE_API_BASE_URL</code></td>
					<td><em>(empty)</em></td>
					<td>API URL as seen by the browser; leave empty for Docker (frontend proxies <code>/api</code> internally)</td>
			</tr>
			<tr>
					<td><code>FIREBASE_PROJECT_ID</code></td>
					<td><em>(unset)</em></td>
					<td>Firebase project ID</td>
			</tr>
			<tr>
					<td><code>FIREBASE_SERVICE_ACCOUNT_KEY</code></td>
					<td><em>(unset)</em></td>
					<td>Path to service account JSON inside the container</td>
			</tr>
			<tr>
					<td><code>QUERY_HISTORY_BACKUP_PATH</code></td>
					<td><code>/data/query-history-backup.json</code></td>
					<td>Where backup/restore writes query history</td>
			</tr>
			<tr>
					<td><code>POSTGRES_PORT</code></td>
					<td><em>(optional)</em></td>
					<td>Override host-side port binding for Postgres</td>
			</tr>
			<tr>
					<td><code>API_PORT</code></td>
					<td><em>(optional)</em></td>
					<td>Override host-side port binding for the API</td>
			</tr>
			<tr>
					<td><code>FRONTEND_PORT</code></td>
					<td><em>(optional)</em></td>
					<td>Override host-side port binding for the frontend</td>
			</tr>
	</tbody>
</table>
<p>Copy <code>docker/.env.example</code> to <code>docker/.env</code> to see all available options with comments.</p>
<hr>
<h2 id="data-format-notes">Data Format Notes</h2>
<p>The data loader was updated to handle a few quirks in the wild:</p>
<ul>
<li><strong><code>modes.csv</code> format:</strong> Both the original 7-column format and the newer 11-column format (with <code>owner</code> and <code>aircraft</code> fields) are supported via a staging table and mapped insert.</li>
<li><strong>Heatmap filenames:</strong> The loader accepts both <code>0</code>–<code>47</code> (no extension) and <code>00.bin.ttf</code>–<code>47.bin.ttf</code>.</li>
<li><strong>Compression:</strong> Gzip-compressed binary input is handled transparently.</li>
<li><strong>Byte order:</strong> Big-endian binaries are supported.</li>
<li><strong>Date directories:</strong> Both <code>YYYY-MM-DD</code> and <code>YYYY.MM.DD</code> naming conventions work.</li>
</ul>
<hr>
<p>The repo is at <a href="https://github.com/salaheldinaz/adsb-history">github.com/salaheldinaz/adsb-history</a>. If you run into issues with the Docker setup, open an issue or leave a comment.</p>
]]></content:encoded></item><item><title>DEFCON29 - Recon Village Resources</title><link>https://salaheldinaz.com/blog/defcon29-recon-village/</link><guid isPermaLink="true">https://salaheldinaz.com/blog/defcon29-recon-village/</guid><pubDate>Sun, 15 Aug 2021 00:00:00 +0000</pubDate><description>Tools &amp; Resources from #DEFCON29 Recon Village Talks</description><category>osint</category><category>defcon</category><category>recon</category><category>tools</category><category>defcon29</category><content:encoded><![CDATA[<p><strong>Talks videos</strong>  <a href="https://www.youtube.com/playlist?list=PLVwzzufdy9iu3UbT1UNSq_mhEgl6Dj4Ue">🎬 Watch here</a></p>
<p><strong>Downloadable Version of this list</strong>  <a href="https://gist.github.com/salaheldinaz/2a3672637e5c600d03f28e76b238182f">🧰 Click here</a></p>
<hr>
<p><img src="https://salaheldinaz.com/blog/defcon29-recon-village/img/1_hu_c3e6f357a90c0ef4.webp" width="1400" height="181" alt="" loading="lazy" decoding="async"></p>
<h2 id="future-of-asset-management---ben-sadeghipour">Future of Asset Management - Ben Sadeghipour</h2>
<h3 id="where-to-find-domainssubdomains">Where to find Domains/subdomains:</h3>
<ul>
<li>Acquisitions <a href="https://acquiredby.co/apple-acquisitions/">https://acquiredby.co/apple-acquisitions/</a></li>
<li>ViewDNS <a href="https://viewdns.info">https://viewdns.info</a></li>
<li>Certificate Transparency services
<ul>
<li>Shodan <a href="https://shodan.io">https://shodan.io</a></li>
<li>Censys <a href="https://censys.io/">https://censys.io/</a></li>
<li>Crt.sh <a href="https://Crt.sh">https://Crt.sh</a></li>
<li>Certspotter <a href="https://sslmate.com/certspotter/">https://sslmate.com/certspotter/</a></li>
<li>Google Transparency Report <a href="https://transparencyreport.google.com/https/certificates">https://transparencyreport.google.com/https/certificates</a></li>
<li>Facebook Certificate Transparency Monitoring <a href="https://developers.facebook.com/tools/ct/">https://developers.facebook.com/tools/ct/</a></li>
</ul>
</li>
</ul>
<h3 id="mentioned-tools">Mentioned Tools</h3>
<ul>
<li>Amass <a href="https://github.com/OWASP/Amass">https://github.com/OWASP/Amass</a></li>
<li>Subfinder <a href="https://github.com/projectdiscovery/subfinder">https://github.com/projectdiscovery/subfinder</a></li>
<li>Sublist3r <a href="https://github.com/aboul3la/Sublist3r">https://github.com/aboul3la/Sublist3r</a></li>
<li>Findomain <a href="https://github.com/Findomain/Findomain">https://github.com/Findomain/Findomain</a></li>
<li>Sudomy <a href="https://github.com/screetsec/Sudomy">https://github.com/screetsec/Sudomy</a></li>
</ul>
<hr>
<p><img src="https://salaheldinaz.com/blog/defcon29-recon-village/img/2_hu_ed7ed870250a5260.webp" width="1400" height="181" alt="" loading="lazy" decoding="async"></p>
<h2 id="passive-dns---andy-dennis">Passive DNS - Andy Dennis</h2>
<h3 id="passive-dns-providers">Passive DNS Providers</h3>
<ul>
<li>RiskIQ <a href="https://community.riskiq.com/home">https://community.riskiq.com/home</a></li>
<li>Cisco Umbrella <a href="https://umbrella.cisco.com/">https://umbrella.cisco.com/</a></li>
<li>SecurityTrails <a href="https://securitytrails.com/">https://securitytrails.com/</a></li>
<li>CIRCL Passive DNS <a href="https://www.circl.lu/services/passive-dns/">https://www.circl.lu/services/passive-dns/</a></li>
<li>SpamHaus Passive DNS <a href="https://www.spamhaus.com/product/passive-dns/">https://www.spamhaus.com/product/passive-dns/</a></li>
</ul>
<h3 id="mentioned-tools-1">Mentioned Tools</h3>
<ul>
<li>Word Generator <a href="https://wordsmith.org/anagram">https://wordsmith.org/anagram</a></li>
</ul>
<hr>
<p><img src="https://salaheldinaz.com/blog/defcon29-recon-village/img/3_hu_752522a3497f247f.webp" width="1400" height="181" alt="" loading="lazy" decoding="async"></p>
<h2 id="so-you-want-opsec-eh---ritu-gill">So you Want OpSec, eh? - Ritu Gill</h2>
<h3 id="devicebrowser-info">Device/Browser info</h3>
<ul>
<li><a href="https://coveryourtracks.eff.org">https://coveryourtracks.eff.org</a></li>
<li>AmIUnique <a href="https://www.amiunique.org">https://www.amiunique.org</a></li>
<li>Whoer <a href="https://whoer.net">https://whoer.net</a></li>
<li>WhatU <a href="https://whatu.info">https://whatu.info</a></li>
</ul>
<h3 id="browser-add-ons">Browser Add-ons</h3>
<ul>
<li>HTTPS everywhere <a href="https://addons.mozilla.org/en-US/firefox/addon/https-everywhere/">https://addons.mozilla.org/en-US/firefox/addon/https-everywhere/</a></li>
<li>Privacy badger <a href="https://addons.mozilla.org/en-US/firefox/addon/privacy-badger17/">https://addons.mozilla.org/en-US/firefox/addon/privacy-badger17/</a></li>
<li>User agent switcher <a href="https://addons.mozilla.org/en-US/firefox/addon/user-agent-string-switcher/">https://addons.mozilla.org/en-US/firefox/addon/user-agent-string-switcher/</a></li>
</ul>
<h3 id="useful-sites">Useful sites</h3>
<ul>
<li><a href="https://haveibeenpwned.com">https://haveibeenpwned.com</a></li>
<li><a href="https://tosdr.org">https://tosdr.org</a></li>
<li><a href="https://privacytools.io">https://privacytools.io</a></li>
<li><a href="https://justgetmydata.com">https://justgetmydata.com</a></li>
<li><a href="https://justdeleteme.xyz">https://justdeleteme.xyz</a></li>
<li><a href="https://accountkiller.com">https://accountkiller.com</a></li>
<li><a href="https://www.securemessagingapps.com/">https://www.securemessagingapps.com/</a></li>
</ul>
<h3 id="data-removal">Data Removal</h3>
<ul>
<li><a href="https://inteltechniques.com/data/workbook.pdf">https://inteltechniques.com/data/workbook.pdf</a></li>
<li><a href="https://webbreacher.com/2017/04/24/removing-yourself-from-the-internet/">https://webbreacher.com/2017/04/24/removing-yourself-from-the-internet/</a></li>
<li><a href="https://www.learnallthethings.net/blog/2018/1/23/opting-out-like-a-boss-the-osint-way">https://www.learnallthethings.net/blog/2018/1/23/opting-out-like-a-boss-the-osint-way</a></li>
<li><a href="https://tisiphone.net/2017/01/25/thwart-my-osint-efforts-while-binging-tv/">https://tisiphone.net/2017/01/25/thwart-my-osint-efforts-while-binging-tv/</a></li>
</ul>
<hr>
<p><img src="https://salaheldinaz.com/blog/defcon29-recon-village/img/4_hu_4abb97547415259b.webp" width="1400" height="181" alt="" loading="lazy" decoding="async"></p>
<h2 id="osint-and-the-hermit-kingdom---nick-roy">OSINT and the Hermit Kingdom - Nick Roy</h2>
<h3 id="north-korea-on-the-internet">North Korea on the internet</h3>
<ul>
<li><a href="https://bgpview.io/asn/131279">https://bgpview.io/asn/131279</a></li>
<li><a href="https://github.com/nknetobserver/nknetobserver.github.io">https://github.com/nknetobserver/nknetobserver.github.io</a></li>
<li>RedStar OS
<ul>
<li><a href="https://github.com/takeshixx/redstar-tools">https://github.com/takeshixx/redstar-tools</a></li>
<li><a href="https://c3subtitles.de/talk/501/">https://c3subtitles.de/talk/501/</a></li>
</ul>
</li>
<li>Foreign Trade of the DPRK
<a href="http://www.korean-books.com.kp/en/search/?page=periodic-trade">http://www.korean-books.com.kp/en/search/?page=periodic-trade</a></li>
<li>NK websites
<ul>
<li>dprkportal.kp</li>
<li>portal.net.kp</li>
<li>webmail.star.net.kp</li>
<li>sns.star.net.kp</li>
</ul>
</li>
</ul>
<h3 id="mentioned-tools-2">Mentioned Tools</h3>
<ul>
<li>Bellingcat tools: <a href="http://bit.ly/bcattools">http://bit.ly/bcattools</a></li>
<li>Torrent Tracking <a href="https://iknowwhatyoudownload.com">https://iknowwhatyoudownload.com</a></li>
<li>Strava HeatMap <a href="https://www.strava.com/heatmap">https://www.strava.com/heatmap</a></li>
</ul>
<h3 id="commandline-tools">Commandline tools</h3>
<ul>
<li><code>dig a example.com +short</code> &gt; IPs</li>
<li><code>whois -h whois.cymru.com x.x.x.x</code> &gt; ASN, company name</li>
</ul>
<hr>
<p><img src="https://salaheldinaz.com/blog/defcon29-recon-village/img/5_hu_9baa8fd13ed7a4fa.webp" width="1400" height="181" alt="" loading="lazy" decoding="async"></p>
<h2 id="hidden-gems-via-url-shorteners---utku-sen">Hidden Gems via URL Shorteners - Utku Sen</h2>
<h3 id="mentioned-tools-3">Mentioned Tools</h3>
<ul>
<li><a href="https://github.com/lc/gau">https://github.com/lc/gau</a></li>
<li><a href="https://github.com/OJ/gobuster">https://github.com/OJ/gobuster</a></li>
<li><a href="https://github.com/utkusen/urlhunter">https://github.com/utkusen/urlhunter</a></li>
<li><a href="https://shorteners.grayhatwarfare.com/">https://shorteners.grayhatwarfare.com/</a></li>
<li><a href="https://wiki.archiveteam.org/index.php?title=URLTeam">https://wiki.archiveteam.org/index.php?title=URLTeam</a></li>
<li><a href="https://tracker.archiveteam.org:1338/">https://tracker.archiveteam.org:1338/</a></li>
</ul>
<h3 id="commandline-tools-1">Commandline tools</h3>
<ul>
<li>Unshort URL: <code>curl https://xx.xx/xxx  --head</code></li>
</ul>
<h3 id="search-dorks">Search dorks</h3>
<ul>
<li>docs.google.com/a/CompanyName</li>
<li>docs.google.com/a/CompanyName.com</li>
<li>drive.google.com/a/CompanyName</li>
<li>drive.google.com/a/CompanyName.com</li>
<li>Includes &ldquo;trello.com&rdquo; AND &ldquo;Company Name&rdquo;</li>
<li>Include &ldquo;company.com&rdquo; AND &ldquo;admin&rdquo; OR &ldquo;private&rdquo;</li>
<li>Include &ldquo;company.com&rdquo; AND &ldquo;resetToken&rdquo;</li>
<li>Include &ldquo;company.com&rdquo; AND &ldquo;PHPSESSIONID&rdquo;</li>
<li>Include &ldquo;google.com/maps/place&rdquo; AND &ldquo;39.9,32.3&rdquo;</li>
</ul>
<hr>
<p><img src="https://salaheldinaz.com/blog/defcon29-recon-village/img/6_hu_7812d33ddc60c37a.webp" width="1400" height="181" alt="" loading="lazy" decoding="async"></p>
<h2 id="using-osint-to-combat-human-trafficking--smuggling---rae-baker">Using OSINT to Combat Human Trafficking &amp; Smuggling - Rae Baker</h2>
<ul>
<li><a href="https://www.marinetraffic.com">https://www.marinetraffic.com</a></li>
</ul>
<hr>
<p><img src="https://salaheldinaz.com/blog/defcon29-recon-village/img/7_hu_cf19b4ade72089d0.webp" width="1400" height="181" alt="" loading="lazy" decoding="async"></p>
<h2 id="hunting--smashing-trolls-on-twitter---mauro-eldritch--santiago-montaño">Hunting &amp; Smashing Trolls on Twitter - Mauro Eldritch &amp; Santiago Montaño</h2>
<h3 id="propaganda-social-media-networks">Propaganda Social Media Networks</h3>
<ul>
<li><a href="https://counter.social">https://counter.social</a></li>
<li><a href="https://www.facepopular.net/">https://www.facepopular.net/</a></li>
</ul>
<h3 id="tracking-trolls">Tracking Trolls</h3>
<ul>
<li>Tracking Trends
<ul>
<li><a href="https://getdaytrends.com/">https://getdaytrends.com/</a></li>
<li><a href="https://www.trendinalia.com">https://www.trendinalia.com</a></li>
</ul>
</li>
<li>Block Trolls
<ul>
<li>MegaBlock <a href="https://megablock.xyz/">https://megablock.xyz/</a></li>
<li>Twitter Block Chain <a href="https://chrome.google.com/webstore/detail/twitter-block-chain/dkkfampndkdnjffkleokegfnibnnjfah">https://chrome.google.com/webstore/detail/twitter-block-chain/dkkfampndkdnjffkleokegfnibnnjfah</a></li>
<li>Block together  <a href="https://twitter.com/blocktogether">https://twitter.com/blocktogether</a></li>
</ul>
</li>
<li>Venator tool: <a href="https://github.com/mauroeldritch/venator">https://github.com/mauroeldritch/venator</a></li>
</ul>
<hr>
<p><img src="https://salaheldinaz.com/blog/defcon29-recon-village/img/8_hu_d821cc384d0909e4.webp" width="1400" height="181" alt="" loading="lazy" decoding="async"></p>
<h2 id="people-hunting-a-pentesters-perspective---mishaal-khan">People Hunting, a Pentester&rsquo;s Perspective - Mishaal Khan</h2>
<h3 id="mentioned-tools-4">Mentioned Tools</h3>
<ul>
<li>Ripgrep Tool <a href="https://github.com/BurntSushi/ripgrep">https://github.com/BurntSushi/ripgrep</a></li>
<li>People search
<ul>
<li><a href="https://www.allbiz.com/">https://www.allbiz.com/</a></li>
<li><a href="https://www.advancedbackgroundchecks.com/">https://www.advancedbackgroundchecks.com/</a></li>
<li><a href="https://www.fastpeoplesearch.com/">https://www.fastpeoplesearch.com/</a></li>
<li><a href="https://thatsthem.com/">https://thatsthem.com/</a></li>
<li><a href="https://peopledatalabs.com">https://peopledatalabs.com</a></li>
</ul>
</li>
<li>Search NPI Records <a href="https://npiregistry.cms.hhs.gov/">https://npiregistry.cms.hhs.gov/</a></li>
<li>Vehicle Search <a href="https://www.vehiclehistory.com/">https://www.vehiclehistory.com/</a></li>
<li>Search Bluetooth devices <a href="https://wigle.net/">https://wigle.net/</a></li>
<li>Voter Search <a href="https://www.sec.state.ma.us/VoterRegistrationSearch/MyVoterRegStatus.aspx">https://www.sec.state.ma.us/VoterRegistrationSearch/MyVoterRegStatus.aspx</a></li>
<li>Burp suit tool <a href="https://portswigger.net/burp">https://portswigger.net/burp</a></li>
<li>Breach lookup
<ul>
<li><a href="https://haveibeenpwned.com/">https://haveibeenpwned.com/</a></li>
<li><a href="https://breachdirectory.tk/">https://breachdirectory.tk/</a></li>
</ul>
</li>
<li>Hashcat tool <a href="https://github.com/hashcat/hashcat/">https://github.com/hashcat/hashcat/</a></li>
<li>Carrier lookup <a href="https://scammerblaster.com/carrier-lookup/">https://scammerblaster.com/carrier-lookup/</a></li>
<li>Doctor search <a href="https://www.vitals.com/">https://www.vitals.com/</a></li>
<li>Classmates <a href="https://classmates.com">https://classmates.com</a></li>
<li>Instagram tool <a href="https://github.com/megadose/toutatis">https://github.com/megadose/toutatis</a></li>
<li>Holehe  - Registered Account Checking tool <a href="https://github.com/megadose/holehe">https://github.com/megadose/holehe</a></li>
<li><a href="https://socialbearing.com/">https://socialbearing.com/</a></li>
</ul>
<hr>
<p><img src="https://salaheldinaz.com/blog/defcon29-recon-village/img/9_hu_bd16cc3ff7284cf3.webp" width="1400" height="181" alt="" loading="lazy" decoding="async"></p>
<h2 id="tracking-infrastructure-with-mihari---manabu-niseki">Tracking Infrastructure with Mihari - Manabu Niseki</h2>
<h3 id="presentation">Presentation</h3>
<ul>
<li><a href="https://ninoseki.github.io/presentations/Adversary%20Infrastructure%20Tracking%20with%20Mihari.pdf">https://ninoseki.github.io/presentations/Adversary%20Infrastructure%20Tracking%20with%20Mihari.pdf</a></li>
</ul>
<h3 id="mentioned-tools-5">Mentioned Tools</h3>
<ul>
<li>MMhdan
<ul>
<li><a href="https://github.com/ninoseki/mmhdan">https://github.com/ninoseki/mmhdan</a></li>
<li><a href="https://mmhdan.herokuapp.com/">https://mmhdan.herokuapp.com/</a></li>
</ul>
</li>
<li>Mihari <a href="https://github.com/ninoseki/mihari">https://github.com/ninoseki/mihari</a></li>
<li>Active Tracking
<ul>
<li>Nmap <a href="https://nmap.org/">https://nmap.org/</a></li>
<li>Masscan <a href="https://github.com/robertdavidgraham/masscan">https://github.com/robertdavidgraham/masscan</a></li>
<li>Zmap <a href="https://github.com/zmap/zmap">https://github.com/zmap/zmap</a></li>
<li>httpx <a href="https://github.com/projectdiscovery/httpx">https://github.com/projectdiscovery/httpx</a></li>
<li>JARM <a href="https://github.com/salesforce/jarm">https://github.com/salesforce/jarm</a></li>
</ul>
</li>
<li>Passive Tracking
<ul>
<li>Internet-wide scanning
<ul>
<li>Shodan <a href="https://shodan.io">https://shodan.io</a></li>
<li>Censys <a href="https://censys.io/">https://censys.io/</a></li>
<li>BinaryEdge <a href="https://www.binaryedge.io/">https://www.binaryedge.io/</a></li>
<li>Onyphe <a href="https://www.onyphe.io/">https://www.onyphe.io/</a></li>
<li>Spyse <a href="https://spyse.com/">https://spyse.com/</a></li>
<li>ZoomEye <a href="https://www.zoomeye.org/">https://www.zoomeye.org/</a></li>
</ul>
</li>
<li>Passive DNS services
<ul>
<li>VirusTotal <a href="https://www.virustotal.com/">https://www.virustotal.com/</a></li>
<li>PassiveTotal (RiskIQ) <a href="https://community.riskiq.com/home">https://community.riskiq.com/home</a></li>
<li>SecurityTrails <a href="https://securitytrails.com/">https://securitytrails.com/</a></li>
<li>DomainTools <a href="https://domaintools.com">https://domaintools.com</a></li>
</ul>
</li>
<li>CT logs
<ul>
<li>Crt.sh <a href="https://Crt.sh">https://Crt.sh</a></li>
<li>Censys <a href="https://censys.io/">https://censys.io/</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<p><img src="https://salaheldinaz.com/blog/defcon29-recon-village/img/10_hu_24effbe2034e8d03.webp" width="1400" height="181" alt="" loading="lazy" decoding="async"></p>
<h2 id="bug-hunters-methodology---tushar-verma">Bug Hunter&rsquo;s Methodology - Tushar Verma</h2>
<ul>
<li>ReconFTW <a href="https://github.com/six2dez/reconftw">https://github.com/six2dez/reconftw</a></li>
<li>Bheem <a href="https://github.com/harsh-bothra/Bheem">https://github.com/harsh-bothra/Bheem</a></li>
<li>Osmedeus <a href="https://github.com/j3ssie/Osmedeus">https://github.com/j3ssie/Osmedeus</a></li>
</ul>
<hr>
<p><img src="https://salaheldinaz.com/blog/defcon29-recon-village/img/11_hu_b004e3322678cf30.webp" width="1400" height="181" alt="" loading="lazy" decoding="async"></p>
<h2 id="creating-a-social-threat-score---masterchen">Creating a Social Threat Score - Masterchen</h2>
<ul>
<li><a href="https://github.com/MasterChenb0x/SocialThreatScore">https://github.com/MasterChenb0x/SocialThreatScore</a></li>
<li><a href="https://us-cert.cisa.gov/CISA-National-Cyber-Incident-Scoring-System">https://us-cert.cisa.gov/CISA-National-Cyber-Incident-Scoring-System</a></li>
<li><a href="https://merics.org/en/report/chinas-social-credit-system-2021-fragmentation-towards-integration">https://merics.org/en/report/chinas-social-credit-system-2021-fragmentation-towards-integration</a></li>
<li><a href="https://www.myfico.com/credit-education/whats-in-my-credit-report">https://www.myfico.com/credit-education/whats-in-my-credit-report</a></li>
</ul>
<hr>
<p><img src="https://salaheldinaz.com/blog/defcon29-recon-village/img/12_hu_92f3147e04d5bf05.webp" width="1400" height="181" alt="" loading="lazy" decoding="async"></p>
<h2 id="build-cloud-based-recon-automation---ryan-elkins">Build Cloud-Based Recon Automation - Ryan Elkins</h2>
<ul>
<li>Brevityrecon <a href="https://github.com/brevityinmotion/brevityrecon">https://github.com/brevityinmotion/brevityrecon</a></li>
<li>Blog <a href="https://www.brevityinmotion.com/automated-cloud-based-recon/">https://www.brevityinmotion.com/automated-cloud-based-recon/</a></li>
<li>Arkadiyt <a href="https://github.com/arkadiyt">https://github.com/arkadiyt</a></li>
</ul>
<hr>
<p><img src="https://salaheldinaz.com/blog/defcon29-recon-village/img/13_hu_851c1a55bd15458d.webp" width="1400" height="181" alt="" loading="lazy" decoding="async"></p>
<h2 id="uncovering-apt-attacks---ladislav-baco">Uncovering APT Attacks - Ladislav Baco</h2>
<h3 id="malware-samples">Malware Samples</h3>
<ul>
<li><a href="https://vx-underground.org/">https://vx-underground.org/</a></li>
<li><a href="https://bazaar.abuse.ch/">https://bazaar.abuse.ch/</a></li>
</ul>
<h3 id="malware-feed">Malware Feed</h3>
<ul>
<li>Hybrid Analysis <a href="https://www.hybrid-analysis.com/">https://www.hybrid-analysis.com/</a></li>
<li>Any.Run <a href="https://any.run/">https://any.run/</a></li>
<li>Tria.ge <a href="https://tria.ge/">https://tria.ge/</a></li>
<li>VirusTotal <a href="https://www.virustotal.com/">https://www.virustotal.com/</a></li>
</ul>
<h3 id="threat-intel-platform--tools">Threat Intel Platform / Tools</h3>
<ul>
<li>Yeti <a href="https://yeti-platform.github.io/">https://yeti-platform.github.io/</a></li>
<li>Tweettico <a href="http://tweettioc.com/">http://tweettioc.com/</a></li>
<li>Twint <a href="https://github.com/twintproject/twint">https://github.com/twintproject/twint</a></li>
</ul>
<h3 id="advanced-search">Advanced Search</h3>
<ul>
<li>Shodan <a href="https://shodan.io">https://shodan.io</a></li>
<li>Censys <a href="https://Censys.io">https://Censys.io</a></li>
<li>Webarchive <a href="https://archive.org/web/">https://archive.org/web/</a></li>
<li>Search by hash on Shodan <code>http.favicon.hash</code></li>
</ul>
<hr>
<p><img src="https://salaheldinaz.com/blog/defcon29-recon-village/img/14_hu_f98c46dfaa54113f.webp" width="1400" height="181" alt="" loading="lazy" decoding="async"></p>
<h2 id="domainsquatting-with-different-tlds---anthony-kava">Domainsquatting with Different TLD&rsquo;s - Anthony Kava</h2>
<ul>
<li><a href="https://impostor.domains/">https://impostor.domains/</a></li>
</ul>
<hr>
<p><img src="https://salaheldinaz.com/blog/defcon29-recon-village/img/15_hu_b5a76f159749e624.webp" width="1400" height="181" alt="" loading="lazy" decoding="async"></p>
<h2 id="osint-for-workers---kala-kinyon">OSINT for Workers - Kala Kinyon</h2>
<h3 id="mentioned-tools-6">Mentioned Tools</h3>
<ul>
<li>Thatsthem <a href="https://Thatsthem.com">https://Thatsthem.com</a></li>
<li>GeoCreepy <a href="https://geocreepy.com">https://geocreepy.com</a></li>
<li>SunCalc <a href="https://SunCalc.net">https://SunCalc.net</a></li>
<li>OsintFramework <a href="https://osintframework.com/">https://osintframework.com/</a></li>
<li>Wiki of Social Media Monitoring Solutions <a href="http://wiki.kenburbary.com/">http://wiki.kenburbary.com/</a></li>
</ul>
]]></content:encoded></item><item><title>Where the kids hang out | NCPTF 2021 Talk</title><link>https://salaheldinaz.com/blog/ncptf2021/</link><guid isPermaLink="true">https://salaheldinaz.com/blog/ncptf2021/</guid><pubDate>Mon, 28 Jun 2021 00:00:00 +0000</pubDate><category>osint</category><category>2021</category><category>conference</category><category>talk</category><category>ncptf</category><category>child protection</category><category>project</category><content:encoded><![CDATA[<h1 id="where-the-kids-hang-out">Where the kids hang out</h1>
<p>My talk at NCPTF 2021 conference.</p>
<p>This talk is about alternative social media networks/apps/websites that kids are interacting with these days, especially Gen Z and Alpha. In this talk, we will learn how we can find them, what data are being shared online, what to look for when we search from an investigation perspective, and more.</p>
<h2 id="-slides">🗂 Slides</h2>
<p>You can download slides here:
<a href="https://github.com/qomplx/ncptf2021/raw/main/Where%20the%20kids%20hangout%20-%20Salaheldinaz.pdf">https://github.com/qomplx/ncptf2021/raw/main/Where%20the%20kids%20hangout%20-%20Salaheldinaz.pdf</a></p>
<h2 id="-resources">📟 Resources</h2>
<h3 id="understanding-generations">Understanding Generations</h3>
<ul>
<li><a href="https://www.kasasa.com/articles/generations/gen-x-gen-y-gen-z">https://www.kasasa.com/articles/generations/gen-x-gen-y-gen-z</a></li>
<li><a href="https://www.verywellfamily.com/a-teen-slang-dictionary-2610994">https://www.verywellfamily.com/a-teen-slang-dictionary-2610994</a></li>
</ul>
<h3 id="apps-collections">Apps collections</h3>
<ul>
<li><a href="https://www.ovrdrv.com/knowledge/social-media-map/">https://www.ovrdrv.com/knowledge/social-media-map/</a></li>
<li><a href="https://conversationprism.com/">https://conversationprism.com/</a></li>
</ul>
<h3 id="finding-the-unknown">Finding the unknown</h3>
<ul>
<li><a href="https://play.google.com/store/apps/top">https://play.google.com/store/apps/top</a></li>
<li><a href="https://appgallery.huawei.com/">https://appgallery.huawei.com/</a></li>
<li><a href="https://www.appannie.com/en/apps/ios/top/">https://www.appannie.com/en/apps/ios/top/</a></li>
<li><a href="https://appfigures.com/top-apps/">https://appfigures.com/top-apps/</a></li>
<li><a href="https://alternativeto.net/">https://alternativeto.net/</a></li>
</ul>
<h3 id="games-communities">Games Communities</h3>
<ul>
<li><a href="https://drive.google.com/file/d/1xZ8n5PiEviB70aOLDtKZ2GrduKY8GWEq/view">https://drive.google.com/file/d/1xZ8n5PiEviB70aOLDtKZ2GrduKY8GWEq/view</a></li>
</ul>
<h3 id="social-media-privacy-research">Social Media Privacy research</h3>
<ul>
<li><a href="https://en.panoptykon.org/articles/three-layers-your-digital-profile">https://en.panoptykon.org/articles/three-layers-your-digital-profile</a></li>
</ul>
<h3 id="flowcharts">Flowcharts</h3>
<ul>
<li><a href="https://github.com/sinwindie/OSINT">https://github.com/sinwindie/OSINT</a></li>
</ul>
]]></content:encoded></item><item><title>STATE of OSINT</title><link>https://salaheldinaz.com/blog/stateofosint/</link><guid isPermaLink="true">https://salaheldinaz.com/blog/stateofosint/</guid><pubDate>Wed, 10 Mar 2021 00:00:00 +0000</pubDate><description>Investigation Trends, Challenges, Methodologies &amp; Strategies development - Forecasting OSINT landscape changing</description><category>osint</category><category>2021</category><category>trends</category><category>Investigation</category><category>Strategies</category><category>project</category><content:encoded><![CDATA[<h1 id="state-of-osint">STATE of OSINT</h1>
<p>Open Source Intelligence (OSINT) has grown significantly in recent years. In a world awash with data, more and more
organizations are starting to recognize the benefits of using openly available information to better understand the
world.</p>
<p>Government agencies, investigative journalists, financial institutions, law enforcement, and other agencies are
increasingly making use of open information to gain business insights, expose wrongdoing, and tell compelling stories.
At QOMPLX our own OSINT Team works to gather and analyze open-source information to help our clients better understand
and reduce their own cybersecurity risk.</p>
<p>In the first of what we hope will become an annual series, we have asked leading OSINT practitioners from a range of
backgrounds to discuss what they felt were the biggest changes and emerging trends over the last 12 months.</p>
<h2 id="project-website">Project Website</h2>
<blockquote>
<p><a href="https://stateofosint.com">https://stateofosint.com</a></p>
</blockquote>
<h2 id="project-team">Project Team</h2>
<p><a href="https://stateofosint.com/interviews/frank-castle/"><img src="https://stateofosint.com/img/titles/frank_title.png" alt="Frank-Castle" loading="lazy" decoding="async"></a></p>
<p><a href="https://stateofosint.com/interviews/salaheldinaz/"><img src="https://stateofosint.com/img/titles/salaheldinaz_title.png" alt="Salaheldinaz" loading="lazy" decoding="async"></a></p>
<p><a href="https://stateofosint.com/interviews/steven-harris/"><img src="https://stateofosint.com/img/titles/steven_title.png" alt="Steven-Harris" loading="lazy" decoding="async"></a></p>
]]></content:encoded></item><item><title>Wigle to Google Earth</title><link>https://salaheldinaz.com/blog/wigle-to-google-earth/</link><guid isPermaLink="true">https://salaheldinaz.com/blog/wigle-to-google-earth/</guid><pubDate>Sun, 25 Oct 2020 00:00:00 +0000</pubDate><description>How to show Wigle search results in Google Earth</description><category>wigle</category><category>google-earth</category><category>geoint</category><category>script</category><category>osint</category><content:encoded><![CDATA[<blockquote>
<p>To learn about Wigle basics, check this <a href="https://osintcurio.us/2019/01/15/tracking-all-the-wifi-things/amp/">OSINTCurious blog post</a></p>
</blockquote>
<h2 id="getting-the-wigle-data-in-json-format">Getting the Wigle data in JSON format</h2>
<p>We will start by using Wigle API to download the data:</p>
<ol>
<li>Go to <a href="https://wigle.net/account">https://wigle.net/account</a> and log to your account:</li>
</ol>
<p><img src="https://salaheldinaz.com/blog/wigle-to-google-earth/img/wigle_g_1_hu_8458b55214164060.webp" width="1600" height="860" alt="" loading="lazy" decoding="async"></p>
<ol start="2">
<li>Click show <code>my tokens</code></li>
</ol>
<p><img src="https://salaheldinaz.com/blog/wigle-to-google-earth/img/wigle_g_3_hu_13367141ca5f5a78.webp" width="1600" height="678" alt="" loading="lazy" decoding="async"></p>
<ol start="3">
<li>In new tab open <a href="https://api.wigle.net/swagger">https://api.wigle.net/swagger</a></li>
</ol>
<p><img src="https://salaheldinaz.com/blog/wigle-to-google-earth/img/wigle_g_5_hu_f74f0cf0a3a508b0.webp" width="1600" height="911" alt="" loading="lazy" decoding="async"></p>
<ol start="4">
<li>
<p>Click Authorize button on the right</p>
</li>
<li>
<p>Copy the API Name and API Token from first tab into the username and password inputs (respectively) in the Basic Authentication dialog then click Authorize.</p>
</li>
</ol>
<p><img src="https://salaheldinaz.com/blog/wigle-to-google-earth/img/wigle_g_6_hu_bab076fbfa392bd7.webp" width="1600" height="1313" alt="" loading="lazy" decoding="async"></p>
<ol start="6">
<li>Scroll down until you find &ldquo;Network search and information&rdquo; tools and click it</li>
</ol>
<p><img src="https://salaheldinaz.com/blog/wigle-to-google-earth/img/wigle_g_7_hu_f375caa483200aa3.webp" width="1600" height="296" alt="" loading="lazy" decoding="async"></p>
<ol start="7">
<li>Select <code>/api/v2/network/search</code> then Click <code>Try it out</code> button:</li>
</ol>
<p><img src="https://salaheldinaz.com/blog/wigle-to-google-earth/img/wigle_g_8_hu_1dd9d7b0e547ca56.webp" width="1600" height="351" alt="" loading="lazy" decoding="async"></p>
<ol start="8">
<li>
<p>Fill the search details:</p>
<p>You can use <a href="https://wigle.net/mapsearch">https://wigle.net/mapsearch</a> to find search and get specific address <code>longitude</code> and <code>Latitude</code></p>
</li>
</ol>
<p><img src="https://salaheldinaz.com/blog/wigle-to-google-earth/img/wigle_g_9_hu_c4a9fe768a043d4f.webp" width="1600" height="1043" alt="" loading="lazy" decoding="async"></p>
<ol start="9">
<li>
<p>Click Execute</p>
<p>The result per request is limited: Defaults to 25 for COMMAPI, 100 for site. Bounded at 1000 for COMMAPI, 100 for site.</p>
<p>You can use <code>searchAfter</code> parameter to download multiple result pages.</p>
</li>
</ol>
<p><img src="https://salaheldinaz.com/blog/wigle-to-google-earth/img/wigle_g_14_hu_fb5dc69ead88740c.webp" width="1600" height="1026" alt="" loading="lazy" decoding="async"></p>
<ol start="10">
<li>Click Download</li>
</ol>
<p>Now You have the result in JSON format file and we need to convert it to KML/KMZ to use it in Google earth.</p>
<hr>
<h2 id="kml">KML</h2>
<p>KML is an acronym for Keyhole Markup Language developed by Google and Keyhole, Inc. KMZ is the zipped version of a KML file. <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p>KML and KMZ are file extensions used in Google applications, specifically Google Earth and Google Maps. <sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<p>The code below shows a minimal KML file:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-xml" data-lang="xml"><span class="line"><span class="cl"><span class="cp">&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&lt;kml</span> <span class="na">xmlns=</span><span class="s">&#34;http://www.opengis.net/kml/2.2&#34;</span><span class="nt">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&lt;Document&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&lt;Placemark&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&lt;name&gt;</span>New York City<span class="nt">&lt;/name&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&lt;description&gt;</span>New York City<span class="nt">&lt;/description&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&lt;Point&gt;</span>
</span></span><span class="line"><span class="cl">          <span class="nt">&lt;coordinates&gt;</span>-74.006393,40.714172,0<span class="nt">&lt;/coordinates&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&lt;/Point&gt;</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&lt;/Placemark&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&lt;/Document&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&lt;/kml&gt;</span>
</span></span></code></pre></div><hr>
<h2 id="magic">Magic</h2>
<p>To convert JSON to KML, we will convert each parameter as following:</p>
<ul>
<li><code>ssid</code> &gt; <code>name</code></li>
<li><code>trilat</code>, <code>trilong</code> &gt; <code>coordinates</code></li>
<li>All the remaining details &gt; <code>description</code></li>
</ul>
<p>Also we can add shared style to change the default icon for the placemark. I usually use <a href="https://www.iconfinder.com/">https://www.iconfinder.com/</a> for icons as it&rsquo;s easy to just copy icon URL .</p>
<p><img src="https://salaheldinaz.com/blog/wigle-to-google-earth/img/wigle_g_18_hu_a124573ad591e7f.webp" width="1600" height="863" alt="" loading="lazy" decoding="async"></p>
<p>Example of shared style code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-xml" data-lang="xml"><span class="line"><span class="cl">    <span class="nt">&lt;Style</span> <span class="na">id=</span><span class="s">&#34;SharedStyle&#34;</span><span class="nt">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&lt;IconStyle&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&lt;Icon&gt;</span>
</span></span><span class="line"><span class="cl">                <span class="nt">&lt;href&gt;</span>http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png<span class="nt">&lt;/href&gt;</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&lt;/Icon&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&lt;/IconStyle&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&lt;/Style&gt;</span>
</span></span></code></pre></div><h3 id="method-1-">Method 1 :</h3>
<ol>
<li>Convert JSON to CSV using this tool: <a href="http://convertcsv.com/json-to-csv.htm">http://convertcsv.com/json-to-csv.htm</a></li>
</ol>
<p><img src="https://salaheldinaz.com/blog/wigle-to-google-earth/img/wigle_g_15_hu_a82877225f5088b.webp" width="1600" height="911" alt="" loading="lazy" decoding="async"></p>
<ol start="2">
<li>
<p>Copy or download the result (CSV) to use it in the next tool.</p>
</li>
<li>
<p>Convert CSV to KMl using this tool: <a href="http://convertcsv.com/csv-to-kml.htm">http://convertcsv.com/csv-to-kml.htm</a></p>
<p>Enter fields number as following:</p>
</li>
</ol>
<p><img src="https://salaheldinaz.com/blog/wigle-to-google-earth/img/wigle_g_16_hu_ce62d0104a5a7abb.webp" width="1600" height="911" alt="" loading="lazy" decoding="async"></p>
<h3 id="method-2">Method 2:</h3>
<p>Using python module <code>simplekml</code>, I wrote a script to convert Wigle JSON to KML :</p>
<blockquote>
<p><a href="https://github.com/salaheldinaz/wiglejson2kml">https://github.com/salaheldinaz/wiglejson2kml</a></p>
</blockquote>
<p><img src="https://salaheldinaz.com/blog/wigle-to-google-earth/img/wigle_g_social.jpg" width="1280" height="640" alt="" loading="lazy" decoding="async"></p>
<p><img src="https://salaheldinaz.com/blog/wigle-to-google-earth/img/wigle_g_22_hu_c40e17e1dbc36450.webp" width="1600" height="1283" alt="" loading="lazy" decoding="async"> <img src="https://salaheldinaz.com/blog/wigle-to-google-earth/img/wigle_g_19_hu_4c486fe233eecffc.webp" width="1600" height="1275" alt="" loading="lazy" decoding="async"></p>
<p>Enjoy!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p><a href="https://en.wikipedia.org/wiki/Keyhole_Markup_Language">https://en.wikipedia.org/wiki/Keyhole_Markup_Language</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p><a href="https://developers.google.com/kml/documentation">https://developers.google.com/kml/documentation</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded></item><item><title>KringleCon 2 (2019)</title><link>https://salaheldinaz.com/blog/kringlecon2/</link><guid isPermaLink="true">https://salaheldinaz.com/blog/kringlecon2/</guid><pubDate>Mon, 13 Jan 2020 00:00:00 +0000</pubDate><description>Detailed technical write-up for KRINGLECON 2 CTF</description><category>2019</category><category>kringlecon</category><category>cyber</category><category>ctf</category><category>writeup</category><category>project</category><content:encoded><![CDATA[<p>To read the writeup please visit</p>
<blockquote>
<p><a href="https://kringlecon2.salaheldinaz.com/">https://kringlecon2.salaheldinaz.com/</a></p>
</blockquote>
<hr>
<h2 id="-map">🗺 Map</h2>
<p>This a preview of a very high quality map for ELF University.</p>
<h3 id="to-zoom-and-check-the-details-please-download-the-full-quality-click-here">To zoom and check the details please download the full quality. <a href="https://kringlecon2.salaheldinaz.com/images/kringlecon-map.png">click here</a>:</h3>
<p><img src="https://salaheldinaz.com/blog/kringlecon2/map_hu_308c84d228fb26a6.webp" width="1515" height="1600" alt="Map" loading="lazy" decoding="async"></p>
<hr>
<h2 id="-objectives">🏵 Objectives</h2>
<p>Check the objectives in your badge, You will have the 6 objectives then unlock new objective by talking to the elves you find in the university:</p>
<table>
	<thead>
			<tr>
					<th>Objective</th>
					<th>Type</th>
					<th>Location</th>
					<th style="text-align: center">Tools</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/objectives/objective0"><strong>0/ Talk to Santa in the Quad</strong></a></td>
					<td>Talk</td>
					<td>The Quad</td>
					<td style="text-align: center"></td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/objectives/objective1"><strong>1/ Find the Turtle Doves</strong></a></td>
					<td>Explore</td>
					<td>The student union</td>
					<td style="text-align: center"></td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/objectives/objective2"><strong>2/ Unredact Threatening Document</strong></a></td>
					<td>Explore</td>
					<td>The Quad</td>
					<td style="text-align: center"></td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/objectives/objective3"><strong>3/ Windows Log Analysis</strong>: Evaluate Attack Outcome</a></td>
					<td>Logs Analysis</td>
					<td><a href="https://downloads.elfu.org/Security.evtx.zip">The event log data</a></td>
					<td style="text-align: center">DeepBlueCLI</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/objectives/objective4"><strong>4/ Windows Log Analysis</strong>: Determine Attacker Technique</a></td>
					<td>Logs Analysis</td>
					<td><a href="https://downloads.elfu.org/sysmon-data.json.zip">The normalized Sysmon logs</a></td>
					<td style="text-align: center">EQL</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/objectives/objective5"><strong>5/ Windows Log Analysis</strong>: Determine Compromised System</a></td>
					<td>Logs Analysis</td>
					<td><a href="https://downloads.elfu.org/elfu-zeeklogs.zip">Zeek logs</a></td>
					<td style="text-align: center">RITA</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/objectives/objective6"><strong>6/ Spunk</strong></a></td>
					<td>SOC</td>
					<td><a href="https://splunk.elfu.org/">Splnuk Server</a></td>
					<td style="text-align: center">Splunk</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/objectives/objective7"><strong>7/ Get Access To The Steam Tunnels</strong></a></td>
					<td>Multi</td>
					<td>Minty&rsquo;s dorm room</td>
					<td style="text-align: center">Multi</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/objectives/objective8"><strong>8/ Bypassing the Frido Sleigh CAPTEHA</strong></a></td>
					<td>Machine Learning</td>
					<td><a href="https://fridosleigh.com">fridosleigh</a></td>
					<td style="text-align: center">Python</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/objectives/objective9"><strong>9/ Retrieve Scraps of Paper from Server</strong></a></td>
					<td>SQL Injection</td>
					<td><a href="https://studentportal.elfu.org/">Student Portal</a></td>
					<td style="text-align: center">Sqlmap</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/objectives/objective10"><strong>10/ Recover Cleartext Document</strong></a></td>
					<td>Reverse Engineering</td>
					<td><a href="https://downloads.elfu.org/elfscrow.exe">elfscrow app</a></td>
					<td style="text-align: center">IDA</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/objectives/objective11"><strong>11/ Open the Sleigh Shop Door</strong></a></td>
					<td>Web Dev</td>
					<td><a href="https://crate.elfu.org/">Carte</a></td>
					<td style="text-align: center">Web Dev</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/objectives/objective12"><strong>12/ Filter Out Poisoned Sources of Weather Data</strong></a></td>
					<td>Logs Analysis</td>
					<td><a href="https://srf.elfu.org/">SLEIGH ROUTE FINDER API</a></td>
					<td style="text-align: center">jq</td>
			</tr>
	</tbody>
</table>
<hr>
<h2 id="helping-the-elves-challenges">🎗Helping the elves Challenges</h2>
<p>As we walk around, we can find various challenges, and as we talk to the elves standing near them, we get some hints.</p>
<table>
	<thead>
			<tr>
					<th>Challenge</th>
					<th style="text-align: center">Type</th>
					<th style="text-align: center">Direct Url</th>
					<th>Elf</th>
					<th>Location</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/helptheelves/challenge1"><strong>1 Escape Ed</strong></a></td>
					<td style="text-align: center">Ed editor</td>
					<td style="text-align: center"><a href="https://docker2019.kringlecon.com/?challenge=edescape&amp;id=ef59b992-558d-4580-b5a0-9cfa0d19f1df">Link</a></td>
					<td>Bushy Evergreen</td>
					<td>The train station</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/helptheelves/challenge2"><strong>2 Linux Path</strong></a></td>
					<td style="text-align: center">Linux</td>
					<td style="text-align: center"><a href="https://docker2019.kringlecon.com/?challenge=path&amp;id=ef59b992-558d-4580-b5a0-9cfa0d19f1df">Link</a></td>
					<td>SugarPlum Mary</td>
					<td>The Hermey Hall</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/helptheelves/challeng3"><strong>3 Xmas laser cheers</strong></a></td>
					<td style="text-align: center">Powershell</td>
					<td style="text-align: center"><a href="https://docker2019.kringlecon.com/?challenge=powershell&amp;id=ef59b992-558d-4580-b5a0-9cfa0d19f1df">Link</a></td>
					<td>Sparkle Redberry</td>
					<td>The Laboratory</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/helptheelves/challenge4"><strong>4 Splunk - The training questions</strong></a></td>
					<td style="text-align: center">SOC - Splunk</td>
					<td style="text-align: center"><a href="https://splunk.elfu.org">Link</a></td>
					<td>Professor Banas</td>
					<td>The Laboratory</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/helptheelves/challenge5"><strong>5 Mongo Pilfer</strong></a></td>
					<td style="text-align: center">MongoDB</td>
					<td style="text-align: center"><a href="https://docker2019.kringlecon.com/?challenge=mongo&amp;id=ef59b992-558d-4580-b5a0-9cfa0d19f1df">Link</a></td>
					<td>Holly Evergreen</td>
					<td>Netwars Room</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/helptheelves/challenge6"><strong>6 Nyanshell</strong></a></td>
					<td style="text-align: center">Linux Shell</td>
					<td style="text-align: center"><a href="https://docker2019.kringlecon.com/?challenge=nyanshell&amp;id=ef59b992-558d-4580-b5a0-9cfa0d19f1df">Link</a></td>
					<td>Alabaster Snowball</td>
					<td>The Speaker UNpreparedness Room</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/helptheelves/challenge7"><strong>7 Frosty Keypad</strong></a></td>
					<td style="text-align: center">Keypad</td>
					<td style="text-align: center"><a href="https://docker2019.kringlecon.com/?challenge=keypad&amp;id=ef59b992-558d-4580-b5a0-9cfa0d19f1df">Link</a></td>
					<td>Tangle Coalbox</td>
					<td>The Quad</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/helptheelves/challenge8"><strong>8 Holiday Hack trail</strong></a></td>
					<td style="text-align: center">Web Pentest</td>
					<td style="text-align: center"><a href="https://trail.elfu.org/">Link</a></td>
					<td>Minty Candycane</td>
					<td>The Dorm</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/helptheelves/challenge9"><strong>9 Get Access To The Steam Tunnels</strong></a></td>
					<td style="text-align: center">Key Bitting</td>
					<td style="text-align: center"><a href="https://key.elfu.org/">Link1</a> <a href="https://thisisit.elfu.org/">Link2</a></td>
					<td>Krampus</td>
					<td>Minty&rsquo;s Room</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/helptheelves/challenge10"><strong>10 Graylog</strong></a></td>
					<td style="text-align: center">Log Analysis</td>
					<td style="text-align: center"><a href="https://graylog.elfu.org/">Link</a></td>
					<td>Pepper Minstix</td>
					<td>The Dorm</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/helptheelves/challenge11"><strong>11Smart Braces</strong></a></td>
					<td style="text-align: center">Iptables</td>
					<td style="text-align: center"><a href="https://docker2019.kringlecon.com/?challenge=iptables&amp;id=ef59b992-558d-4580-b5a0-9cfa0d19f1df">link</a></td>
					<td>Kent Tinseltooth</td>
					<td>Student Union</td>
			</tr>
			<tr>
					<td><a href="https://kringlecon2.salaheldinaz.com/helptheelves/challenge12"><strong>12 Zeek JSON Analysis</strong></a></td>
					<td style="text-align: center">Log Analysis</td>
					<td style="text-align: center"><a href="https://docker2019.kringlecon.com/?challenge=jq&amp;id=ef59b992-558d-4580-b5a0-9cfa0d19f1df">Link</a></td>
					<td>Wunorse Openslae</td>
					<td>Sleigh Shop</td>
			</tr>
	</tbody>
</table>
<hr>
<h2 id="resources">Resources</h2>
<p>Virtual Machines I used:</p>
<ul>
<li>
<p><a href="https://www.sans.org/slingshot-vmware-linux/download">Slingshot</a> from SANS.</p>
</li>
<li>
<p><a href="https://developer.microsoft.com/en-us/windows/downloads/virtual-machines">Windows 10 VM</a></p>
</li>
</ul>
<p>Recording terminal:</p>
<ul>
<li><a href="https://asciinema.org/">asciinema</a></li>
</ul>
<hr>
]]></content:encoded></item><item><title>Finding tweets by source or device</title><link>https://salaheldinaz.com/blog/finding-tweets-by-source-or-device/</link><guid isPermaLink="true">https://salaheldinaz.com/blog/finding-tweets-by-source-or-device/</guid><pubDate>Mon, 22 Jul 2019 00:00:00 +0000</pubDate><description>How to use [source:] operator to search for tweets by specific device or source</description><category>twitter</category><category>socint</category><category>socmint</category><category>osint</category><content:encoded><![CDATA[<p>Twitter reactivated &ldquo;tweet source label&rdquo; feature in Dec 2018 :
<img src="https://salaheldinaz.com/blog/finding-tweets-by-source-or-device/img/twitter-search-operator-4_hu_24d4f1a9f44a4d5d.webp" width="758" height="776" alt="https://twitter.com/jack/status/1075896805882118144/photo/1" loading="lazy" decoding="async"></p>
<p>I was looking at advanced Twitter search page because I needed to search for tweets posted by a specific source.
Also, I found this description on Twitter help without any details on how to use it in search:
<img src="https://salaheldinaz.com/blog/finding-tweets-by-source-or-device/img/twitter-search-operator-2_hu_40d3f0cd5e12b53e.webp" width="600" height="633" alt="https://help.twitter.com/en/using-twitter/how-to-tweet#source-labels" loading="lazy" decoding="async"></p>
<p>Also, a link to list of common third-party sources: <a href="https://partners.twitter.com/en/find-a-partner.html">https://partners.twitter.com/en/find-a-partner.html</a></p>
<p>Then I found <a href="https://twitter.com/search-home">Twitter search home page</a> with a list of operators can be used in search including tweet source.</p>
<p><img src="https://salaheldinaz.com/blog/finding-tweets-by-source-or-device/img/twitter-search-home_hu_5fddd358418dbf1f.webp" width="1292" height="567" alt="" loading="lazy" decoding="async"></p>
<p><img src="https://salaheldinaz.com/blog/finding-tweets-by-source-or-device/img/twitter-search-operator-1_hu_f3b31d0ffc861350.webp" width="835" height="944" alt="" loading="lazy" decoding="async"></p>
<hr>
<h2 id="searching-by-tweet-source-label">Searching by tweet source label</h2>
<p>To search for tweets by a specific source, add source: to your search keywords</p>
<pre tabindex="0"><code>news source:TwitterFeed Search for tweets containing news and entered via TwitterFeed
</code></pre><p>To exclude a source, add <code>-</code> before <code>source</code>:</p>
<pre tabindex="0"><code>news -source:TwitterFeed Search for tweets containing news and not entered via TwitterFeed
</code></pre><p>To reveal tweet source on a desktop browser (web), add <code>m.</code> in URL before <code>twitter.com</code> :</p>
<pre tabindex="0"><code>https://m.twitter.com/jack/status/1075896805882118144
</code></pre><hr>
<h2 id="list-of-tested-sources">List of tested sources</h2>
<p>I started testing &amp; searching random tweets for sources :</p>
<h3 id="devices">Devices:</h3>
<ul>
<li>iPhone &gt; source:&ldquo;Twitter for iPhone&rdquo;</li>
<li>iPhone* &gt; source:iOS (used to capture all Tweets sent from within iOS7)</li>
<li>Android &gt; source:&ldquo;Twitter for Android&rdquo;</li>
<li>iPad &gt; source:&ldquo;Twitter for iPad&rdquo;</li>
<li>Mac &gt; source:&ldquo;Twitter for Mac&rdquo;</li>
<li>Windows Phone &gt; source:&ldquo;Twitter for Windows Phone&rdquo;</li>
</ul>
<h3 id="twitter-apps-">Twitter Apps :</h3>
<ul>
<li>Twitter Ads &gt; source:&ldquo;Twitter Ads Composer&rdquo;</li>
<li>Tweetdeck &gt; source:Tweetdeck</li>
<li>Twitter.com &gt; source:web (the Twitter web)</li>
<li>Twitter.com &gt; source:&ldquo;Twitter Web Client&rdquo;</li>
<li>Twitter.com &gt; source:&ldquo;Twitter Web App&rdquo;</li>
</ul>
<h3 id="third-party-apps-">Third-party Apps :</h3>
<ul>
<li>Hootsuite &gt; source:Hootsuite</li>
<li>Seesmic &gt; source:seesmic</li>
<li>Buffer &gt; source:buffer</li>
<li>IFTTT &gt; source:IFTTT</li>
<li>SocialFlow &gt; source:SocialFlow</li>
<li>Epsilon &gt; source:Epsilon</li>
<li>Instagram &gt; source:Instagram</li>
<li>Facebook &gt; source:Facebook</li>
<li>Echofon &gt; source:Echofon</li>
</ul>
<h3 id="unknown-sources-">Unknown sources :</h3>
<p>These labels are resulting in unrecognized sources</p>
<ul>
<li>source:Microsoft</li>
<li>source:iPhone</li>
<li>source:Android</li>
<li>source:iPad</li>
<li>source:Mac</li>
<li>source:Linux</li>
<li>source:apple</li>
</ul>
<hr>
<h2 id="tools-to-analysis-profile-to-find-sources">Tools to Analysis Profile to find sources</h2>
<p>If you want to Analysis sources from one account you can use tools like:</p>
<ul>
<li><a href="https://accountanalysis.lucahammer.com">https://accountanalysis.lucahammer.com</a></li>
<li><a href="https://foller.me">https://foller.me</a></li>
</ul>
<p><img src="https://salaheldinaz.com/blog/finding-tweets-by-source-or-device/img/twitter-search-operator-3_hu_c9a20115f9eaecd5.webp" width="756" height="484" alt="" loading="lazy" decoding="async"></p>
<hr>
<h2 id="manipulating-the-source-not-tested">Manipulating the source [Not Tested]</h2>
<p>If you are interested in manipulating the source you can use Tweepy API but this will required a twitter developer account.</p>
<p><img src="https://salaheldinaz.com/blog/finding-tweets-by-source-or-device/img/twitter-search-operator-5_hu_2407c02fbace6430.webp" width="608" height="678" alt="https://twitter.com/sexybeesht/status/1097073715467206656" loading="lazy" decoding="async"></p>
<hr>
<h2 id="is-it-valuable-">Is it valuable ?</h2>
<p>I was able to use tweet source label in my case to find how my target used his twitter account, he was using Facebook which led me to try to find his Facebook account by searching Facebook using the same words from his tweet .</p>
<h2 id="sources">Sources:</h2>
<ul>
<li><a href="https://www.youtube.com/watch?v=cZIso9uqNls">https://www.youtube.com/watch?v=cZIso9uqNls</a></li>
<li><a href="https://www.cnet.com/how-to/use-twitters-search-operators-to-find-specific-tweets/">https://www.cnet.com/how-to/use-twitters-search-operators-to-find-specific-tweets/</a></li>
<li><a href="http://thesocialchic.com/2013/10/01/how-to-master-twitter-search-searching-for-tweets-by-device/">http://thesocialchic.com/2013/10/01/how-to-master-twitter-search-searching-for-tweets-by-device/</a></li>
</ul>
]]></content:encoded></item><item><title>Cyber Quests Spring 2019 | write-up [3]</title><link>https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/3/</link><guid isPermaLink="true">https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/3/</guid><pubDate>Thu, 20 Jun 2019 00:00:00 +0000</pubDate><description>Detailed technical write-up for Cyber Quests Spring 2019 CTF</description><category>cyber</category><category>wireshark</category><category>network</category><category>ctf</category><category>log</category><content:encoded><![CDATA[<p>🕴️ CTF Website : <a href="https://uscc.cyberquests.org/">https://uscc.cyberquests.org/</a></p>
<p>This Cyber Quest covers a wide range of topics on networking, including
firewalls, routers, Wi-Fi, and packet analysis.</p>
<p>Tools that you may need include
<a href="https://www.wireshark.org/download.html">Wireshark</a>,
<a href="https://www.aircrack-ng.org/">aircrack-ng</a>, and
<a href="https://www.sno.phy.queensu.ca/~phil/exiftool/">exiftool</a> (all of which
are included in many security-focused Linux distributions, including
<a href="https://www.kali.org/downloads/">Kali Linux</a>).</p>
<p>Some questions refer to files contained within this ZIP file : <a href="https://github.com/salaheldinaz/Cyber-Quests-Spring-2019-write-up/tree/master/challenge-files">🔗 Spring 2019 Cyber Quest Resources</a>.
Let&rsquo;s start the fun.</p>
<hr>
<h2 id="the-following-questions-based-on--wifipcap-">The following questions based on <a href="https://github.com/salaheldinaz/Cyber-Quests-Spring-2019-write-up/tree/master/challenge-files">🔗 Wifi.pcap</a> :</h2>
<h3 id="27-you-are-part-of-a-wireless-penetration-test-and-have-acquired-the--wifipcapfile">2️⃣7️⃣ You are part of a wireless penetration test and have acquired the <a href="https://github.com/salaheldinaz/Cyber-Quests-Spring-2019-write-up/tree/master/challenge-files">🔗 WiFi.pcap</a>file.</h3>
<p>What is the BSSID of the WAP (colon delimited)?</p>
<p>✅ Answer:</p>
<p>We will use aircrack-ng to analysis the file and get BSSID of the WAP.</p>
<ol>
<li>Install Aircrack-ng\</li>
</ol>
<p><a href="https://www.aircrack-ng.org/doku.php?id=install_aircrack">https://www.aircrack-ng.org/doku.php?id=install_aircrack</a></p>
<ol start="2">
<li>
<p>Open terminal and run aircrack-ng command as following :</p>
<p>aircrack-ng WiFi.pcap</p>
</li>
</ol>
<pre tabindex="0"><code>$ aircrack-ng WiFi.pcap
Opening WiFi.pcapplease wait...
Read 53337 packets.

   #  BSSID              ESSID                     Encryption

   1  24:F5:A2:11:F7:6A  Home_Net                  WEP (0 IVs)

Choosing first network as target.

Opening WiFi.pcapplease wait...
Read 53337 packets.

1 potential targets

Attack will be restarted every 5000 captured ivs.
Starting PTW attack with 15273 ivs.


                                   Aircrack-ng 1.5.2 


                      [00:00:03] Tested 2792 keys (got 15273 IVs)

   KB    depth   byte(vote)
    0    1/  5   6B(21760) 0B(19968) CF(19968) B5(19712) 98(19200) E8(19200) 
    1    0/  2   F7(23808) 17(21760) 19(20224) BB(19968) 10(19968) 9F(19712) 
    2    1/  6   F7(21760) 60(20992) 1B(20736) 98(20480) 0E(20224) 91(19456) 
    3    7/ 11   3F(19456) 1A(19200) C3(19200) E6(19200) 91(18944) 6B(18944) 
    4    3/  5   A6(20224) 94(19968) C2(19456) BE(19456) 8D(19200) 2A(19200) 

                         KEY FOUND! [ 6B:F7:F7:3F:FC ] 
    Decrypted correctly: 100%
</code></pre><p>The BSSID of the WAP  <strong><code>24:F5:A2:11:F7:6A</code></strong></p>
<hr>
<h3 id="28-analyze-the-wifipcap-file-how-many-seconds-long-is-the-packet-capture-from-beginning-to-end-round-to-the-nearest-second">2️⃣8️⃣ Analyze the WiFi.pcap file.** How many seconds long is the packet capture, from beginning to end (round to the nearest second)?</h3>
<p>Select one:</p>
<ul>
<li>462</li>
<li>595</li>
<li>126</li>
<li>745</li>
</ul>
<p>✅ Answer:</p>
<ol>
<li>
<p>Open the file in Wireshark.</p>
</li>
<li>
<p>Select from upper menu <code>Statistics</code>  <code>Capture File Properties</code> :</p>
</li>
</ol>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/3/img/cyberquest-28-img-1.jpg" width="1024" height="328" alt="cyberquest-28-img-1.jpg" loading="lazy" decoding="async"></p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/3/img/cyberquest-28-img-2.jpg" width="1024" height="830" alt="cyberquest-28-img-2.jpg" loading="lazy" decoding="async"></p>
<p>Capture length is  <strong>595</strong> sec</p>
<hr>
<h3 id="29-what-is-the-wep-key-of-the-wap-without-colons-">2️⃣9️⃣ What is the WEP key of the WAP** (without colons) ?</h3>
<p>✅ Answer:</p>
<p>From our Q27 using <code>aircrack-ng</code> tool:<br>
WEP key  <strong><code>6BF7F73FFC</code></strong></p>
<hr>
<h3 id="30-use-the-wep-key-to-decrypt-the-traffic-in-wifipcap">3️⃣0️⃣ Use the WEP key to decrypt the traffic in** <a href="https://github.com/salaheldinaz/Cyber-Quests-Spring-2019-write-up/tree/master/challenge-files">🔗WiFi.pcap</a>.</h3>
<p>What is the session <code>_id</code> assigned to the administrator of the network  device?</p>
<p>✅ Answer:</p>
<ol>
<li>
<p>Open file in Wireshark.</p>
</li>
<li>
<p>To add WEP Key to decrypt the traffic, From upper menu select
<code>Wireshark</code> <code>Preferences</code>. You should see a window that looks like
this:</p>
</li>
</ol>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/3/img/cyberquest-29-img-1.jpg" width="1200" height="393" alt="cyberquest-29-img-1.jpg" loading="lazy" decoding="async"></p>
<p>Select <code>Protocols</code>  <code>IEEE 802.11</code>   <code>Decryption keys [edit]</code>\</p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/3/img/cyberquest-29-img-2.jpg" width="1200" height="741" alt="cyberquest-29-img-2.jpg" loading="lazy" decoding="async"></p>
<p>then add the WEP key from previous answer without colons <code>6BF7F73FFC</code></p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/3/img/cyberquest-29-img-3.jpg" width="1200" height="697" alt="cyberquest-29-img-3.jpg" loading="lazy" decoding="async"></p>
<p>​03) Let&rsquo;s search for all packets contains <code>session_id</code> and word <code>admin</code>
using this filter:</p>
<pre><code>tcp contains &quot;session_id&quot; &amp;&amp; tcp contains &quot;admin&quot;
</code></pre>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/3/img/cyberquest-29-img-4.jpg" width="1200" height="104" alt="cyberquest-29-img-4.jpg" loading="lazy" decoding="async"></p>
<p>Notice the packet info <code>POST /login.cgi HTTP/1.1</code> which is a login
packet.</p>
<p>​04) Let&rsquo;s examine this packet, go to packet details tab  expand
<code>HTML Form URL Encoded: application/x-www-form-urlencoded</code> , you will
find admin login details:</p>
<p><code>Form item: &quot;http_username&quot; = &quot;admin&quot;</code></p>
<p><code>Form item: &quot;http_passwd&quot; = &quot;ba41d75ebd1339f3a420da1db2c48dc2&quot;</code></p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/3/img/cyberquest-29-img-5.jpg" width="1200" height="253" alt="cyberquest-29-img-5.jpg" loading="lazy" decoding="async"></p>
<p>expand <code>Hypertext Transfer Protocol</code></p>
<p>You will find that admin granted a <code>session_id</code> after successful login
with <code>session_id=f29e8307513709b98b88b8e029bb7f53</code></p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/3/img/cyberquest-29-img-6.jpg" width="1200" height="248" alt="cyberquest-29-img-6.jpg" loading="lazy" decoding="async"></p>
<p>Let&rsquo;s check the rest of the packages, try this filter to view POST
method packets:</p>
<pre><code>http.request.method == &quot;POST&quot;
</code></pre>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/3/img/cyberquest-29-img-7.jpg" width="1200" height="830" alt="cyberquest-29-img-7.jpg" loading="lazy" decoding="async"></p>
<p>You will find admin applying some configuration to the device with same
session id, to view packets data right click on packet  <code>follow</code>
<code>TCP Stream</code></p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/3/img/cyberquest-29-img-8.jpg" width="1200" height="716" alt="cyberquest-29-img-8.jpg" loading="lazy" decoding="async"></p>
<p>You will find admin applying some configuration with same session</p>
<p>Session<code>_id</code> assigned to the administrator of the network device
<strong><code>f29e8307513709b98b88b8e029bb7f53</code></strong></p>
<p>References :<br>
<a href="https://wiki.wireshark.org/HowToDecrypt802.11">https://wiki.wireshark.org/HowToDecrypt802.11</a></p>
<hr>
]]></content:encoded></item><item><title>Cyber Quests Spring 2019 | write-up [2]</title><link>https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/2/</link><guid isPermaLink="true">https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/2/</guid><pubDate>Thu, 20 Jun 2019 00:00:00 +0000</pubDate><description>Detailed technical write-up for Cyber Quests Spring 2019 CTF</description><category>cyber</category><category>wireshark</category><category>network</category><category>ctf</category><category>log</category><content:encoded><![CDATA[<p>🕴️ CTF Website : <a href="https://uscc.cyberquests.org/">https://uscc.cyberquests.org/</a></p>
<p>This Cyber Quest covers a wide range of topics on networking, including
firewalls, routers, Wi-Fi, and packet analysis.</p>
<p>Tools that you may need include
<a href="https://www.wireshark.org/download.html">Wireshark</a>,
<a href="https://www.aircrack-ng.org/">aircrack-ng</a>, and
<a href="https://www.sno.phy.queensu.ca/~phil/exiftool/">exiftool</a> (all of which
are included in many security-focused Linux distributions, including
<a href="https://www.kali.org/downloads/">Kali Linux</a>).</p>
<p>Some questions refer to files contained within this ZIP file : <a href="https://github.com/salaheldinaz/Cyber-Quests-Spring-2019-write-up/tree/master/challenge-files">🔗 Spring 2019 Cyber Quest Resources</a>.
Let&rsquo;s start the fun.</p>
<hr>
<h2 id="the-following-questions-based-on--attackpcap-">The following questions based on <a href="https://github.com/salaheldinaz/Cyber-Quests-Spring-2019-write-up/tree/master/challenge-files">🔗 attack.pcap</a> :</h2>
<h3 id="22-analyze-the--attackpcap-file">2️⃣2️⃣ Analyze the <a href="https://github.com/salaheldinaz/Cyber-Quests-Spring-2019-write-up/tree/master/challenge-files">🔗 attack.pcap</a> file.</h3>
<p>What is most likely occurring?</p>
<ul>
<li>An SMB brute force attack</li>
<li>An SSH brute force attack</li>
<li>An SSH Man-in-the-Middle attack</li>
<li>An SMB Replay attack</li>
</ul>
<p>✅ Answer:</p>
<ol>
<li>Let&rsquo;s begin with understanding of each attack:</li>
</ol>
<p>In general a brute force attack is an attempt to crack a password or
username or find a hidden web page, or find the key used to encrypt a
message, using a trial and error approach and hoping, eventually, to
guess correctly.</p>
<ul>
<li>
<p>An SMB brute force attack<br>
Server Message Block (SMB) is the Internet standard protocol Windows
uses to share files, printers, and serial ports. In a networked
environment, servers make file systems and resources available to
clients. Clients make SMB requests for resources, and servers make
SMB responses in what&rsquo;s described as a client server,
request-response protocol.</p>
</li>
<li>
<p>An SSH brute force attack<br>
Secure Shell (SSH) is a cryptographic network protocol for operating
network services securely over an unsecured network. Typical
applications include remote command-line login and remote command
execution, but any network service can be secured with SSH.</p>
</li>
<li>
<p>An SSH Man-in-the-Middle attack<br>
A man-in-the-middle attack (MITM) is an attack where the attacker
secretly relays and possibly alters the communications between two
parties who believe they are directly communicating with each other.</p>
</li>
<li>
<p>An SMB <del>Replay</del> Relay attack<br>
SMB Relay Attack is a type of attack which relies on NTLM Version 2
authentication. it&rsquo;s a Man-In-The-Middle attack in which a malicious
user on the local network poisons network traffic to trick the
target machine/user into thinking that it is the authentication
server.</p>
</li>
</ul>
<ol start="2">
<li>open
<a href="https://github.com/salaheldinaz/Cyber-Quests-Spring-2019-write-up/tree/master/challenge-files">attack.pcap</a>
file in <a href="https://www.wireshark.org/download.html">Wireshark</a> :</li>
</ol>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/2/img/cyberquest-22b-img-1.jpg" width="1200" height="704" alt="cyberquest-22b-img-1.jpg" loading="lazy" decoding="async"></p>
<ol start="3">
<li>Look over the sequence of packet transfer between source and
destination captured through Wireshark.<br>
The attacker <code>10.1.1.165</code> do ports scanning for victim <code>10.1.1.133</code> :</li>
</ol>
<ul>
<li>Closed ports :<br>
Source sent <code>SYN</code> packet on the specific port then if the port is
closed then the destination will reply by sending <code>RST</code> packet.this
scan for close ports.\</li>
</ul>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/2/img/cyberquest-22b-img-2.jpg" width="1200" height="219" alt="cyberquest-22b-img-2.jpg" loading="lazy" decoding="async"></p>
<ul>
<li>Open ports:
<ul>
<li>Source sent <code>SYN</code> packets to the destination</li>
<li>Destination sent <code>SYN</code>, <code>ACK</code> packets to the source (An <code>SYN</code>,
<code>ACK</code> indicates the port is listening (open))</li>
<li>Source sent <code>RST</code> packets to the destination\</li>
</ul>
</li>
</ul>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/2/img/cyberquest-22b-img-3.jpg" width="1200" height="163" alt="cyberquest-22b-img-3.jpg" loading="lazy" decoding="async"></p>
<p><br>
The attacker found port <code>445</code> is open.\</p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/2/img/cyberquest-22b-img-4.jpg" width="1200" height="253" alt="cyberquest-22b-img-4.jpg" loading="lazy" decoding="async"></p>
<blockquote>
<p>According to Microsoft port <code>445</code> is the microsoft-ds (NetBios helper)
port and also used for ( SMB Fax Service - SMB Print Spooler - SMB
Server - SMB Remote Procedure Call Locator - SMB Distributed File
System - SMB Net Logon)</p>
</blockquote>
<ol start="4">
<li>Using filter <code>smb2</code> , We can see that brute-force attempts have
been performed by the hacker :</li>
</ol>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/2/img/cyberquest-22b-img-5.jpg" width="1200" height="687" alt="cyberquest-22b-img-5.jpg" loading="lazy" decoding="async"></p>
<p>The attacker has tried the user <code>KgHZQMzV</code> but is granted a
<code>logon failure (STATUS_LOGON_FAILURE).</code></p>
<p>After that we can see that the user <code>larry</code> has been attempted, but a
logon failure has occurred as well <code>STATUS_LOGON_FAILURE</code>.</p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/2/img/cyberquest-22b-img-6.jpg" width="1200" height="116" alt="cyberquest-22b-img-6.jpg" loading="lazy" decoding="async"></p>
<p>But he continue brute-force attempts until he get in and try different
locations at same domain : <code>Tree: \\10.1.1.133\admin$</code>,
<code>Tree: \\10.1.1.133\IPC$</code> but failed <code>ERROR (STATUS_ACCESS_DENIED).</code></p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/2/img/cyberquest-22b-img-7.jpg" width="1200" height="488" alt="cyberquest-22b-img-7.jpg" loading="lazy" decoding="async"></p>
<p>Then he trying different domain <code>Domain: oqdwzfFX</code></p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/2/img/cyberquest-22b-img-9.jpg" width="1200" height="201" alt="cyberquest-22b-img-9.jpg" loading="lazy" decoding="async"></p>
<p>Until he get access at <code>Domain: LARRY-PC</code></p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/2/img/cyberquest-22b-img-10.jpg" width="1200" height="529" alt="cyberquest-22b-img-10.jpg" loading="lazy" decoding="async"></p>
<p>Attack type An SMB brute force attack</p>
<p>References : <br>
<a href="https://www.1337pwn.com/how-to-detect-nmap-smb-brute-force-attack-using-wireshark/">https://www.1337pwn.com/how-to-detect-nmap-smb-brute-force-attack-using-wireshark/</a><br>
<a href="https://intrinium.com/smb-relay-attack-tutorial/">https://intrinium.com/smb-relay-attack-tutorial/</a> <br>
<a href="https://www.youtube.com/watch?v=ctLVMi1_zBc">https://www.youtube.com/watch?v=ctLVMi1_zBc</a> <br>
<a href="https://www.hackingarticles.in/understanding-nmap-scan-wireshark/">https://www.hackingarticles.in/understanding-nmap-scan-wireshark/</a></p>
<hr>
<h3 id="23-whose-account-is-being-targeted-in-the-aforementioned-attack">2️⃣3️⃣ Whose account is being targeted in the aforementioned attack?</h3>
<ul>
<li>Larry</li>
<li>John</li>
<li>Michael</li>
<li>Sarah</li>
</ul>
<p>✅ Answer:</p>
<p>From previous answer we know the account targeted is  <strong>Larry</strong></p>
<hr>
<h3 id="24-according-to-the-traffic-in--attackpcap">2️⃣4️⃣ According to the traffic in <a href="https://github.com/salaheldinaz/Cyber-Quests-Spring-2019-write-up/tree/master/challenge-files">🔗 attack.pcap</a>,</h3>
<p>which ports are open on 10.1.1.133?</p>
<ul>
<li>135, 139, 443, 2103, 5360</li>
<li>21, 22, 53, 139, 2103</li>
<li>135, 139, 445, 2103, 5357</li>
<li>21, 22, 53, 80, 445</li>
</ul>
<p>✅ Answer:</p>
<ol>
<li>
<p>Open
<a href="https://github.com/salaheldinaz/Cyber-Quests-Spring-2019-write-up/tree/master/challenge-files">attack.pcap</a>
file in <a href="https://www.wireshark.org/download.html">Wireshark</a> .</p>
</li>
<li>
<p>As we learned from Q22 that destination send a <code>SYN</code>, <code>ACK</code> packets
to the source which indicates the port is listening <code>open</code></p>
</li>
</ol>
<p>We need to filter our packets based on this concept, we will use the
following filter in Wireshark :</p>
<pre><code>(tcp.flags==0x12) and not tcp.analysis.initial_rtt and ip.src==10.1.1.133
</code></pre>
<p><code>tcp.flags==0x12</code> looks for SYN/ACK packets (you could also use
<code>tcp.flags.syn==1</code> and <code>tcp.flags.ack==1</code> ).</p>
<p>The trick is using <code>not tcp.analysis.initial_rtt</code>, because that checks
if Wireshark calculated the initial round trip time for the conversation</p>
<ul>
<li>and that&rsquo;s something it only does if the handshake is complete. So if
the field is missing, and the SYN/ACK was seen, you have a half open
connection (assuming the SYN is there).</li>
</ul>
<p>of course <code>ip.src==10.1.1.133</code> is to set this host as source of
packet.</p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/2/img/cyberquest-24-img-1.jpg" width="1200" height="619" alt="cyberquest-24-img-1.jpg" loading="lazy" decoding="async"></p>
<p>You can go to upper menu and select <code>statistics</code>  <code>Conversations</code> for
better view and select limit to display filter which we applied.</p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/2/img/cyberquest-24-img-2.jpg" width="700" height="296" alt="cyberquest-24-img-2.jpg" loading="lazy" decoding="async"></p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/2/img/cyberquest-24-img-3.jpg" width="1024" height="662" alt="cyberquest-24-img-3.jpg" loading="lazy" decoding="async"></p>
<p>So the open ports from options above on host <code>10.1.1.133</code> are  <strong>135,
139, 445, 2103, 5357</strong></p>
<p>References :<br>
<a href="https://www.youtube.com/watch?v=Zi1aaEJg5YI">https://www.youtube.com/watch?v=Zi1aaEJg5YI</a> <br>
<a href="https://osqa-ask.wireshark.org/questions/60995/how-do-i-filter-tcp-connection-with-syn-and-syn-ack-without-ack-response">https://osqa-ask.wireshark.org/questions/60995/how-do-i-filter-tcp-connection-with-syn-and-syn-ack-without-ack-response</a> \</p>
<hr>
<h3 id="25-continue-to-analyze--attackpcap">2️⃣5️⃣ Continue to analyze <a href="https://github.com/salaheldinaz/Cyber-Quests-Spring-2019-write-up/tree/master/challenge-files">🔗 attack.pcap</a><strong>.</strong></h3>
<p>Who is the author of the exfiltrated file?</p>
<ul>
<li>Michael</li>
<li>Sarah</li>
<li>John</li>
<li>Larry</li>
</ul>
<p>✅ Answer:</p>
<p>If you Examine the packets you will find the hacker downloaded this
file: <code>larry\Documents\files\file.jpg</code></p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/2/img/cyberquest-25-img-1.jpg" width="1200" height="140" alt="cyberquest-25-img-1.jpg" loading="lazy" decoding="async"></p>
<p>To extract the file:</p>
<ul>
<li>Select this packet by click on it .</li>
<li>Go to upper menu and select <code>File</code>  <code>Extract Objects</code>  <code>SMB...</code>\</li>
</ul>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/2/img/cyberquest-25-img-2.jpg" width="1200" height="351" alt="cyberquest-25-img-2.jpg" loading="lazy" decoding="async"></p>
<ul>
<li>Select the file then click <code>save</code> .\</li>
</ul>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/2/img/cyberquest-25-img-3.jpg" width="800" height="432" alt="cyberquest-25-img-3.jpg" loading="lazy" decoding="async"></p>
<p>Nice photo :)</p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/2/img/cyberquest-25-img-4.jpg" width="580" height="387" alt="cyberquest-25-img-4.jpg" loading="lazy" decoding="async"></p>
<p>Now let&rsquo;s open the file with <code>exiftool</code> to examine the metadata:</p>
<p>Note: ExifTool does not need to be installed to run. Just download and
extract either the full Perl distribution on Mac/Linux, or the Windows
EXE version on Windows, and run it directly.</p>
<p>Open terminal and run the following command after change
<code>path/to/file.jpg</code> to where you saved the file</p>
<pre><code>exiftool /path/to/file.jpg &gt; data.txt
</code></pre>
<p><code>data.txt</code> where we will save the file metadata, you can run the command
without extract the data to file.</p>
<pre tabindex="0"><code>ExifTool Version Number         : 11.30
File Name                       : file.jpg
Directory                       : .
File Size                       : 41 kB
File Modification Date/Time     : 2019:06:22 21:31:01+03:00
File Access Date/Time           : 2019:06:22 21:43:43+03:00
File Inode Change Date/Time     : 2019:06:22 21:41:54+03:00
File Permissions                : rw-r--r--
File Type                       : JPEG
File Type Extension             : jpg
MIME Type                       : image/jpeg
JFIF Version                    : 1.02
Resolution Unit                 : inches
X Resolution                    : 96
Y Resolution                    : 96
DCT Encode Version              : 100
APP14 Flags 0                   : (none)
APP14 Flags 1                   : (none)
Color Transform                 : YCbCr
Exif Byte Order                 : Big-endian (Motorola, MM)
Artist                          : Sarah
Date/Time Original              : 2018:05:29 10:46:42
Create Date                     : 2018:05:29 10:46:42
Sub Sec Time Original           : 46
Sub Sec Time Digitized          : 46
XP Title                        : New York City skyline
XP Author                       : Sarah
Padding                         : (Binary data 2108 bytes, use -b option to extract)
Quality                         : 60%
About                           : uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b
Creator                         : Sarah
Rating                          : 5
Warning                         : [minor] Fixed incorrect URI for xmlns:MicrosoftPhoto
Rating Percent                  : 99
Title                           : New York City skyline
Description                     : New York City skyline
Image Width                     : 580
Image Height                    : 387
Encoding Process                : Baseline DCT, Huffman coding
Bits Per Sample                 : 8
Color Components                : 3
Y Cb Cr Sub Sampling            : YCbCr4:4:4 (1 1)
Image Size                      : 580x387
Megapixels                      : 0.224
Create Date                     : 2018:05:29 10:46:42.46
Date/Time Original              : 2018:05:29 10:46:42.46
</code></pre><p>The file author is  Sarah</p>
<p>References :<br>
<a href="https://www.youtube.com/watch?v=1rc88RyvCnE">https://www.youtube.com/watch?v=1rc88RyvCnE</a> <br>
<a href="https://www.sno.phy.queensu.ca/~phil/exiftool/install.html">https://www.sno.phy.queensu.ca/~phil/exiftool/install.html</a> \</p>
<hr>
<h3 id="26-what-is-the-title-of-the-exfiltrated-file">2️⃣6️⃣ What is the title of the exfiltrated file?</h3>
<ul>
<li>San Francisco Golden Gate Bridge</li>
<li>New York City skyline</li>
<li>Chicago Cloud Gate</li>
<li>Boston Fenway Park</li>
</ul>
<p>✅ Answer:</p>
<p>From extracted metadata the file title is &gt; New York City skyline</p>
<hr>
]]></content:encoded></item><item><title>Cyber Quests Spring 2019 | write-up [1]</title><link>https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/1/</link><guid isPermaLink="true">https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/1/</guid><pubDate>Thu, 20 Jun 2019 00:00:00 +0000</pubDate><description>Detailed technical write-up for Cyber Quests Spring 2019 CTF</description><category>cyber</category><category>wireshark</category><category>network</category><category>ctf</category><category>log</category><content:encoded><![CDATA[<p>🕴️ CTF Website : <a href="https://uscc.cyberquests.org/">https://uscc.cyberquests.org/</a></p>
<p>This Cyber Quest covers a wide range of topics on networking, including
firewalls, routers, Wi-Fi, and packet analysis.</p>
<p>Tools that you may need include
<a href="https://www.wireshark.org/download.html">Wireshark</a>,
<a href="https://www.aircrack-ng.org/">aircrack-ng</a>, and
<a href="https://www.sno.phy.queensu.ca/~phil/exiftool/">exiftool</a> (all of which
are included in many security-focused Linux distributions, including
<a href="https://www.kali.org/downloads/">Kali Linux</a>).</p>
<p>Some questions refer to files contained within this ZIP file : <a href="https://github.com/salaheldinaz/Cyber-Quests-Spring-2019-write-up/tree/master/challenge-files">🔗 Spring 2019 Cyber Quest Resources</a>.
Let&rsquo;s start the fun.</p>
<hr>
<h2 id="the-following-questions-focus-on-general-networking">The following questions focus on General Networking:</h2>
<h3 id="1-you-are-analyzing-files-created-under-rfc-5424">1️⃣ You are analyzing files created under RFC 5424.</h3>
<p>What is the Priority value of a mail system message (Facility=2) with a Severity of
Error (Severity=3)?</p>
<ul>
<li>19</li>
<li>12</li>
<li>35</li>
<li>5</li>
</ul>
<p>✅ Answer : The Priority value is calculated by first multiplying the Facility number by 8 and then adding the numerical value of the Severity.</p>
<pre><code>(2*8) + 3 = 19
</code></pre>
<p>Reference : <a href="https://tools.ietf.org/html/rfc5424#page-11">https://tools.ietf.org/html/rfc5424#page-11</a></p>
<hr>
<h3 id="2-a-junior-network-administrator-in-your-organization-has-alerted-you-to-a-possible-security-incident">2️⃣ A junior network administrator in your organization has alerted you to a possible security incident.</h3>
<p>She shows you the below query she performed.</p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/1/img/cyberquest-router_log.png" width="974" height="256" alt="cyberquest-router-log.png" loading="lazy" decoding="async"></p>
<p>What has occurred?</p>
<ul>
<li>An attacker accessed NetBIOS on 192.168.2.1</li>
<li>An attacker probed NetBIOS on 172.16.7.94</li>
<li>The router ACL denied packets destined for ephemeral ports</li>
<li>The router ACL dropped packets destined for port 137</li>
</ul>
<p>✅ Answer :</p>
<p>The query she performed
<code>Router#show logging | include 172.16.7.94. *\-\&gt;.*\(137\)</code> is to
identify logs for which the source IP address was <code>172.16.1.92</code> and the
destination port was <code>137</code> .</p>
<p>The router logs show the following:</p>
<ul>
<li>Connection
<ul>
<li>Source IP address : <code>172.16.7.94</code></li>
<li>Source port : <code>17587</code>, <code>585564</code>, <code>17755</code></li>
<li>Destination IP address : <code>192.168.2.1</code></li>
<li>Destination port : <code>137</code></li>
</ul>
</li>
<li>Log message Identifier <code>%SEC-6-IPACCESSLOGP</code> which is identify a
packet matching the log criteria for the given access list has been
detected (TCP or UDP).</li>
<li>ACL : <code>list 155</code></li>
<li>ACL action: <code>denied tcp</code></li>
</ul>
<p><strong>The router ACL dropped packets destined for port 137</strong></p>
<p>References: <br>
<a href="https://www.cisco.com/c/en/us/about/security-center/access-control-list-logging.html">https://www.cisco.com/c/en/us/about/security-center/access-control-list-logging.html</a> <br>
<a href="https://www.cisco.com/c/en/us/about/security-center/identify-incidents-via-syslog.html">https://www.cisco.com/c/en/us/about/security-center/identify-incidents-via-syslog.html</a></p>
<hr>
<h3 id="3-your-organization-is-highly-dependent-on-the-confidentially-integrity-and-availability-of-a-database-used-by-several-financial-core-operations">3️⃣ Your organization is highly dependent on the confidentially, integrity and availability of a database used by several financial core operations.</h3>
<p>Which of the following defenses will provide the best protection to the database from attacks such as SQL injection or Application bypass?</p>
<ul>
<li>Network Firewall with Stateful Packet Inspection</li>
<li>Packet Filtering Host Firewall</li>
<li>Application Firewall</li>
<li>Virtual Private Network (VPN)</li>
</ul>
<p>✅ Answer :</p>
<p>First let&rsquo;s understand each option:</p>
<ul>
<li>
<p>Network Firewall with Stateful Packet Inspection :
Inspect each packet individually, without considering the trends of
the data you&rsquo;re receiving, and they also consider the connection
states of streams of data. Stateful firewalls will collect a series
of packets before it determines their connection state, and then
compares those findings to the firewall rules, rather than applying
the rules to each individual packet of data.</p>
</li>
<li>
<p>Packet Filtering Host Firewall:
Analyzes network traffic at the transport protocol layer. Each IP
network packet is examined to see if it matches one of a set of
rules defining what data flows are allowed. The rules determine
whether communication is allowed based upon the information
contained within the Internet and transport layer headers and the
direction that the packet is headed ( any combination of source IP
address, destination IP address, source port, or destination port.)</p>
</li>
<li>
<p>Application Firewall:
Generally do everything that stateful firewalls do, and they also
analyze the actual data content of the packets, not just the
headers. Application firewalls allow you to set firewall rules for
individual applications.The application firewall is typically built
to control all network traffic on any <a href="https://en.wikipedia.org/wiki/OSI_model">OSI layer</a> up to the
<a href="https://en.wikipedia.org/wiki/OSI_model#Layer_7:_application_layer">application layer</a>.</p>
</li>
<li>
<p>Virtual Private Network (VPN): A virtual private network (VPN)
extends a <a href="https://en.wikipedia.org/wiki/Private_network">private network</a> across a
public network, and enables users to send and receive data across
shared or public networks as if their computing devices were
directly connected to the private network. Encryption is a common
though not an inherent part of a VPN connection.</p>
</li>
</ul>
<p>So we need application layer protocol inspection to perform a deep
packet inspection of traffic that transits the firewall to mitigate SQL
attacks &amp; Application bypass <strong>Application Firewall.</strong></p>
<p>References :<br>
<a href="https://www.alienvault.com/blogs/security-essentials/explain-how-firewalls-work-to-me">https://www.alienvault.com/blogs/security-essentials/explain-how-firewalls-work-to-me</a> <br>
<a href="https://www.sciencedirect.com/topics/computer-science/packet-filtering-firewall">https://www.sciencedirect.com/topics/computer-science/packet-filtering-firewall</a> <br>
<a href="https://www.owasp.org/index.php/Web_Application_Firewall">https://www.owasp.org/index.php/Web_Application_Firewall</a> <br>
<a href="https://en.wikipedia.org/wiki/Virtual_private_network">https://en.wikipedia.org/wiki/Virtual_private_network</a> <br>
<a href="https://en.wikipedia.org/wiki/Stateful_firewall">https://en.wikipedia.org/wiki/Stateful_firewall</a> <br>
<a href="https://en.wikipedia.org/wiki/Application_firewall">https://en.wikipedia.org/wiki/Application_firewall</a></p>
<hr>
<h3 id="4-you-are-configuring-wireless-equipment-at-a-customer-location">4️⃣ You are configuring wireless equipment at a customer location.</h3>
<p>Which of the following protocols will provide the most security for managing access to the devices? (Select all that apply)</p>
<ul>
<li>Secure Shell</li>
<li>Telnet</li>
<li>SNMP-Secure</li>
<li>HTTP</li>
<li>HTTPS</li>
<li>SNMPv3</li>
</ul>
<p>✅ Answer :</p>
<p>First let&rsquo;s understand each option:</p>
<ul>
<li>
<p>Secure Shell<br>
The SSH protocol (also referred to as Secure Shell) is a method for
secure remote login from one computer to another. It provides
several alternative options for strong authentication, and it
protects the communications security and integrity with strong
encryption.</p>
</li>
<li>
<p>Telnet<br>
A network protocol that allows a user on one computer to log into
another computer that is part of the same network.</p>
<ul>
<li>Telnet, by default, does not encrypt any data sent over the
connection (including passwords), and so it is often feasible to
eavesdrop on the communications and use the password later for
malicious purposes; anybody who has access to a router, switch,
hub or gateway located on the network between the two hosts
where Telnet is being used can intercept the packets passing by
and obtain login, password and whatever else is typed with a
packet analyzer.</li>
<li>Most implementations of Telnet have no authentication that would
ensure communication is carried out between the two desired
<a href="https://en.wikipedia.org/wiki/Server_(computing)">hosts</a> and
not intercepted in the middle.</li>
<li>Several vulnerabilities have been discovered over the years in
commonly used Telnet daemons.<br>
Experts in computer security, such as SANS Institute, recommend
that the use of Telnet for remote logins should be discontinued
under all normal circumstances, for the above reasons.</li>
</ul>
</li>
<li>
<p>SNMP-Secure<br>
I didn&rsquo;t find any term or protocol with this name.</p>
</li>
<li>
<p>HTTP<br>
The Hypertext Transfer Protocol (HTTP) is a protocol which allows
the fetching of resources. No Data Encryption Implemented. As an
“application layer protocol”, HTTP remains focused on presenting the
information, but cares less about the way this information travels
from one place to another. Unfortunately, this means that HTTP can
be intercepted and potentially altered, making both the information
and the information receiver vulnerable.</p>
</li>
<li>
<p>HTTPS:
Hypertext Transfer Protocol Secure (HTTPS) is an extension of the
Hypertext Transfer Protocol (HTTP). It is used for secure
communication over a computer network. In HTTPS, the communication
protocol is encrypted using Transport Layer Security (TLS), or,
formerly, its predecessor, Secure Sockets Layer (SSL).</p>
</li>
<li>
<p>SNMPv3 :
Simple Network Management Protocol (SNMP) is an Internet Standard
protocol for collecting and organizing information about managed
devices on IP networks and for modifying that information to change
device behavior. SNMPv3 provides security with authentication and
privacy, and its administration offers logical contexts, view-based
access control, and remote configuration.</p>
</li>
</ul>
<p>we will use this protocols  <strong>Secure Shell, HTTPS, SNMPv3</strong> to provide
the most security for managing access to the devices.</p>
<p>References : <br>
<a href="https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol">https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol</a> <br>
<a href="http://www.snmp.com/snmpv3/snmpv3_intro.shtml">http://www.snmp.com/snmpv3/snmpv3_intro.shtml</a> <br>
<a href="https://www.globalsign.com/en/blog/the-difference-between-http-and-https/">https://www.globalsign.com/en/blog/the-difference-between-http-and-https/</a> <br>
<a href="https://en.wikipedia.org/wiki/Telnet">https://en.wikipedia.org/wiki/Telnet</a> <br>
<a href="https://www.ssh.com/ssh/protocol/">https://www.ssh.com/ssh/protocol/</a></p>
<hr>
<h3 id="5-you-are-investigating-multiple-complaints-of-intermittent-wireless-signal-at-several-locations-within-your-organization">5️⃣ You are investigating multiple complaints of intermittent wireless signal at several locations within your organization.</h3>
<p>The network team validates that the access point is transmitting at 2 mW, which is too low for the footprint of the organization. You recommend that the signal strength be increased by 9dBm. What should the new  transmit power be?</p>
<ul>
<li>16 mW</li>
<li>6 mW</li>
<li>12 mW</li>
<li>10 mW</li>
</ul>
<p>✅ Answer :</p>
<p>The gain of antennas is expressed in decibels (dB). In the wireless
communication sector, the power output and input are in milliWatts (mW).</p>
<p>The first thing to understand about dBm is that we&rsquo;re working in
negatives. -30 is a higher signal than -80, because -80 is a much lower
number.</p>
<p>Next, it&rsquo;s important to know that dBm does not scale in a linear fashion
like you&rsquo;d expect, instead being logarithmic. That means that signal
strength changes aren&rsquo;t smooth and gradual. The Rule of 3s and 10s
highlights the logarithmic nature of dBm. To be simple, let’s see the
so-called Rule of 10s and 3s, that allows us to calculate output power
of an access point:</p>
<ul>
<li>For every gain of 3 dB, the power in mW is doubled</li>
<li>For every loss of 3 dB, the power in mW is halved</li>
<li>For every gain of 10 dB, the power in mW is multiplied by 10</li>
<li>For every loss of 10 dB, the power in mW is divided by 10</li>
</ul>
<p>So based on data provided:</p>
<pre tabindex="0"><code>9 dB = 3 + 3 + 3

2 mW + 9 dB = (((2 x 2) x 2) x 2 = 16 mW 
</code></pre><p>The new transmit power should be  <strong>16 mW</strong></p>
<p>References :<br>
<a href="https://www.tanaza.com/blog/understand-the-power-gain-with-the-rule-of-10s-and-3s/">https://www.tanaza.com/blog/understand-the-power-gain-with-the-rule-of-10s-and-3s/</a> <br>
<a href="https://www.youtube.com/watch?v=VqoUS-ecw4Y">https://www.youtube.com/watch?v=VqoUS-ecw4Y</a></p>
<hr>
<h3 id="6-a-junior-threat-analyst-in-your-organization-has-alerted-you-to-some-potential-nefarious-activity-in-your-network">6️⃣ A junior threat analyst in your organization has alerted you to some potential nefarious activity in your network.</h3>
<p>Analyze the <a href="https://github.com/salaheldinaz/Cyber-Quests-Spring-2019-write-up/tree/master/challenge-files">ping.pcap</a>
packet capture. Which location is referenced in the message?</p>
<ul>
<li>Mount Everest</li>
<li>Great Barrier Reef</li>
<li>Niagara Falls</li>
<li>Grand Canyon</li>
</ul>
<p>✅ Answer :</p>
<ol>
<li>Open
<a href="https://github.com/salaheldinaz/Cyber-Quests-Spring-2019-write-up/tree/master/challenge-files">ping.pcap</a>
file in <a href="https://www.wireshark.org/download.html">Wireshark</a></li>
</ol>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/1/img/cyberquest-2019-6-1.jpg" width="1024" height="581" alt="cyberquest-2019-6-1.jpg" loading="lazy" decoding="async"></p>
<ol start="2">
<li>Basic analysis for the file you will find the following:</li>
</ol>
<ul>
<li>It&rsquo;s communication between <code>10.1.1.153</code> and <code>10.1.1.159</code></li>
<li>Protocol type <code>ICMP type 8</code> <code>Echo Request</code></li>
</ul>
<ol start="3">
<li>If you select any connection and expanded <code>Internet Control Message Protocol</code> &gt; <code>Data</code> , you will find same
Payload (96 bytes) transmitted in all connections.</li>
</ol>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/1/img/cyberquest-2019-6-2.jpg" width="1024" height="839" alt="cyberquest-2019-6-2.jpg" loading="lazy" decoding="async"></p>
<ol start="4">
<li>Let&rsquo;s grab &amp; analysis this payload to get the message:</li>
</ol>
<p>Right click on data value a from previous step &gt; <code>show packet bytes..</code></p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/1/img/cyberquest-2019-6-3.jpg" width="1024" height="608" alt="cyberquest-2019-6-3.jpg" loading="lazy" decoding="async"></p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/1/img/cyberquest-2019-6-4.jpg" width="1024" height="835" alt="cyberquest-2019-6-4.jpg" loading="lazy" decoding="async"></p>
<p>Select <code>Decode as</code> &gt; <code>Base64</code></p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/1/img/cyberquest-2019-6-5.jpg" width="1024" height="326" alt="cyberquest-2019-6-5.jpg" loading="lazy" decoding="async"></p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/1/img/cyberquest-2019-6-6.jpg" width="1024" height="831" alt="cyberquest-2019-6-6.jpg" loading="lazy" decoding="async"></p>
<p>The message :
<code>the next drop off location will be @ 43.0828201,-79.0763516. Good luck!</code></p>
<ol start="5">
<li>Convert latitude and longitude to location using <a href="https://www.google.com/maps">Google
Maps</a></li>
</ol>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/1/img/cyberquest-2019-6-7.jpg" width="1024" height="248" alt="cyberquest-2019-6-7.jpg" loading="lazy" decoding="async"></p>
<p>Location <strong>Niagara Falls</strong></p>
<p>References :<br>
[http://www.networksorcery.com/enp/protocol/icmp/msg8.htm](<a href="http://www.networksorcery.com/enp/protocol/icmp/msg8.htm">http://www.networksorcery.com/enp/protocol/icmp/msg8.htm</a>
<a href="https://en.wikipedia.org/wiki/Ping_(networking_utility)#ECHO-REQUEST">https://en.wikipedia.org/wiki/Ping_(networking_utility)#ECHO-REQUEST</a></p>
<hr>
<h3 id="7-you-are-working-on-installing-a-new-linux-e-mail-server-which-of">7️⃣ You are working on installing a new Linux e-mail server.** Which of</h3>
<p>the following ports should you open on the host firewall?</p>
<ul>
<li><code>120</code></li>
<li><code>280</code></li>
<li><code>143</code></li>
<li><code>125</code></li>
</ul>
<p>✅ Answer:</p>
<p>Let&rsquo;s lookup the typical mail ports for hosts which will be using mail
client:</p>
<ul>
<li><code>110</code>: POP3</li>
<li><code>995</code>: SSL-POP</li>
<li><code>143</code>: IMAP</li>
<li><code>993</code>: IMAPS</li>
<li><code>25</code>: SMTP</li>
<li><code>587</code>: SMTP</li>
<li><code>465</code>: SMTP</li>
</ul>
<p>Also check other ports usage:</p>
<ul>
<li><code>280</code> http-mgmt</li>
</ul>
<p>The port we should open on the host firewall is <strong><code>143</code></strong></p>
<p>References : <br>
[https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports](<a href="https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports">https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports</a>
[https://www.linode.com/docs/email/running-a-mail-server/](<a href="https://www.linode.com/docs/email/running-a-mail-server/">https://www.linode.com/docs/email/running-a-mail-server/</a></p>
<hr>
<h3 id="8-you-are-given-the-task-of-modifying-iptables-to-accept-tcp-packets">8️⃣ You are given the task of modifying iptables to accept TCP packets</h3>
<p>on destination ports 6881-6890.** Which rule will accomplish this?</p>
<ul>
<li><code># iptables -A FORWARD -p tcp --dport 6881:6890 -j ACCEPT</code></li>
<li><code># iptables -A OUTPUT -p tcp --dport 6881:6890 -j ACCEPT</code></li>
<li><code># iptables -A INPUT -p tcp --dport 6881:6890 -j ACCEPT</code></li>
<li><code># iptables -A OUTPUT -p tcp --dport 6881:6890 -j ALLOW</code></li>
</ul>
<p>✅ Answer:</p>
<p>Let&rsquo;s begin with understanding Iptables Basics :</p>
<p>Linux kernel provides an interface to filter both incoming and outgoing
traffic packets using tables of packet filters.</p>
<p><strong>Iptables</strong> is a command line application and a Linux firewall that you
can use to set-up, maintain and inspect these tables. Multiple tables
can be defined.</p>
<p>Each table can contain multiple chains. A chain is nothing but a set of
rules. Each rule defines what to do with the packet if it matches with
that packet.</p>
<p>When the packet is matched, it is given a <strong>TARGET</strong>. A target can be
another chain to match with or one of the following special values:</p>
<ul>
<li><code>ACCEPT</code>: It means the packet will be allowed to pass through.</li>
<li><code>DROP</code>: It means that packet will not be allowed to pass through.</li>
<li><code>RETURN</code>: It means to skip the current chain and go back to the next
rule from the chain it was called in.</li>
<li><code>REJECT</code><em>is used to send back an error packet in response to the
matched packet: otherwise it is equivalent to</em> <code>DROP</code><em>so it is a
terminating TARGET, ending rule traversal.]</em></li>
</ul>
<p>One of the default tables called <strong>filter</strong>. Filters table has three
chains ( sets of rules).</p>
<ul>
<li><code>INPUT</code> – This chain is used to control incoming packets to the
server. You can block/allow connections based on port, protocol or
source IP address.</li>
<li><code>FORWARD</code> – This chain is used to filter packets that are incoming
to the server but are to be forwarded somewhere else.</li>
<li><code>OUTPUT</code> – This chain is used to filter packets that are going out
from your server.</li>
</ul>
<p>Here’s the Iptables command formatted with regular options.</p>
<pre><code>iptables -A -i &lt;interface&gt; -p &lt;protocol (tcp/udp) &gt; -s &lt;source&gt; --dport &lt;port no.&gt; -j &lt;target&gt;
</code></pre>
<p><code>-A</code> stands for append. The chain refers to the chain we want to append
our rules.<br>
The <code>interface</code> is the network interface on which you want to filter
the traffic.<br>
The <code>protocol</code> refers to the networking protocol of packets you want to
filter.<br>
You can also specify the <code>port</code> no of the port on which you want to
filter the traffic.</p>
<p>We want to <code>accept</code> <code>TCP</code> packets on destination ports <code>6881-6890</code></p>
<ul>
<li>-A <code>INPUT</code></li>
<li><del>-i &lt;interface&gt;</del></li>
<li><del>-s &lt;source&gt;</del></li>
<li>&lt;protocol (tcp/udp) &gt; <code>tcp</code></li>
<li>&lt;port no.&gt; <code>6881:6890</code></li>
<li>&lt;target&gt; <code>ACCEPT</code></li>
</ul>
<p>Our rule will be <code> iptables -A INPUT -p tcp --dport 6881:6890 -j ACCEPT</code></p>
<p>References : <br>
[http://ipset.netfilter.org/iptables.man.html](<a href="http://ipset.netfilter.org/iptables.man.html">http://ipset.netfilter.org/iptables.man.html</a>
<a href="https://www.hostinger.com/tutorials/iptables-tutorial">https://www.hostinger.com/tutorials/iptables-tutorial</a></p>
<hr>
<h3 id="9-you-are-helping-an-intrusion-analyst-write-a-snort-rule-that-will">9️⃣ You are helping an intrusion analyst write a Snort rule that will</h3>
<p>log any Telnet use within your network.**</p>
<pre><code>log tcp any any &lt;&gt; any 23 (session:printable; sid:;)
</code></pre>
<p>What is a valid SID that you can assign the rule?</p>
<ul>
<li>1543845</li>
<li>564243</li>
<li>125</li>
<li>235124</li>
</ul>
<p>✅ Answer:</p>
<p>The signature id (sid) keyword is used to uniquely identify Snort rules:</p>
<ul>
<li>If the number is less than <em>1,000,000</em>, it is a SourceFire rule (the
company that maintains the snort source code). In this case, you can
get more information about the rule by going
to <a href="https://www.snort.org/rule_docs">https://www.snort.org/rule_docs</a>.
<ul>
<li><em>&lt;100</em> Reserved for future use</li>
<li><em>100-999,999</em> Rules included with the Snort distribution</li>
</ul>
</li>
<li>If the number is between <em>1,000,000</em> and <em>2,000,000</em>, it is a snort
community rule or can be used for local rules. .</li>
<li>If the number is between <em>2,000,000</em> and <em>3,000,000</em>, it comes
from <a href="https://www.emergingthreats.net/">emergingthreats.net</a> and you
can get more information
at <a href="http://doc.emergingthreats.net/bin/view/Main/">http://doc.emergingthreats.net/bin/view/Main/</a> (<em>sid number</em>).</li>
</ul>
<p>So we will use  1543845</p>
<p>References : <br>
<a href="http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node31.html#SECTION00444000000000000000">http://manual-snort-org.s3-website-us-east-1.amazonaws.com/node31.html#SECTION00444000000000000000</a>
<a href="https://security.berkeley.edu/network-intrusion-detection-systems/more-information-about-snort-rules">https://security.berkeley.edu/network-intrusion-detection-systems/more-information-about-snort-rules</a></p>
<hr>
<h3 id="10-you-are-analyzing-some-unusual-http-proxy-logs-with-time">1️⃣0️⃣** **You are analyzing some unusual HTTP proxy logs with time</h3>
<p>stamps between 1439038269.433 and 1439135269.433.** When did some of the
events take place?</p>
<ul>
<li>Saturday</li>
<li>December</li>
<li>2013</li>
<li>Tuesday</li>
</ul>
<p>✅ Answer:</p>
<p>HTTP proxy logs uses the format: <code>&lt;UNIX timestamp&gt;.&lt;Centiseconds&gt;</code> .</p>
<p>Using Unix Timestamp Conversion Tool
<a href="https://www.epochconverter.com/">epochconverter.com</a> :</p>
<p><code>1439038269.433</code> &gt; Saturday, August 8, 2015 12:51:09.433 PM GMT</p>
<p><code>1439135269.433</code> &gt; Sunday, August 9, 2015 3:47:49.433 PM GMT</p>
<p>Some of the events took place at Saturday .</p>
<hr>
<h3 id="11-you-are-reviewing-firewall-rules-and-encounter-the-below">1️⃣1️⃣ You are reviewing firewall rules and encounter the below</h3>
<p>rule.**</p>
<pre><code># iptables -A INPUT -s -p tcp --dport 23 -j REJECT
</code></pre>
<p>What is the purpose of the rule?</p>
<ul>
<li>Deny TCP packets for SSH service</li>
<li>Deny TCP packets for Telnet service</li>
<li>Deny File Transfer Protocol (FTP) from your network</li>
<li>Allow port 23 into the INPUT chain</li>
</ul>
<p>✅ Answer:</p>
<p>let&rsquo;s analysis the rule based knowledge we now from the answer of
question no. 8 :</p>
<ul>
<li><code>-A INPUT</code> This chain is used to control incoming packets to the
server. You can block/allow connections based on port, protocol or
source IP address.</li>
<li><code>-s</code> Source IP address</li>
<li><code>-p tcp</code> Networking protocol of packets you want to filter.</li>
<li><code>--dport 23</code> number of the port on which you want to filter the
traffic, port 23 used for Telnet protocol.</li>
<li><code>-j REJECT</code> <em>is used to send back an error packet in response to the
matched packet.</em></li>
</ul>
<p>The purpose of this rule &gt; Deny TCP packets for Telnet service.</p>
<p>References : <br>
<a href="https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers">https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers</a></p>
<hr>
<h3 id="12a-security-engineer-in-your-organization-has-just-installed-and">1️⃣2️⃣A security engineer in your organization has just installed and</h3>
<p>configured a new IPS.** Which action can an IPS take to prevent an
exploit from succeeding?</p>
<ul>
<li>Enable bypass mode</li>
<li>Deploy an antimalware agent</li>
<li>Deny the connection inline</li>
<li>Perform a Layer 6 rest</li>
</ul>
<p>✅ Answer:</p>
<p>Intrusion prevention systems (IPS) control the access to an IT network
and protect it from abuse and attack. These systems are designed to
monitor intrusion data and take the necessary action to prevent an
attack from developing.</p>
<p>The IPS performs real-time packet inspection, deeply inspecting every
packet that travels across the network. If any malicious or suspicious
packets are detected, the IPS will carry out one of the following
actions:</p>
<ul>
<li>Terminate the TCP session that has been exploited and block the
offending source IP address or user account from accessing any
application, target hosts or other network resources unethically.</li>
<li>Reprogram or reconfigure the firewall to prevent a similar attack
occurring in the future.</li>
<li>Remove or replace any malicious content that remains on the network
following an attack. This is done by repackaging payloads, removing
header information and removing any infected attachments from file
or email servers.</li>
</ul>
<p>To prevent an exploit from succeeding an IPS can take the following
action:</p>
<ul>
<li>Deny the connection inline:
The deny packet inline action is represented as a dropped packet
action in the alert. When a deny connection inline occurs, the IPS
also automatically sends a TCP one-way reset, which shows up as a
TCP one-way reset sent in the alert.\</li>
<li><del>Enable bypass mode</del> :
Will make exploit bypass IPS without any action.</li>
<li><del>Deploy an antimalware agent</del>:
IPS doesn&rsquo;t deploy antimalware .</li>
<li><del>Perform a Layer 6 rest:</del><br>
IPS monitors traffic at Layer 3 &amp; Layer 4, And only reset TCP
connection.</li>
</ul>
<p>References : <br>
<a href="https://www.cisco.com/c/en/us/td/docs/security/ips/5-1/configuration/guide/cli/cliguide/cliEvAct.html">https://www.cisco.com/c/en/us/td/docs/security/ips/5-1/configuration/guide/cli/cliguide/cliEvAct.html</a> <br>
<a href="https://www.forcepoint.com/cyber-edu/intrusion-prevention-system-ips">https://www.forcepoint.com/cyber-edu/intrusion-prevention-system-ips</a></p>
<hr>
<h3 id="13-an-intrusion-analyst-in-your-organization-has-detected-an">1️⃣3️⃣ An intrusion analyst in your organization has detected an</h3>
<p>attack in which a device&rsquo;s burned-in address was changed in an attempt
to circumvent a switch&rsquo;s port-security.** What type of attack is being
described?</p>
<ul>
<li>ARP poisoning</li>
<li>MAC spoofing</li>
<li>IP spoofing</li>
<li>Gratuitous ARP</li>
</ul>
<p>✅ Answer:</p>
<p>Let us begin by attacks definition:</p>
<ul>
<li>
<p>ARP poisoning:
Address Resolution Protocol poisoning (ARP poisoning) is a form of
attack in which an attacker changes the Media Access Control (MAC)
address and attacks an Ethernet LAN by changing the target
computer&rsquo;s ARP cache with a forged ARP request and reply packets.</p>
</li>
<li>
<p>MAC spoofing:
The Media Access Control address, or MAC, or burned-in address (BIA)
is virtually etched to the hardware by the manufacturer. Users are
not able to change or rewrite the MAC address. But it is possible to
mask it on the software side. This masking is what’s referred to as
MAC spoofing which hackers use this method of attack to conceal
their own identity and imitate another.</p>
</li>
<li>
<p>IP spoofing<br>
IP Spoofing is a technique used to gain unauthorized access to
machines, whereby an attacker illicitly impersonates another machine
by manipulating IP packets.<br>
IP Spoofing involves modifying the packet header with a forged
(spoofed) source IP address, a checksum, and the order value.</p>
</li>
<li>
<p>Gratuitous ARP<br>
A gratuitous ARP request is an Address Resolution Protocol request
packet where the source and destination IP are both set to the IP of
the machine issuing the packet and the destination MAC is the
broadcast address ff:ff:ff:ff:ff:ff. Ordinarily, no reply packet
will occur. A gratuitous ARP reply is a reply to which no request
has been made.</p>
</li>
</ul>
<p>The type of attack is being described is  <strong>MAC spoofing</strong></p>
<p>Ethernet switches via port security provide the opportunity to filter
network data traffic on the OSI layer 2.<br>
Once a connection has been established from one segment to another, the
intermediate coupling element checks the MAC address of the sender
device and matches it with an administrator-created whitelist. If it’s
an unknown address, the switch blocks the respective port and stops the
communication attempt. But MAC spoofing enables hackers to get around
security measures like this.</p>
<p>References: <br>
<a href="https://www.techopedia.com/definition/27471/address-resolution-protocol-poisoning-arp-poisoning">https://www.techopedia.com/definition/27471/address-resolution-protocol-poisoning-arp-poisoning</a> <br>
<a href="https://www.ionos.com/digitalguide/server/know-how/what-is-mac-spoofing/">https://www.ionos.com/digitalguide/server/know-how/what-is-mac-spoofing/</a> <br>
<a href="https://www.iplocation.net/ip-spoofing">https://www.iplocation.net/ip-spoofing</a> <br>
<a href="https://wiki.wireshark.org/Gratuitous_ARP">https://wiki.wireshark.org/Gratuitous_ARP</a> \</p>
<hr>
<h3 id="14a-network-administrator-in-your-organization-encountered-the">1️⃣4️⃣A network administrator in your organization encountered the</h3>
<p>below account in one of your Cisco devices.** Analyze the output and
submit the clear-text password as your answer.</p>
<pre><code>DataCenter1(config)#do sh run | inc user

username administrator password 7 08314D1B5C0E550516
</code></pre>
<p>✅ Answer:</p>
<p><code>do sh run</code> This command is <em>show running-configuration</em> command that
shows the router, switch, or firewall&rsquo;s current configuration. The
running-configuration is the config that is in the router&rsquo;s memory.</p>
<p><code>inc user</code> to list all user accounts</p>
<p><code>password 7 08314D1B5C0E550516</code> password is type 7</p>
<p>Cisco password Type 7 is the Cisco proprietary method (Vigenere cypher)
and is weak and can easily cracked w/ utilities that are available on
the net. using <a href="http://ibeast.com/tools/CiscoPassword/index.asp">online Cisco Type 7 Passwords Decrypt
tool</a> :</p>
<ul>
<li>Enter <code>08314D1B5C0E550516</code></li>
<li>the clear-text password  <strong><code>pa55w0rd</code></strong></li>
</ul>
<hr>
<h3 id="15-the-ips-in-your-organization-is-currently-using-only">1️⃣5️⃣ The IPS in your organization is currently using only</h3>
<p>signature-based detection.** You recommend adding statistical-based
anomaly detection. What is one disadvantage to your recommendation?</p>
<ul>
<li>The rule-based file is only updated when new exploits are discovered
and tested</li>
<li>A new &ldquo;low and slow&rdquo; attack would not be detected</li>
<li>Existing anomalous traffic would not be detected</li>
<li>0-day attacks would not be detected</li>
</ul>
<p>✅ Answer:</p>
<p>Statistical anomaly detection takes samples of network traffic at random
and compares them to a pre-calculated baseline performance level. When
the sample of network traffic activity is outside the parameters of
baseline performance, the IPS takes action to handle the situation.</p>
<p>It&rsquo;s a two-step approach that involves first training a system with data
based on statistical modeling, to establish some notion of normality and
then use the established profile on real data to flag deviations.</p>
<p>Main disadvantage is  Existing anomalous traffic would not be detected
because it&rsquo;s included in our baseline.</p>
<p>References: <br>
<a href="https://www.symantec.com/connect/articles/statistical-based-intrusion-detection">https://www.symantec.com/connect/articles/statistical-based-intrusion-detection</a> <br>
<a href="https://www.paloaltonetworks.com/cyberpedia/what-is-an-intrusion-prevention-system-ips">https://www.paloaltonetworks.com/cyberpedia/what-is-an-intrusion-prevention-system-ips</a> <br>
<a href="https://ebrary.net/26723/computer_science/anomaly-based_detection">https://ebrary.net/26723/computer_science/anomaly-based_detection</a> <br>
<a href="https://www.cloudflare.com/learning/ddos/ddos-low-and-slow-attack/">https://www.cloudflare.com/learning/ddos/ddos-low-and-slow-attack/</a></p>
<hr>
<h3 id="16-as-part-of-a-wireless-penetration-test-you-are-performing">1️⃣6️⃣ As part of a wireless penetration test, you are performing</h3>
<p>802.11 traffic reconnaissance with Wireshark.** You notice a packet that
contains a management frame (type 0) accompanied by subtype 12 (0x0c)
and reason code 4. What has just occurred?</p>
<ul>
<li>A De-Authentication between an AP and station due to inactivity</li>
<li>A station transmitting authentication credentials to an AP</li>
<li>A station attempting a Reassociation Request with an AP</li>
<li>An Access Point (AP) beaconing out its Service Set Identifier (SSID)</li>
</ul>
<p>✅ Answer:</p>
<p>There are 3 types of frames used in the 802.11 layer 2 communications
happening over the air which manages and controls the wireless link.</p>
<p>Management frames are used by stations to join and leave a BSS (Basic
Service Sets).</p>
<p>Station or AP can send a De-authentication Frame when all communications
are terminated (When disassociated, still a station can be authenticated
to the cell). It is subtype 12 (0x0c) management frame (type 0).</p>
<p>The 16-bit Reason Code field is part of the frame to indicate what the
sender has done incorrectly.</p>
<p>Reason code 4 explanation: Inactivity timer expired and station was
disassociated.</p>
<p><strong>A De-Authentication between an AP and station due to inactivity</strong></p>
<p>References: <br>
<a href="https://mrncciew.com/2014/10/11/802-11-mgmt-deauth-disassociation-frames/">https://mrncciew.com/2014/10/11/802-11-mgmt-deauth-disassociation-frames/</a> <br>
<a href="https://www.oreilly.com/library/view/80211-wireless-networks/0596100523/ch04.html">https://www.oreilly.com/library/view/80211-wireless-networks/0596100523/ch04.html</a> \</p>
<hr>
<h3 id="17-you-need-to-perform-a-wireless-packet-capture-on-an-aruba-wi-fi">1️⃣7️⃣ You need to perform a wireless packet capture on an Aruba Wi-Fi</h3>
<p>AP that has been having authentication issues.** Which BSSID should you
perform the capture on?</p>
<p>List of WiFi Access Point BSSIDs</p>
<ul>
<li><code>24:f5:a2:11:f7:6a</code></li>
<li><code>e0:55:3d:21:e5:5a</code></li>
<li><code>18:64:72:d3:d7:b0</code></li>
<li><code>00:01:e3:41:bd:6e</code></li>
</ul>
<p>✅ Answer:</p>
<p>We will use MAC lookup to displays the name of the company that
manufactured each network card, using this online tool
<a href="https://macvendors.com/">https://macvendors.com/</a> :</p>
<ul>
<li><code>24:f5:a2:11:f7:6a</code> Belkin International Inc.</li>
<li><code>e0:55:3d:21:e5:5a</code> Cisco Meraki</li>
<li><code>18:64:72:d3:d7:b0</code> Aruba, a Hewlett Packard Enterprise Company</li>
<li><code>00:01:e3:41:bd:6e</code> Siemens AG</li>
</ul>
<p>The BSSID should perform the capture on  <strong><code>18:64:72:d3:d7:b0</code></strong></p>
<hr>
<h3 id="18-an-analyst-in-your-organization-is-attempting-to-execute-the">1️⃣8️⃣ An analyst in your organization is attempting to execute the</h3>
<p>following tcpdump command.**</p>
<pre><code># tcpdump -n -i eth0 -w analysis.pcap -C 100 'host 10.3.2.34'
</code></pre>
<p>What is her goal?</p>
<ul>
<li>Capture 100MB of rotating data to/from host 10.3.2.34</li>
<li>Capture tcpdump data to/from host 10.3.2.34 every 100 seconds</li>
<li>Display the first 100 packets in the analysis.pcap file</li>
<li>Import tcpdump data from a file called analysis.pcap</li>
</ul>
<p>✅ Answer:</p>
<p>Let&rsquo;s analysis tcpdump command :</p>
<ul>
<li><code>-n</code> Don&rsquo;t convert addresses (i.e., host addresses, port numbers,
etc.) to names.</li>
<li><code>-i eth0</code> Listen on <em>interface</em> <code>eth0</code>.</li>
<li><code>-w analysis.pcap</code> Write the raw packets to file rather than parsing
and printing them out.</li>
<li><code>-C 100</code> Before writing a raw packet to a save file, check whether
the file is currently larger than <em>file_size</em> and, if so, close the
current save file and open a new one.</li>
<li><code>'host 10.3.2.34'</code> dump traffic that’s going to or from this host</li>
</ul>
<p><strong>Capture 100MB of rotating data to/from host 10.3.2.34</strong></p>
<p>References: <br>
<a href="https://www.tcpdump.org/manpages/tcpdump.1.html">https://www.tcpdump.org/manpages/tcpdump.1.html</a> <br>
<a href="https://danielmiessler.com/study/tcpdump/">https://danielmiessler.com/study/tcpdump/</a></p>
<hr>
<h3 id="19-while-analyzing-a-packet-capture-file-you-notice-transmission">1️⃣9️⃣ While analyzing a packet capture file, you notice Transmission</h3>
<p>Control Protocol (TCP) flag 0x018.** What does that flag signify?</p>
<ul>
<li>FIN, ACK</li>
<li>RST, ACK</li>
<li>SYN, ACK</li>
<li>PSH, ACK</li>
</ul>
<p>✅ Answer :</p>
<p>TCP flags are used within TCP packet transfers to indicate a particular
connection state or provide additional information. Therefore, they can
be used for troubleshooting purposes or to control how a particular
connection is handled.</p>
<p>We need to do Hex conversion on TCP flag to get the semantic meaning of
that value</p>
<p>Take the hexadecimal value <code>0x018</code> and convert it to binary value
<code>0001 1000</code></p>
<p>Use the following layout of flags and bits set (0 is off, 1 is on) to
get the flag:</p>
<p><code>|C|E|U|A|P|R|S|F|</code></p>
<p><code>|0 0 0 1 1 0 0 0| &gt; PSH-ACK</code></p>
<p>This flag signify  <strong>PSH, ACK</strong></p>
<p>References: <br>
<a href="http://rapid.web.unc.edu/resources/tcp-flag-key/">http://rapid.web.unc.edu/resources/tcp-flag-key/</a> <br>
<a href="https://www.manitonetworks.com/flow-management/2016/10/16/decoding-tcp-flags">https://www.manitonetworks.com/flow-management/2016/10/16/decoding-tcp-flags</a> <br>
<a href="https://danielmiessler.com/study/tcpflags/">https://danielmiessler.com/study/tcpflags/</a> <br>
<a href="https://www.aqua-calc.com/convert/number/hexadecimal-to-binary">https://www.aqua-calc.com/convert/number/hexadecimal-to-binary</a> \</p>
<hr>
<h3 id="20-a-junior-network-administrator-in-your-organization-has">2️⃣0️⃣ A junior network administrator in your organization has</h3>
<p>requested Cisco Discovery Protocol (CDP) be enabled.** What is a
disadvantage to his request?</p>
<ul>
<li>The protocol broadcasts authentication credentials of connected
network devices</li>
<li>CDP broadcast messages are sent using the User Datagram Protocol
(UDP), which is known to be an unreliable protocol</li>
<li>Spoofing can be used by an attacker to forge CDP packets and
impersonate network devices</li>
<li>The authentication mechanism used by CDP frames is vulnerable to a
man-in-the-middle attack</li>
</ul>
<p>✅ Answer:</p>
<p>The Cisco Discovery Protocol is a proprietary protocol that all Cisco
devices can use by default. CDP discovers other Cisco devices that are
directly connected, which makes possible to the devices to
auto-configure their connection in some cases, simplifying configuration
and connectivity.</p>
<p>CDP messages are not encrypted, This is a moderate security risk as you
announce quite detailed information about your system to the network -
info about software versions, hardware, and whether some protocols are
enabled.</p>
<p><strong>Spoofing can be used by an attacker to forge CDP packets and
impersonate network devices</strong></p>
<p>References: <br>
<a href="https://howdoesinternetwork.com/2011/cdp-attack">https://howdoesinternetwork.com/2011/cdp-attack</a></p>
<hr>
<h3 id="21-analyze-the-packet-capture-networkpcap--what-is-occurring">2️⃣1️⃣ Analyze the packet capture <a href="https://github.com/salaheldinaz/Cyber-Quests-Spring-2019-write-up/tree/master/challenge-files">network.pcap</a> . What is occurring?</h3>
<ul>
<li>Host 13.13.13.3 initiated 3 ICMP echo requests to host 13.13.13.1</li>
<li>Host 13.13.13.1 initiated a Traceroute to host 24.24.24.2</li>
<li>The network is congested, resulting in a Time-to-live exceeded in
transit message</li>
<li>Host 24.24.24.2 is down, resulting in a port unreachable message</li>
</ul>
<p>✅ Answer</p>
<ol>
<li>Open
<a href="https://github.com/salaheldinaz/Cyber-Quests-Spring-2019-write-up/tree/master/challenge-files">network.pcap</a>
file in <a href="https://www.wireshark.org/download.html">Wireshark</a> :</li>
</ol>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/1/img/cyberquest-22-img-1.jpg" width="1024" height="600" alt="cyberquest-22-img-1.jpg" loading="lazy" decoding="async"></p>
<ol start="2">
<li>By doing a Basic analysis you will notice the host <code>13.13.13.1</code>
sending UDP packet to <code>24.24.24.2</code> with different TTL.Also replies to
source with ICMP message &ldquo;Time to live exceeded&rdquo; .</li>
</ol>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/1/img/cyberquest-22-img-5.jpg" width="1024" height="358" alt="cyberquest-22-img-5.jpg" loading="lazy" decoding="async"></p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/1/img/cyberquest-22-img-3.jpg" width="1024" height="363" alt="cyberquest-22-img-3.jpg" loading="lazy" decoding="async"></p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/1/img/cyberquest-22-img-2.jpg" width="1024" height="378" alt="cyberquest-22-img-2.jpg" loading="lazy" decoding="async"></p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/1/img/cyberquest-22-img-4.jpg" width="1024" height="368" alt="cyberquest-22-img-4.jpg" loading="lazy" decoding="async"></p>
<p>if you expanded packet details  <code>Internet Control Message Protocol</code> &gt; <code>Destination Port</code> :</p>
<pre><code>[Expert Info (Chat/Sequence): Possible traceroute: hop #1, attempt #3]
</code></pre>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/1/img/cyberquest-22-img-6.jpg" width="1024" height="365" alt="cyberquest-22-img-6.jpg" loading="lazy" decoding="async"></p>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/1/img/cyberquest-22-img-7.jpg" width="1024" height="378" alt="cyberquest-22-img-7.jpg" loading="lazy" decoding="async"></p>
<p>This is a possible traceroute via UDP packets . So how traceroute works ?</p>
<ul>
<li>Traceroute sends a UDP packet with a TTL = 1 from the source to
destination.</li>
<li>When the first router receives the UDP packet it reduces the TTL
value by 1 (1-1=0) then drop the packet and sends an ICMP message
“Time exceeded” to the source. Thus Traceroute makes a list of the
router’s address and the time taken for the round-trip.</li>
</ul>
<p><img src="https://salaheldinaz.com/blog/cyber-quests-spring-2019-write-up/1/img/traceroute-how-works_hu_d0a826af188f7bdd.webp" width="708" height="396" alt="traceroute-how-works.png" loading="lazy" decoding="async"></p>
<p><strong>Host 13.13.13.1 initiated a Traceroute to host 24.24.24.2</strong></p>
<p>References: <br>
<a href="https://www.hackingarticles.in/working-of-traceroute-using-wireshark/">https://www.hackingarticles.in/working-of-traceroute-using-wireshark/</a> <br>
<a href="https://samsymons.com/blog/how-traceroute-works/">https://samsymons.com/blog/how-traceroute-works/</a></p>
]]></content:encoded></item><item><title>KringleCon 1 (2018) | The Kringle Secrets Book</title><link>https://salaheldinaz.com/blog/kringlecon1/</link><guid isPermaLink="true">https://salaheldinaz.com/blog/kringlecon1/</guid><pubDate>Wed, 13 Feb 2019 00:00:00 +0000</pubDate><description>Detailed technical write-up for KRINGLECON 1 CTF</description><category>2018</category><category>kringlecon</category><category>cyber</category><category>ctf</category><category>writeup</category><category>project</category><content:encoded><![CDATA[<p>The complete solution for 2018 SANS holiday hack challenges.</p>
<p><code>SANS Holiday Hack Challenges</code> : <a href="https://holidayhackchallenge.com/">https://holidayhackchallenge.com/</a> \</p>
<h2 id="table-of-contents">Table of contents:</h2>
<h3 id="challenge-1--orientation-challenge"><a href="https://github.com/salaheldinaz/the-kringle-secrets-book/blob/master/1_Orientation_Challenge.pdf">Challenge 1 | Orientation Challenge</a></h3>
<ul>
<li>Hint Challenge | The Essential Editor Skills Cranberry Pi terminal challenge</li>
<li>Main Challenge | Orientation Challenge</li>
</ul>
<h3 id="challenge-2--directory-browsing"><a href="https://github.com/salaheldinaz/the-kringle-secrets-book/blob/master/2_Directory_Browsing.pdf">Challenge 2 | Directory Browsing</a></h3>
<ul>
<li>Hint Challenge | The Name Game Cranberry Pi terminal challenge</li>
<li>Main Challenge | Directory Browsing</li>
</ul>
<h3 id="challenge-3--de-bruijn-sequences"><a href="https://github.com/salaheldinaz/the-kringle-secrets-book/blob/master/3_de_Bruijn_Sequences.pdf">Challenge 3 | de Bruijn Sequences</a></h3>
<ul>
<li>Hint Challenge | Lethal ForensicELFication Cranberry Pi terminal challenge</li>
<li>Main Challenge | de Bruijn Sequences</li>
</ul>
<h3 id="challenge-4--data-repo-analysis"><a href="https://github.com/salaheldinaz/the-kringle-secrets-book/blob/master/4_Data_Repo_Analysis.pdf">Challenge 4 | Data Repo Analysis</a></h3>
<ul>
<li>Hint Challenge | Stall Mucking Report Cranberry Pi terminal challenge</li>
<li>Main Challenge | Data Repo Analysis</li>
</ul>
<h3 id="challenge-5--ad-privilege-discovery"><a href="https://github.com/salaheldinaz/the-kringle-secrets-book/blob/master/5_AD_Privilege_Discovery.pdf">Challenge 5 | AD Privilege Discovery</a></h3>
<ul>
<li>Hint Challenge | The CURLing Master Cranberry Pi terminal challenge</li>
<li>Main Challenge | AD Privilege Discovery</li>
</ul>
<h3 id="challenge-6--badge-manipulation"><a href="https://github.com/salaheldinaz/the-kringle-secrets-book/blob/master/6_Badge_Manipulation.pdf">Challenge 6 | Badge Manipulation</a></h3>
<ul>
<li>Hint Challenge | The Yule Log Analysis Cranberry Pi terminal challenge</li>
<li>Main Challenge | Badge Manipulation</li>
</ul>
<h3 id="challenge-7--hr-incident-response"><a href="https://github.com/salaheldinaz/the-kringle-secrets-book/blob/master/7_HR_Incident_Response.pdf">Challenge 7 | HR Incident Response</a></h3>
<ul>
<li>Hint Challenge | The Dev Ops Fail Cranberry Pi terminal challenge</li>
<li>Main Challenge | HR Incident Response</li>
</ul>
<h3 id="challenge-8--network-traffic-forensics"><a href="https://github.com/salaheldinaz/the-kringle-secrets-book/blob/master/8_Network_Traffic_Forensics.pdf">Challenge 8 | Network Traffic Forensics</a></h3>
<ul>
<li>Hint Challenge | Python Escape from LA Cranberry Pi terminal challenge</li>
<li>Main Challenge | Network Traffic Forensics</li>
</ul>
<h3 id="challenge-9--ransomware-recovery"><a href="https://github.com/salaheldinaz/the-kringle-secrets-book/blob/master/9_Ransomware_Recovery.pdf">Challenge 9 | Ransomware Recovery</a></h3>
<ul>
<li>Hint Challenge | The Sleigh Bell Lottery Cranberry Pi terminal challenge</li>
<li>Main Challenge 9.1 | Catch the Malware</li>
<li>Main Challenge 9.2 | Identify the Domain</li>
<li>Main Challenge 9.3 | Stop the Malware</li>
<li>Main Challenge 9.4 | Recover Alabaster’s Password</li>
</ul>
<h3 id="challenge-10--who-is-behind-it-all-"><a href="https://github.com/salaheldinaz/the-kringle-secrets-book/blob/master/10_Who_Is_Behind_It_All.pdf">Challenge 10 | Who Is Behind It All ?</a></h3>
<ul>
<li>Main Challenge | Piano Door Lock</li>
</ul>
<h3 id="extra-challenge--google-ventilation-challenge"><a href="https://github.com/salaheldinaz/the-kringle-secrets-book/blob/master/11_Google_Ventilation_challenge.pdf">Extra Challenge | Google Ventilation challenge</a></h3>
<p><img src="https://salaheldinaz.com/blog/kringlecon1/kringle-footer_hu_f42351257c60b730.webp" width="900" height="100" alt="" loading="lazy" decoding="async"></p>
]]></content:encoded></item></channel></rss>