<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Ashton Ang — cybersecurity write-ups</title>
    <link>https://ashtonang.com/</link>
    <description>Cybersecurity investigations, projects, and lessons learned by Ashton Ang.</description>
    <language>en</language>
    <atom:link href="https://ashtonang.com/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Rebuilding a SOC Homelab</title>
      <link>https://ashtonang.com/blog/network-vs-host-detection/</link>
      <guid isPermaLink="true">https://ashtonang.com/blog/network-vs-host-detection/</guid>
      <description>I rebuilt my old Homelab to a more complete version.</description>
      <pubDate>Wed, 29 Jul 2026 09:00:00 GMT</pubDate>
      <category>Detection &amp; Response</category>
      <category>Networking</category>
    </item>
    <item>
      <title>CRON jobbing with alerts that won&apos;t fire</title>
      <link>https://ashtonang.com/blog/attack-c2-beacon/</link>
      <guid isPermaLink="true">https://ashtonang.com/blog/attack-c2-beacon/</guid>
      <description>Cron logged every check-in to syslog automatically, and Wazuh ingested every line of it, but nothing in the default ruleset ever turned a plain CRON entry into an alert. Suricata caught it from a raw-IP curl heuristic instead.</description>
      <pubDate>Tue, 28 Jul 2026 17:00:00 GMT</pubDate>
      <category>Offensive Security</category>
      <category>Detection &amp; Response</category>
    </item>
    <item>
      <title>Dethroning Samba, the file share king, with a CVE from 2017</title>
      <link>https://ashtonang.com/blog/attack-samba-cve-exploit/</link>
      <guid isPermaLink="true">https://ashtonang.com/blog/attack-samba-cve-exploit/</guid>
      <description>Getting CVE-2017-7494 running took longer than the exploit itself, an old Python 2 build tool, a link-order bug, a coin-flip Metasploit crash. Once it landed, Suricata proved root access straight off the wire while Wazuh logged nothing at all.</description>
      <pubDate>Tue, 28 Jul 2026 13:00:00 GMT</pubDate>
      <category>Offensive Security</category>
      <category>Detection &amp; Response</category>
    </item>
    <item>
      <title>It can&apos;t see it?</title>
      <link>https://ashtonang.com/blog/attack-nmap-scan/</link>
      <guid isPermaLink="true">https://ashtonang.com/blog/attack-nmap-scan/</guid>
      <description>A SYN scan against the Homelab produced zero alerts twice, for two completely unrelated infrastructure bugs, before the network layer finally caught it clean.</description>
      <pubDate>Tue, 28 Jul 2026 09:00:00 GMT</pubDate>
      <category>Offensive Security</category>
      <category>Detection &amp; Response</category>
    </item>
    <item>
      <title>Cerbus</title>
      <link>https://ashtonang.com/blog/cerbus/</link>
      <guid isPermaLink="true">https://ashtonang.com/blog/cerbus/</guid>
      <description>Part two of Splunk&apos;s BOTSv1 dataset. Bob Smith plugged a parking-lot USB drive into his desktop, and I spent Scenario 2 tracing what happened next: a macro, a VBScript nobody could just read, two dead ends counting encrypted files, and a ransomware payload hiding inside a jpeg.</description>
      <pubDate>Sun, 26 Jul 2026 15:00:00 GMT</pubDate>
      <category>Detection &amp; Response</category>
    </item>
    <item>
      <title>Batman?!</title>
      <link>https://ashtonang.com/blog/batman/</link>
      <guid isPermaLink="true">https://ashtonang.com/blog/batman/</guid>
      <description>Splunk&apos;s BOTSv1 dataset handed me 33 million events and asked who defaced Wayne Enterprises&apos; website. I chased Po1s0n1vy through Joomla logs, got the defacement mechanism wrong twice, and found proof of a stolen admin login hiding in a session cookie instead of the login event itself.</description>
      <pubDate>Tue, 21 Jul 2026 14:00:00 GMT</pubDate>
      <category>Detection &amp; Response</category>
    </item>
    <item>
      <title>Writing my own detection rule</title>
      <link>https://ashtonang.com/blog/custom-detection-rule/</link>
      <guid isPermaLink="true">https://ashtonang.com/blog/custom-detection-rule/</guid>
      <description>Wazuh&apos;s built-in rules flagged my /etc/passwd path traversal as a generic level-6 web attack. Writing a custom rule to make it scream instead taught me the difference between running a SIEM and doing detection engineering.</description>
      <pubDate>Wed, 15 Jul 2026 15:00:00 GMT</pubDate>
      <category>Detection &amp; Response</category>
    </item>
    <item>
      <title>Attempt, 200. I just want to fix it already.</title>
      <link>https://ashtonang.com/blog/web-attack-detection/</link>
      <guid isPermaLink="true">https://ashtonang.com/blog/web-attack-detection/</guid>
      <description>Throwing SQLi, XSS, and path traversal at DVWA and watching every single one collapse into the same Wazuh alert, and what that taught me about what a log-based SIEM can and can&apos;t actually see.</description>
      <pubDate>Wed, 15 Jul 2026 13:00:00 GMT</pubDate>
      <category>Offensive Security</category>
      <category>Detection &amp; Response</category>
    </item>
    <item>
      <title>FIM!</title>
      <link>https://ashtonang.com/blog/file-integrity-monitoring/</link>
      <guid isPermaLink="true">https://ashtonang.com/blog/file-integrity-monitoring/</guid>
      <description>Setting up File Integrity Monitoring in Wazuh and learning how something small is actually big. It&apos;s knowing what normal looks like well enough to notice when it stops being normal.</description>
      <pubDate>Wed, 15 Jul 2026 12:00:00 GMT</pubDate>
      <category>Detection &amp; Response</category>
    </item>
    <item>
      <title>Wazuh&apos;s Brute-Force Alerts</title>
      <link>https://ashtonang.com/blog/ssh-bruteforce/</link>
      <guid isPermaLink="true">https://ashtonang.com/blog/ssh-bruteforce/</guid>
      <description>Running hydra against my own SSH login taught me that Wazuh doesn&apos;t have one brute-force rule, it has two, and which one fires depends on whether the username you&apos;re guessing actually exists.</description>
      <pubDate>Wed, 15 Jul 2026 08:00:00 GMT</pubDate>
      <category>Offensive Security</category>
      <category>Detection &amp; Response</category>
    </item>
    <item>
      <title>I wiped my laptop to build a SOC in my bedroom</title>
      <link>https://ashtonang.com/blog/soc-lab-setup/</link>
      <guid isPermaLink="true">https://ashtonang.com/blog/soc-lab-setup/</guid>
      <description>Every SOC analyst job post wants hands-on SIEM experience. I didn&apos;t have a SIEM, so I wiped an old laptop and built one with Wazuh in Docker, including the vm.max_map_count setting that cost me half an hour.</description>
      <pubDate>Tue, 14 Jul 2026 09:00:00 GMT</pubDate>
      <category>Detection &amp; Response</category>
    </item>
    <item>
      <title>Turning my auth-log reader into a tiny SIEM</title>
      <link>https://ashtonang.com/blog/mini-siem/</link>
      <guid isPermaLink="true">https://ashtonang.com/blog/mini-siem/</guid>
      <description>A standard library Python tool that parses an auth.log once and runs four detection rules over it. The bug that nearly made it blind, and what happened when I finally pointed it at a real 2000-line log off the internet.</description>
      <pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate>
      <category>Tooling &amp; Automation</category>
      <category>Detection &amp; Response</category>
    </item>
    <item>
      <title>My first Hack The Box machine: breaking into Oopsie</title>
      <link>https://ashtonang.com/blog/oopsie-hackthebox/</link>
      <guid isPermaLink="true">https://ashtonang.com/blog/oopsie-hackthebox/</guid>
      <description>A complete beginner&apos;s walk through the Oopsie box, explained the way I wish it had been explained to me, including the netcat mistake that stalled me for an hour.</description>
      <pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate>
      <category>Offensive Security</category>
    </item>
    <item>
      <title>Reading auth logs by hand before reaching for a tool</title>
      <link>https://ashtonang.com/blog/ssh-failed-login-analyzer/</link>
      <guid isPermaLink="true">https://ashtonang.com/blog/ssh-failed-login-analyzer/</guid>
      <description>A small Python script that counts failed SSH logins per IP, and what it taught me about log triage.</description>
      <pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate>
      <category>Tooling &amp; Automation</category>
      <category>Detection &amp; Response</category>
    </item>
    <item>
      <title>Writing a subnet scanner to see how host discovery works</title>
      <link>https://ashtonang.com/blog/subnet-scanner/</link>
      <guid isPermaLink="true">https://ashtonang.com/blog/subnet-scanner/</guid>
      <description>A standard library Python tool that pings a subnet for live hosts and checks common ports, and what it showed me about the network stack.</description>
      <pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate>
      <category>Networking</category>
      <category>Tooling &amp; Automation</category>
    </item>
    <item>
      <title>My first socket program: a LAN chat room</title>
      <link>https://ashtonang.com/blog/lan-chat-room/</link>
      <guid isPermaLink="true">https://ashtonang.com/blog/lan-chat-room/</guid>
      <description>A console chat app in Python with a server and multiple clients, and the networking basics I picked up building it.</description>
      <pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate>
      <category>Networking</category>
    </item>
  </channel>
</rss>
