<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Skelmis</title>
    <link>https://skelmis.co.nz/</link>
    <description>Recent content on Skelmis</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Sun, 15 Mar 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://skelmis.co.nz/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Concurrency Is Hard (Sometimes)</title>
      <link>https://skelmis.co.nz/posts/concurrency-is-hard/</link>
      <pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/concurrency-is-hard/</guid>
      <description>Scaling software is often thought of as hard problem, yet it is one of the bits of software development I enjoy the most. It provides access to some niche bugs that aren&amp;rsquo;t simply &amp;lsquo;You forgot to add a ; to the end of the line&amp;rsquo; but rather provide scenarios such as &amp;lsquo;What happens when N people attempt to use Y at exactly the same time? Are all requests served by the server?</description>
    </item>
    <item>
      <title>F1 Fantasy 2026</title>
      <link>https://skelmis.co.nz/f1-fantasy/</link>
      <pubDate>Wed, 25 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/f1-fantasy/</guid>
      <description>Skip to leagues or FAQs&#xA;Welcome to our local F1 Fantasy Leagues for 2026.&#xA;F1 Fantasy is free, simple to pick up, and turns every practice run, pit stop and under-the-radar overtake into a chance for you to top global tables, or take on your friends and family in leagues of your own.&#xA;Here&amp;rsquo;s how it works:&#xA;You get a $100m cost cap to pick five drivers and two constructors. Create up to three teams… Maybe you want one &amp;lsquo;serious&amp;rsquo; team, one for the fun of the chaos, and one experiment, but it&amp;rsquo;s up to you.</description>
    </item>
    <item>
      <title>Jemba Rules</title>
      <link>https://skelmis.co.nz/jemba/</link>
      <pubDate>Sat, 03 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/jemba/</guid>
      <description>Yo, I&amp;rsquo;m Ethan and these are the Jemba rules! Link to heading Click a letter in the table to go to related rules.&#xA;A B C D F G H I K L M N O P Q R S T V W Y U Z A Link to heading Name Rule Alcoholic The person who pulled this piece must finish a glass of water before their next turn Android Those with an android phone drink once Andy All players vote on the most sober player, and they must take one drink Anton Any player taller than the picker must drink Apple Those with an apple phone drink once Automatic Those who drive an automatic vehicle must drink once Back to top</description>
    </item>
    <item>
      <title>C# Path&#39;ing May Not Work As You Expect</title>
      <link>https://skelmis.co.nz/posts/c_sharp-pathing/</link>
      <pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/c_sharp-pathing/</guid>
      <description>Background Link to heading During a security review this year I stumbled across some C# that at a glance looked fine. Turns out however it actually contained path traversal which was by design (of the language). After asking some of my friends who are familiar with C# they also went &amp;lsquo;huh thats weird&amp;rsquo; so I figured I&amp;rsquo;d make this and share with you all.&#xA;TLDR Link to heading If you are reviewing C# and come across Path.</description>
    </item>
    <item>
      <title>Linux Snippets</title>
      <link>https://skelmis.co.nz/cheatsheets/linux-snippets/</link>
      <pubDate>Thu, 26 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/cheatsheets/linux-snippets/</guid>
      <description>Various snippets of Linux commands &amp;amp; scripts I use enough to justify existing on my $PATH&#xA;git_fp Link to heading git fetch &amp;amp; pull&#xA;#!/usr/bin/env bash git fetch git pull echo &amp;#34;Fetched n pulled any new content.&amp;#34; git_send Link to heading git add, commit and push in one&#xA;#!/usr/bin/env bash if [[ $# -eq 0 ]] ; then echo &amp;#39;Expected commit message&amp;#39; exit 1 fi git add . git commit -m &amp;#34;$1&amp;#34; git push gitr Link to heading Recursive git clone</description>
    </item>
    <item>
      <title>About me</title>
      <link>https://skelmis.co.nz/about/</link>
      <pubDate>Tue, 21 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/about/</guid>
      <description>Yo, I&amp;rsquo;m Ethan! Link to heading I&amp;rsquo;m a Wellington based cyber security consultant and open source developer making a difference in the world.&#xA;I spend my days working as a cyber security consultant where I essentially spend my days hacking into companies, writing reports on said hacking and developing internal tooling. It&amp;rsquo;s fun to say the least ;)&#xA;In my free time you&amp;rsquo;ll likely catch me coding. My software has been used by millions of people worldwide, with hundreds of thousands of developers choosing my platforms as the base used to build products which scale and those are some facts I just absolutely love.</description>
    </item>
    <item>
      <title>CVE-2024-41808 - Unauthenticated log injection to account takeover</title>
      <link>https://skelmis.co.nz/posts/cve-2024-41808/</link>
      <pubDate>Mon, 05 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/cve-2024-41808/</guid>
      <description>This is a cross post from a research group blog post I made which can be found here&#xA;OpenObserve vulnerability chain Link to heading TL;DR - OpenObserve deployments using version 0.9.1 or lower are vulnerable to the following privilege escalation chain:&#xA;A malicious user submits logs via a service which sends logs to an OpenObserve instance. These logs contain malicious content. A site user attempts to create a dashboard, using the logging field containing malicious input.</description>
    </item>
    <item>
      <title>PNG to RCE: Faking files to bypass server side validation</title>
      <link>https://skelmis.co.nz/posts/file-faking/</link>
      <pubDate>Sat, 20 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/file-faking/</guid>
      <description>Recently during some personal research I came across a very interesting avenue for remote code execution (RCE). The program let you provide one argument to the command line before appending some flags after. Now it wasn&amp;rsquo;t &amp;ldquo;one&amp;rdquo; escapable argument, but was actually only one argument much to my disappointment.&#xA;Due to this, we are unlikely to LOLBIN our way out of the situation. So instead, let&amp;rsquo;s talk about a tale of bypassing theoretical file validation within some file upload and how to convince Linux to then run arbitrary code via said file when the rough following command is typed into a shell!</description>
    </item>
    <item>
      <title>CVE-2024-37893 - MFA bypass in OAuth flow may lead to compromise of Firefly III data</title>
      <link>https://skelmis.co.nz/posts/cve-2024-37893/</link>
      <pubDate>Tue, 18 Jun 2024 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/cve-2024-37893/</guid>
      <description>TL;DR - Even with MFA enabled on firefly III versions v6.1.16 and lower, an attacker is able to authorize OAuth applications against user accounts using only a username and password.&#xA;Advisory can be found here.&#xA;Firefly III is a personal finance manager which is both free and open source for anyone to use. After a recommendation from a colleague, I decided to spin up a version for myself.&#xA;I configured my Firefly account with a strong password + MFA.</description>
    </item>
    <item>
      <title>Nmap</title>
      <link>https://skelmis.co.nz/cheatsheets/nmap/</link>
      <pubDate>Mon, 01 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/cheatsheets/nmap/</guid>
      <description>A bunch of nmap flags because I often forget.&#xA;Detection Link to heading -A - All the host detection stuff -sV - Attempts to fingerprint services on ports -sn - No port scanning, only discover hosts. Example command to discover hosts on the network: nmap -sn ip_block/subnet Ports Link to heading -p- - Scan all ports -p80,443 - Scan port 80 and 443 -p1-100 - Scan ports 1 to 100 F - Scan the top 100 most popular ports (Nmap defaults to 1000) Timing templates Link to heading A flag to set underlying timeouts for stuff based on the network</description>
    </item>
    <item>
      <title>Discord bot sharding &amp; clustering</title>
      <link>https://skelmis.co.nz/posts/discord-bot-sharding-and-clustering/</link>
      <pubDate>Thu, 28 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/discord-bot-sharding-and-clustering/</guid>
      <description>Table of contents What is sharding Sharding in Python libraries What is clustering How to cluster your bot Note: This content relates directly to the experiences of the author. You should tailor your solution to your bots needs as at this scale, everyone has different requirements.&#xA;What is sharding Link to heading Sharding is the process by which Discord helps to alleviate load by forcing your bot to create multiple connections to Discord to split the load.</description>
    </item>
    <item>
      <title>How we almost ruined Christmas (and lost 1.95 million database records)</title>
      <link>https://skelmis.co.nz/posts/suggestions-server-december-outage/</link>
      <pubDate>Sun, 24 Dec 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/suggestions-server-december-outage/</guid>
      <description>TLDR; We had moved our database onto the same machine as our software a few months earlier, removing all replication in the process and never re-configuring it. Then our server proceeded to brick itself and our hosting provider was unsure if it could be recovered. It was in the end, but that&amp;rsquo;s how we nearly lost 1.95 million database records and ruined Christmas. And yes, you bet we have off-site backups again.</description>
    </item>
    <item>
      <title>Fun with USB rubber duckies</title>
      <link>https://skelmis.co.nz/posts/rubber-duckys/</link>
      <pubDate>Fri, 06 Oct 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/rubber-duckys/</guid>
      <description>After attending BSides Canberra I managed to get one of the DigiSparks from Redacted who offered them up as a sort of home brew USB rubber ducky. Kudos to Tomais for actually getting me one.&#xA;The DigiSpark for reference:&#xA;Naturally I wanted to have some fun with it, and being primarily a linux user I developed the payload with that in mind. It took a fair amount of trial and error, but I ended up with a payload that was able to pull a script from this site, download it and execute.</description>
    </item>
    <item>
      <title>A short dive into Fire and Emergency NZ&#39;s callout rates</title>
      <link>https://skelmis.co.nz/posts/fenz-analysis/</link>
      <pubDate>Tue, 19 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/fenz-analysis/</guid>
      <description>Did you know Fire and Emergency New Zealand (FENZ) publish incident reports? Well they do, and you can read them here. Naturally, the software developer and &amp;ldquo;Oooo pretty graph&amp;rdquo; in me decided I wanted to look at the data, and so I created a little tool for myself to gather some information to build this post.&#xA;Disclaimer&#xA;Caveat for this data and my inferences: the data supplied is an extract from the ICAD reporting system maintained by Fire and Emergency New Zealand.</description>
    </item>
    <item>
      <title>CVE-2023-41885 - Piccolo time based user enumeration</title>
      <link>https://skelmis.co.nz/posts/cve-2023-41885/</link>
      <pubDate>Mon, 18 Sep 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/cve-2023-41885/</guid>
      <description>It started as &amp;ldquo;bring password hashing inline with industry best practices&amp;rdquo; and two weeks later ended as &amp;ldquo;BaseUser.login implementation is vulnerable to time based user enumeration&amp;rdquo;. So here&amp;rsquo;s how a PR to bring a package inline with security best practices lead to a CVE.&#xA;Recently I moved, and am still in the processing of moving my websites to an ORM called Piccolo which provides a nice database layer, batteries included approach to working with FastAPI while allowing me; a former Django developer; the ability to easily build data driven platforms without the need to write SQL.</description>
    </item>
    <item>
      <title>Configuring MFA on Ubuntu servers</title>
      <link>https://skelmis.co.nz/cheatsheets/server-mfa/</link>
      <pubDate>Sun, 27 Aug 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/cheatsheets/server-mfa/</guid>
      <description>A TL;DR for setting up MFA on Ubuntu servers for SSH access because it took more than one guide to setup.&#xA;Login to box&#xA;sudo apt install libpam-google-authenticator&#xA;sudo nano /etc/pam.d/sshd&#xA;Scroll to bottom and add this under @include common-password&#xA;auth required pam_google_authenticator.so Ctrl + S, Ctrl + X&#xA;sudo nano /etc/ssh/sshd_config&#xA;Set ChallengeResponseAuthentication to yes. This may be KbdInteractiveAuthentication in newer versions&#xA;Ctrl + S, Ctrl + X&#xA;sudo systemctl restart sshd.</description>
    </item>
    <item>
      <title>Deploying Python packages</title>
      <link>https://skelmis.co.nz/cheatsheets/pypi/</link>
      <pubDate>Tue, 08 Aug 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/cheatsheets/pypi/</guid>
      <description>A TL;DR for package deployment because it&amp;rsquo;s complicated.&#xA;Classifiers Link to heading Because I can&amp;rsquo;t find them when I need them.&#xA;Find em here&#xA;Commands to push to Pypi Link to heading Bump the version number Delete these if they exist: build, *.egg-info, dist pip install wheel twine python setup.py sdist bdist_wheel python -m twine upload ./dist/* </description>
    </item>
    <item>
      <title>Lets talk time based user enumeration</title>
      <link>https://skelmis.co.nz/posts/tbue/</link>
      <pubDate>Sat, 22 Jul 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/tbue/</guid>
      <description>I discovered some time based user enumeration in the wild with some pretty nice implications, so let&amp;rsquo;s discuss them.&#xA;So firstly, what is time based user enumeration or tbue as I will refer to it for the rest of this post?&#xA;Essentially tbue occurs in sites which do not return constant time responses regardless of if an account exists or not. You can think of it roughly speaking as the following code block:</description>
    </item>
    <item>
      <title>My adventures building a passwordless platform - Part 1</title>
      <link>https://skelmis.co.nz/posts/passwordless-platform-1/</link>
      <pubDate>Mon, 19 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/passwordless-platform-1/</guid>
      <description>This project and by extension article are an on-going piece of work.&#xA;Firstly, lets define some things.&#xA;When I say site I mean a website with RBAC and user sign up, however, there should be no requirement for a password. This will hopefully be achieved through a phone which combines &amp;lsquo;something you have&amp;rsquo; (The phone) and &amp;lsquo;something you know&amp;rsquo; (Your phone creds).&#xA;So I want to make a site that allows for user sign up, but you don&amp;rsquo;t need a password essentially.</description>
    </item>
    <item>
      <title>NZCSC 2023 Writeups</title>
      <link>https://skelmis.co.nz/posts/nzcsc-2023/</link>
      <pubDate>Mon, 12 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/nzcsc-2023/</guid>
      <description>NZCSC tends to repeat challenges or at-least the themes of challenges yearly yet there is a distinct lack of resources such as write-ups from previous years. This aims to solve that while also just being a nice reference for things.&#xA;&amp;ldquo;The S in NZCSC stands for stego&amp;rdquo;&#xA;HexF The following write-ups are either nice, concise paths to the solution I&amp;rsquo;ve improved in post to remove extra fluff or the path I took to actually solve them including dead ends.</description>
    </item>
    <item>
      <title>My ZSH theme</title>
      <link>https://skelmis.co.nz/cheatsheets/zsh/</link>
      <pubDate>Sun, 11 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/cheatsheets/zsh/</guid>
      <description>I made my own ZSH theme which is basically half-life with tweaks that modify it to exactly what I want.&#xA;Download it:&#xA;curl https://skelmis.co.nz/skelmis.zsh-theme --output ~/.oh-my-zsh/themes/skelmis.zsh-theme Then in .zshrc modify ZSH_THEME to ZSH_THEME=&amp;quot;skelmis&amp;quot;</description>
    </item>
    <item>
      <title>Cyber Security quick commands</title>
      <link>https://skelmis.co.nz/cheatsheets/secops/</link>
      <pubDate>Tue, 06 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/cheatsheets/secops/</guid>
      <description>A lil collection of commands I find useful every so often.&#xA;PNG file? Link to heading Try zsteg:&#xA;gem install zsteg zsteg -a &amp;lt;filename&amp;gt;.png EVTX parser Link to heading https://github.com/williballenthin/python-evtx&#xA;Zip directory traversal Link to heading Tool to create zips which may result in the unzipped items being placed in arbitrary locations&#xA;https://github.com/ptoomey3/evilarc&#xA;Deobfuscate JS Link to heading JS Nice</description>
    </item>
    <item>
      <title>Python logging TL;DR&#39;d</title>
      <link>https://skelmis.co.nz/cheatsheets/python-logging/</link>
      <pubDate>Tue, 06 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/cheatsheets/python-logging/</guid>
      <description>Python has some beautiful logging. Here is my goto format:&#xA;import logging logging.basicConfig( format=&amp;#34;%(levelname)-7s | %(asctime)s | %(filename)12s:%(funcName)-12s | %(message)s&amp;#34;, datefmt=&amp;#34;%I:%M:%S %p %d/%m/%Y&amp;#34;, level=logging.INFO, ) Sent here from a help forum? Link to heading If you&amp;rsquo;ve been sent the link to this page from some form of help forum with me asking for logs, use this please.&#xA;import logging logging.basicConfig( format=&amp;#34;%(levelname)-7s | %(asctime)s | %(filename)12s:%(funcName)-12s | %(message)s&amp;#34;, datefmt=&amp;#34;%I:%M:%S %p %d/%m/%Y&amp;#34;, level=logging.</description>
    </item>
    <item>
      <title>My new site</title>
      <link>https://skelmis.co.nz/posts/new-site/</link>
      <pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/posts/new-site/</guid>
      <description>After having my old site for nearly four years and various other readthedocs hosted sites for documentation, I have finally decided to condense it down into one site and Hugo was the perfect choice. I love markdown. I love not having to write CSS. This was perfect.&#xA;This should be the new home of all my static content going forward.</description>
    </item>
    <item>
      <title>Contact me</title>
      <link>https://skelmis.co.nz/contact/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://skelmis.co.nz/contact/</guid>
      <description>Drop me a line on my email:&#xA;145 164 150 141 156 155 153 150 62 100 147 155 141 151 154 56 143 157 155 Oops, looks like that&amp;rsquo;s not human-readable. Maybe it&amp;rsquo;s base 8? &amp;#x1f440;&#xA;Otherwise, hit me up on Discord:&#xA;skelmis </description>
    </item>
  </channel>
</rss>
