<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CTF on System Overlord</title><link>https://systemoverlord.com/tags/ctf.html</link><description>Recent content in CTF on System Overlord</description><generator>Hugo</generator><language>en-us</language><managingEditor>david@systemoverlord.com (David Tomaschik)</managingEditor><webMaster>david@systemoverlord.com (David Tomaschik)</webMaster><lastBuildDate>Sun, 23 Apr 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://systemoverlord.com/tags/ctf/index.xml" rel="self" type="application/rss+xml"/><item><title>BSidesSF CTF 2023: Lastpwned (Author Writeup)</title><link>https://systemoverlord.com/2023/04/23/bsidessf-ctf-2023-lastpwned-author-writeup.html</link><pubDate>Sun, 23 Apr 2023 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2023/04/23/bsidessf-ctf-2023-lastpwned-author-writeup.html</guid><description>&lt;p&gt;I was the challenge author for a handful of challenges for this year&amp;rsquo;s BSidesSF
CTF. One of those challenges was &lt;strong&gt;&lt;code&gt;lastpwned&lt;/code&gt;&lt;/strong&gt;, inspired by a recent
high-profile data breach. This challenge provided a web-based password manager
with client-side encryption.&lt;/p&gt;</description></item><item><title>CTF 101: Just Try It!</title><link>https://systemoverlord.com/2023/04/17/ctf-101-just-try-it.html</link><pubDate>Mon, 17 Apr 2023 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2023/04/17/ctf-101-just-try-it.html</guid><description>&lt;ul&gt;
&lt;li&gt;Table of Contents
{:toc}&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As I&amp;rsquo;m helping to organize the &lt;a href="https://ctf.bsidessf.net"&gt;BSides San Francisco
CTF&lt;/a&gt; this weekend, I thought I&amp;rsquo;d share a little primer
for CTFs for those who have not gotten into them before.&lt;/p&gt;
&lt;h2 id="what-is-a-ctf"&gt;What is a CTF?&lt;/h2&gt;
&lt;p&gt;I suspect that most people in the information security (&amp;ldquo;cybersecurity&amp;rdquo;) space
have already heard of Capture the Flag (or CTF) competitions, but in case you
haven&amp;rsquo;t, I wanted to provide a short overview.&lt;/p&gt;</description></item><item><title>BSidesSF 2022 CTF: Login4Shell</title><link>https://systemoverlord.com/2022/06/20/bsidessf-2022-ctf-login4shell.html</link><pubDate>Mon, 20 Jun 2022 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2022/06/20/bsidessf-2022-ctf-login4shell.html</guid><description>&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Log4Shell"&gt;Log4Shell&lt;/a&gt; was arguably the biggest
vulnerability disclosure of 2021. Security teams across the entire world spent
the end of the year trying to address this bug (and several variants) in the
popular &lt;a href="https://logging.apache.org/log4j/2.x/"&gt;Log4J&lt;/a&gt; logging library.&lt;/p&gt;
&lt;p&gt;The vulnerability was caused by special formatting strings in the values being
logged that allow you to include a reference. This reference, it turns out, can
be loaded via &lt;code&gt;JNDI&lt;/code&gt;, which allows remotely loading the results as a Java class.&lt;/p&gt;
&lt;p&gt;This was such a big deal that there was no way we could let the next BSidesSF
CTF go by without paying homage to it. Fun fact, this meant I &amp;ldquo;got&amp;rdquo; to build a
Java webapp, which is actually something I&amp;rsquo;d never done from scratch before.
Nothing quite like learning about Jetty, Log4J, and Maven just for a CTF level.&lt;/p&gt;</description></item><item><title>BSidesSF 2022 CTF: TODO List</title><link>https://systemoverlord.com/2022/06/09/bsidessf-2022-ctf-todo-list.html</link><pubDate>Thu, 09 Jun 2022 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2022/06/09/bsidessf-2022-ctf-todo-list.html</guid><description>&lt;p&gt;This year, I was the author of a few of our web challenges. One of those that
gave both us (as administrators) and the players a few difficulties was &amp;ldquo;TODO
List&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Upon visiting the application, we see an app with a few options, including
registering, login, and support. Upon registering, we are presented with an
opportunity to add TODOs and mark them as finished:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://systemoverlord.com/img/bsidessf/todolist_todos.png" alt="Add TODOs"&gt;&lt;/p&gt;
&lt;p&gt;If we check &lt;code&gt;robots.txt&lt;/code&gt; we discover a couple of interesting entries:&lt;/p&gt;</description></item><item><title>BSidesSF 2022 CTF: Cow Say What?</title><link>https://systemoverlord.com/2022/06/07/bsidessf-ctf-2022-cow-say-what.html</link><pubDate>Tue, 07 Jun 2022 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2022/06/07/bsidessf-ctf-2022-cow-say-what.html</guid><description>&lt;p&gt;As the author of the &lt;code&gt;Cow Say What?&lt;/code&gt; challenge from this year&amp;rsquo;s BSidesSF CTF, I
got a lot of questions about it after the CTF ended. It&amp;rsquo;s both surprisingly
straight-forward but also a very little-known issue.&lt;/p&gt;
&lt;p&gt;The challenge was a web challenge &amp;ndash; if you visited the service, you got a page
providing a textarea for input to the &lt;a href="https://www.mankier.com/1/cowsay"&gt;cowsay&lt;/a&gt;
program, as well as a drop down for the style of the cow saying something
(plain, stoned, dead, etc.). There was a link to the source code, reproduced
here:&lt;/p&gt;</description></item><item><title>0x0G CTF: Authme (Author Writeup)</title><link>https://systemoverlord.com/2021/08/12/0x0g-ctf-authme-author-writeup.html</link><pubDate>Thu, 12 Aug 2021 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2021/08/12/0x0g-ctf-authme-author-writeup.html</guid><description>&lt;p&gt;0x0G is Google&amp;rsquo;s annual &amp;ldquo;Hacker Summer Camp&amp;rdquo; event. &lt;em&gt;Normally&lt;/em&gt; this would be in
Las Vegas during the week of DEF CON and Black Hat, but well, pandemic rules
apply. I&amp;rsquo;m one of the organizers for the CTF we run during the event, and I
thought I&amp;rsquo;d write up solutions to some of my challenges here.&lt;/p&gt;
&lt;p&gt;The first such challenge is &lt;code&gt;authme&lt;/code&gt;, a web/crypto challenge. The description
just wants to know if you can auth as admin and directs you to a website. On
the website, we find a link to the source code, to an RSA public key, and a
login form.&lt;/p&gt;</description></item><item><title>0x0G CTF: gRoulette (Author Writeup)</title><link>https://systemoverlord.com/2021/08/12/0x0g-ctf-groulette-author-writeup.html</link><pubDate>Thu, 12 Aug 2021 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2021/08/12/0x0g-ctf-groulette-author-writeup.html</guid><description>&lt;p&gt;0x0G is Google&amp;rsquo;s annual &amp;ldquo;Hacker Summer Camp&amp;rdquo; event. &lt;em&gt;Normally&lt;/em&gt; this would be in
Las Vegas during the week of DEF CON and Black Hat, but well, pandemic rules
apply. I&amp;rsquo;m one of the organizers for the CTF we run during the event, and I
thought I&amp;rsquo;d write up solutions to some of my challenges here.&lt;/p&gt;
&lt;p&gt;gRoulette is a simplified Roulette game online. Win enough and you&amp;rsquo;ll get the
flag. The source code is provided, and the entire thing is run over a WebSocket
connection to the server.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://systemoverlord.com/img/0x0g/groulette.png" alt="gRoulette"&gt;&lt;/p&gt;</description></item><item><title>BSidesSF 2021 CTF: Net Matroyshka (Author Writeup)</title><link>https://systemoverlord.com/2021/03/12/bsidessf-2021-ctf-net-matroyshka-author-writeup.html</link><pubDate>Fri, 12 Mar 2021 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2021/03/12/bsidessf-2021-ctf-net-matroyshka-author-writeup.html</guid><description>&lt;p&gt;Net Matroyshka was one of our &amp;ldquo;1337&amp;rdquo; tagged challenges for the 2021 BSidesSF
CTF. This indicated it was particularly hard, and our players can probably
confirm that.&lt;/p&gt;
&lt;p&gt;If you haven&amp;rsquo;t played our CTF in the past, you might not be familiar with the
Matryoshka name. (Yep, I misspelled Matryoshka this year and didn&amp;rsquo;t catch it
before we launched.) It refers to the nesting &lt;a href="https://en.wikipedia.org/wiki/Matryoshka_doll"&gt;Matryoshka
dolls&lt;/a&gt;, and we&amp;rsquo;ve been doing a
series of challenges where they contain layers to be solved, often by different
encodings, formats, etc. This year, it was layers of PCAPs for some network
forensics challenges.&lt;/p&gt;</description></item><item><title>BSidesSF 2021 CTF: CuteSrv (Author Writeup)</title><link>https://systemoverlord.com/2021/03/08/bsidessf-2021-ctf-cutesrv-author-writeup.html</link><pubDate>Mon, 08 Mar 2021 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2021/03/08/bsidessf-2021-ctf-cutesrv-author-writeup.html</guid><description>&lt;p&gt;I authored the BSidesSF 2021 CTF Challenge &amp;ldquo;CuteSrv&amp;rdquo;, which is a service to
display cute pictures. The description from the scoreboard:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Last year was pretty tough for all of us. I built this service of cute photos
to help cheer you up. We do moderate for cuteness, so no inappropriate photos
please!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Like my other write-ups, I&amp;rsquo;ll do this from the perspective of a player playing
through and try not to assume internal knowledge.&lt;/p&gt;</description></item><item><title>BSidesSF 2021 CTF: Encrypted Bin (Author Writeup)</title><link>https://systemoverlord.com/2021/03/08/bsidessf-2021-ctf-encryptbin-author-writeup.html</link><pubDate>Mon, 08 Mar 2021 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2021/03/08/bsidessf-2021-ctf-encryptbin-author-writeup.html</guid><description>&lt;p&gt;I was the author for the BSidesSF 2021 CTF Challenge &amp;ldquo;Encrypted Bin&amp;rdquo;, which is
an encrypted pastebin service. The description from the scoreboard:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I&amp;rsquo;ve always wanted to build an encrypted pastebin service.
Hope I&amp;rsquo;ve done it correctly. (Look in &lt;code&gt;/home/flag/&lt;/code&gt; for the flag.)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I thought I&amp;rsquo;d do a walk through of how I expected players to solve the
challenge, so I&amp;rsquo;ll write this as if I&amp;rsquo;m playing the challenge.&lt;/p&gt;
&lt;p&gt;Visiting the web service, we find an upload page for text and not much else.
When we perform an upload, we see that we&amp;rsquo;re redirected to a page to view the
encrypted upload:&lt;/p&gt;</description></item><item><title>BSides SF 2020 CTF: Infrastructure Engineering and Lessons Learned</title><link>https://systemoverlord.com/2020/02/27/bsides-sf-2020-ctf-infrastructure-engineering.html</link><pubDate>Thu, 27 Feb 2020 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2020/02/27/bsides-sf-2020-ctf-infrastructure-engineering.html</guid><description>&lt;p&gt;Last weekend, I had the pleasure of running the BSides San Francisco CTF along
with friends and co-conspirators &lt;a href="https://twitter.com/itsc0rg1"&gt;c0rg1&lt;/a&gt;,
&lt;a href="https://twitter.com/bmenrigh"&gt;symmetric&lt;/a&gt; and
&lt;a href="https://twitter.com/iagox86"&gt;iagox86&lt;/a&gt;. This is something like the 4th or 5th
year in a row that I&amp;rsquo;ve been involved in this, and every year, we try to do a
better job than the year before, but we also try to do new things and push the
boundaries. I&amp;rsquo;m going to review some of the infrastructure we used, challenges
we faced, and lessons we learned for next year.&lt;/p&gt;</description></item><item><title>Running the BSides SF 2019 CTF</title><link>https://systemoverlord.com/2019/03/10/running-the-bsides-sf-2019-ctf.html</link><pubDate>Sun, 10 Mar 2019 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2019/03/10/running-the-bsides-sf-2019-ctf.html</guid><description>&lt;p&gt;I&amp;rsquo;ve just written a &lt;a href="https://bsidessf.org/news/2019/03/running-the-bsides-sf-2019-ctf"&gt;post for the BSidesSF
blog&lt;/a&gt; about
running the BSidesSF 2019 CTF. Check it out and feel free to get in touch if
you have feedback.&lt;/p&gt;</description></item><item><title>BSides SF CTF Author Writeup: Flagsrv</title><link>https://systemoverlord.com/2019/03/08/bsides-sf-ctf-author-writeup-flagsrv.html</link><pubDate>Fri, 08 Mar 2019 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2019/03/08/bsides-sf-ctf-author-writeup-flagsrv.html</guid><description>&lt;p&gt;Flagsrv was a 300 point web challenge in this year&amp;rsquo;s BSidesSF CTF. The
description was a simple one:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We&amp;rsquo;ve built a service for the sole purpose of serving up flags!&lt;/p&gt;
&lt;p&gt;The account you want is named &amp;lsquo;flag&amp;rsquo;.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>BSides SF CTF Author Writeup: Cloud2Clown</title><link>https://systemoverlord.com/2019/03/07/bsides-sf-ctf-author-writeup-cloud2clown.html</link><pubDate>Thu, 07 Mar 2019 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2019/03/07/bsides-sf-ctf-author-writeup-cloud2clown.html</guid><description>&lt;h2 id="the-challenge"&gt;The Challenge&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Sometimes you see marketing materials that use the word cloud to the point
that it starts to lose all meaning. This service allows you to fix that with
clowns instead of clouds. Note: there are 2 flags, they should be clearly
labeled.&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Pros vs Joes CTF: The Evolution of Blue Teams</title><link>https://systemoverlord.com/2018/06/19/pros-vs-joes-ctf-the-evolution-of-blue-teams.html</link><pubDate>Tue, 19 Jun 2018 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2018/06/19/pros-vs-joes-ctf-the-evolution-of-blue-teams.html</guid><description>&lt;p&gt;&lt;a href="http://prosversusjoes.net/"&gt;Pros v Joes CTF&lt;/a&gt; is a CTF that holds a special
place in my heart. Over the years, I&amp;rsquo;ve moved from playing in the 1st CTF as a
day-of pickup player (signing up at the conference) to a Blue Team Pro, to core
CTF staff. It&amp;rsquo;s been an exciting journey, and Red Teaming there is about the
only role I haven&amp;rsquo;t held. (Which is somewhat ironic given that my day job is a
red team lead.) As Blue teams have just formed, and I&amp;rsquo;m not currently attached
to any single team, I wanted to share my thoughts on the evolution of Blue
teaming in this unique CTF. In many ways, this will resemble the &lt;a href="https://systemoverlord.com/2015/08/15/blue-team-players-guide-for-pros-vs-joes-ctf/"&gt;Blue Team
player&amp;rsquo;s guide&lt;/a&gt; I
wrote about 3 years ago, but will be based on the evolution of the game and of
the industry itself. That post remains relevant, and I encourage you to read it
as well.&lt;/p&gt;</description></item><item><title>BSidesSF CTF 2018: Coder Series (Author's PoV)</title><link>https://systemoverlord.com/2018/04/21/bsidessf-ctf-2018-coder-series-authors-pov.html</link><pubDate>Sat, 21 Apr 2018 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2018/04/21/bsidessf-ctf-2018-coder-series-authors-pov.html</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;As the author of the &amp;ldquo;coder&amp;rdquo; series of challenges (Intel Coder, ARM Coder, Poly
Coder, and OCD Coder) in the recent BSidesSF CTF, I wanted to share my
perspective on the challenges. I can&amp;rsquo;t tell if the challenges were
uninteresting, too hard, or both, but they were solved by far fewer teams than I
had expected. (And than we had rated the challenges for when scoring them.)&lt;/p&gt;
&lt;p&gt;The entire series of challenges were based on the premise &amp;ldquo;give me your
shellcode and I&amp;rsquo;ll run it&amp;rdquo;, but with some limitations. Rather than forcing
players to find and exploit a vulnerability, we wanted to teach players about
dealing with restricted environments like sandboxes, unusual architectures, and
situations where your shellcode might be manipulated by the process before it
runs.&lt;/p&gt;</description></item><item><title>Hacker Summer Camp 2017: Pros vs Joes CTF</title><link>https://systemoverlord.com/2017/07/31/hacker-summer-camp-2017-pros-vs-joes-ctf.html</link><pubDate>Mon, 31 Jul 2017 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2017/07/31/hacker-summer-camp-2017-pros-vs-joes-ctf.html</guid><description>&lt;p&gt;I&amp;rsquo;ve returned from this year&amp;rsquo;s edition of Hacker Summer Camp, and while I&amp;rsquo;m
completely and utterly exhausted, I wanted to get my thoughts about this year&amp;rsquo;s
events out before I completely forget what happened.&lt;/p&gt;
&lt;p&gt;The Pros vs Joes CTF was, yet again, a high quality event despite the usual
bumps and twists. This was the largest PvJ ever, with more than 80 people
involved between Blue Pros, Blue Joes, Red Cell, Grey Cell, and Gold Cell. Each
blue team had 11 players between the two Pros and 9 Joes, making them slightly
larger than in years past. (Though I believe that&amp;rsquo;s a temporary &amp;ldquo;feature&amp;rdquo; of
this year&amp;rsquo;s game.)&lt;/p&gt;</description></item><item><title>DEF CON Quals 2017: beatmeonthedl</title><link>https://systemoverlord.com/2017/04/30/def-con-quals-2017-beatmeonthedl.html</link><pubDate>Sun, 30 Apr 2017 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2017/04/30/def-con-quals-2017-beatmeonthedl.html</guid><description>&lt;p&gt;I played in the DEF CON quals CTF this weekend, and happened to find the
challenge &lt;code&gt;beatmeonthedl&lt;/code&gt; particularly interesting, even if it was in the
&amp;ldquo;Baby&amp;rsquo;s First&amp;rdquo; category. (DC Quals Baby&amp;rsquo;s Firsts aren&amp;rsquo;t as easy as one might
think&amp;hellip;)&lt;/p&gt;
&lt;p&gt;So we download the binary and take a look. I&amp;rsquo;m using
&lt;a href="https://binary.ninja"&gt;Binary Ninja&lt;/a&gt; lately, it&amp;rsquo;s a great tool from the Vector35
guys, and at the right price compared to IDA for playing CTF. :) So I open up
the binary, and notice a few things right away. This is an x86-64 ELF binary
with essentially none of the standard security features enabled:&lt;/p&gt;</description></item><item><title>SANS Holiday Hack Challenge 2016</title><link>https://systemoverlord.com/2017/01/05/sans-holiday-hack-challenge.html</link><pubDate>Thu, 05 Jan 2017 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2017/01/05/sans-holiday-hack-challenge.html</guid><description>&lt;ul&gt;
&lt;li&gt;Table of Contents
{:toc}&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;This is my second time playing the SANS holiday hack challenge. It was a lot of fun, and probably took me about 8-10 hours over a period of 2-3 days, &lt;strong&gt;not&lt;/strong&gt; including this writeup. Ironically, this writeup took me longer than actually completing the challenge &amp;ndash; which brings me to a note about some of the examples in the writeup. Please ignore any dates or timelines you might see in screengrabs and other notes &amp;ndash; I was so engrossed in &lt;strong&gt;playing&lt;/strong&gt; that I did a terrible job of documenting as I went along, so a lot of these I went back and did a 2nd time (of course, knowing the solution made it a bit easier) so I could provide the quality of writeup I was hoping to.&lt;/p&gt;
&lt;p&gt;Most importantly, a huge shout out to all the SANS Counter Hack guys &amp;ndash; I can only imagine how much work goes into building an educational game like this and making the challenges realistic and engrossing. I’ve built wargames &amp;amp; similar apps for work, but never had to build them into a story &amp;ndash; let across a story that spans multiple years. I tip my hat to their dedication and success!&lt;/p&gt;</description></item><item><title>HSC Part 2: Pros versus Joes CTF</title><link>https://systemoverlord.com/2016/08/10/hsc-part-2-pros-versus-joes-ctf.html</link><pubDate>Wed, 10 Aug 2016 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2016/08/10/hsc-part-2-pros-versus-joes-ctf.html</guid><description>&lt;p&gt;Continuing my &lt;a href="https://systemoverlord.com/2016/08/09/hsc-part-i-hardware-hacking-with-the-hardsploit-framework.html"&gt;Hacker Summer Camp Series&lt;/a&gt;,
I&amp;rsquo;m going to talk about one of my Hacker Summer Camp traditions.
That&amp;rsquo;s right, it&amp;rsquo;s the Pros versus Joes CTF at BSidesLV. I&amp;rsquo;ve
written &lt;a href="https://systemoverlord.com/2015/08/12/hacker-summer-camp-2015-bsides-lv-pros-vs-joes-ctf"&gt;about my experiences&lt;/a&gt;
and even a &lt;a href="https://systemoverlord.com/2015/08/15/blue-team-players-guide-for-pros-vs-joes-ctf"&gt;player&amp;rsquo;s guide&lt;/a&gt;
before, but this was my first year as a Pro, captaining a blue team (The SYNdicate).&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s important to me to start by congratulating all of the Joes &amp;ndash; this is an
intense two days, and your pushing through it is a feat in and of itself. In
past years, we had players burn out early, but I&amp;rsquo;m proud to say that nearly all
of the Joes (from every team) worked hard until the final scorched earth. Every
one of the players on my team was outstanding and worked their ass off for this
CTF, and it paid off, as The SYNdicate was declared the victors of the 2016
BSides LV Pros versus Joes.&lt;/p&gt;</description></item><item><title>ASIS CTF 2016: 3magic</title><link>https://systemoverlord.com/2016/05/08/asis-ctf-2016-3magic.html</link><pubDate>Sun, 08 May 2016 22:30:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2016/05/08/asis-ctf-2016-3magic.html</guid><description>&lt;p&gt;We&amp;rsquo;re directed to a web application that provides us with the ability to ping an
arbitrary host. Like many such web interfaces, this one is vulnerable to
&lt;a href="https://www.owasp.org/index.php/Command_Injection"&gt;command injection&lt;/a&gt;. We can
provide flags like -v to get the version of ping being used, but inserting other
characters, like &lt;code&gt;|&lt;/code&gt;, &lt;code&gt;;&lt;/code&gt;, or &lt;code&gt;$()&lt;/code&gt; result in a response of &lt;code&gt;invalid character detected&lt;/code&gt;. Notably, so do spaces and tabs, significantly limiting the ability
to run commands (we&amp;rsquo;ll see how to get around this shortly).&lt;/p&gt;</description></item><item><title>ASIS CTF 2016: Binary Cloud</title><link>https://systemoverlord.com/2016/05/08/asis-ctf-2016-binary-cloud.html</link><pubDate>Sun, 08 May 2016 22:30:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2016/05/08/asis-ctf-2016-binary-cloud.html</guid><description>&lt;p&gt;Binary Cloud claims &amp;ldquo;Now you can upload any types of files, temporarily.&amp;rdquo; Let&amp;rsquo;s
see what this means.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://systemoverlord.com/img/blog/asis-2016/binary_cloud.png" alt="binary cloud"&gt;&lt;/p&gt;
&lt;p&gt;Rule one of web challenges: check &lt;code&gt;robots.txt&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;User-Agent: *
Disallow: /
Disallow: /debug.php
Disallow: /cache
Disallow: /uploads
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;So we have some interesting paths there. &lt;code&gt;debug.php&lt;/code&gt; turns out to be a
&lt;code&gt;phpinfo()&lt;/code&gt; page, informing us it&amp;rsquo;s &amp;lsquo;PHP Version 7.0.4-7ubuntu2&amp;rsquo;. Interesting,
pretty new version. I play around with the app briefly to see how it&amp;rsquo;s going to
behave, and notice any file ending in &lt;code&gt;.php&lt;/code&gt; is prohibited. No direct &lt;code&gt;.php&lt;/code&gt;
script upload for us.&lt;/p&gt;</description></item><item><title>ASIS CTF 2016: firtog</title><link>https://systemoverlord.com/2016/05/08/asis-ctf-2016-firtog.html</link><pubDate>Sun, 08 May 2016 22:30:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2016/05/08/asis-ctf-2016-firtog.html</guid><description>&lt;p&gt;Firtog gives us a pcap file that you can quickly see features several TCP
sessions containing the git server protocol. The binary protocol looks like
this in the follow TCP stream mode:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://systemoverlord.com/img/blog/asis-2016/firtog_wireshark.png" alt="firtog wireshark"&gt;&lt;/p&gt;
&lt;p&gt;Switching Wireshark to decode this as &amp;ldquo;Git&amp;rdquo; &lt;em&gt;almost&lt;/em&gt; works, but there&amp;rsquo;s a trick.
If we read the &lt;a href="https://github.com/git/git/blob/master/Documentation/technical/pack-protocol.txt"&gt;git pack
protocol&lt;/a&gt;
documentation, we&amp;rsquo;ll see there&amp;rsquo;s a special side-band mode here, where the length
field is followed with a &amp;lsquo;1&amp;rsquo;, &amp;lsquo;2&amp;rsquo;, or &amp;lsquo;3&amp;rsquo; byte indicating the type of data to
follow. We only want the data from sideband &amp;lsquo;1&amp;rsquo;, which is the actual packfile
data. So we&amp;rsquo;ll grab that data using Wireshark and write it to a file, fixing up
the last byte with quick python work.&lt;/p&gt;</description></item><item><title>PlaidCTF 2016: Butterfly</title><link>https://systemoverlord.com/2016/04/17/plaidctf-2016-butterfly.html</link><pubDate>Sun, 17 Apr 2016 00:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2016/04/17/plaidctf-2016-butterfly.html</guid><description>&lt;p&gt;Butterfly was a 150 point pwnable in the 2016 PlaidCTF. Basic properties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;x86_64&lt;/li&gt;
&lt;li&gt;Not PIE&lt;/li&gt;
&lt;li&gt;Assume ASLR, NX&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It turns out to be a very simple binary, all the relevant code in one function
(&lt;code&gt;main&lt;/code&gt;), and using only a handful of libc functions. The first thing that
jumped out to me was two calls to &lt;code&gt;mprotect&lt;/code&gt;, at the same address. I spent some
time looking at the disassembly and figuring out what was going on. The
relevant portions can be seen here:&lt;/p&gt;</description></item><item><title>CSAW Quals 2015: Sharpturn (aka Forensics 400)</title><link>https://systemoverlord.com/2015/09/21/csaw-quals-2015-sharpturn-aka-forensics-400/</link><pubDate>Mon, 21 Sep 2015 21:33:58 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2015/09/21/csaw-quals-2015-sharpturn-aka-forensics-400/</guid><description>&lt;p&gt;The text was just:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I think my SATA controller is dying.&lt;/p&gt;
&lt;p&gt;HINT: &lt;code&gt;git fsck -v&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And included a tarball containing a git repository. If you ran the suggested &lt;code&gt;git fsck -v&lt;/code&gt;, you&amp;rsquo;d discover that 3 commits were corrupt:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;:::text
Checking HEAD link
Checking object directory
Checking directory ./objects/2b
Checking directory ./objects/2e
Checking directory ./objects/35
Checking directory ./objects/4a
Checking directory ./objects/4c
Checking directory ./objects/7c
Checking directory ./objects/a1
Checking directory ./objects/cb
Checking directory ./objects/d5
Checking directory ./objects/d9
Checking directory ./objects/e5
Checking directory ./objects/ef
Checking directory ./objects/f8
Checking tree 2bd4c81f7261a60ecded9bae3027a46b9746fa4f
Checking commit 2e5d553f41522fc9036bacce1398c87c2483c2d5
error: sha1 mismatch 354ebf392533dce06174f9c8c093036c138935f3
error: 354ebf392533dce06174f9c8c093036c138935f3: object corrupt or missing
Checking commit 4a2f335e042db12cc32a684827c5c8f7c97fe60b
Checking tree 4c0555b27c05dbdf044598a0601e5c8e28319f67
Checking commit 7c9ba8a38ffe5ce6912c69e7171befc64da12d4c
Checking tree a1607d81984206648265fbd23a4af5e13b289f83
Checking tree cb6c9498d7f33305f32522f862bce592ca4becd5
Checking commit d57aaf773b1a8c8e79b6e515d3f92fc5cb332860
error: sha1 mismatch d961f81a588fcfd5e57bbea7e17ddae8a5e61333
error: d961f81a588fcfd5e57bbea7e17ddae8a5e61333: object corrupt or missing
Checking blob e5e5f63b462ec6012bc69dfa076fa7d92510f22f
Checking blob efda2f556de36b9e9e1d62417c5f282d8961e2f8
error: sha1 mismatch f8d0839dd728cb9a723e32058dcc386070d5e3b5
error: f8d0839dd728cb9a723e32058dcc386070d5e3b5: object corrupt or missing
Checking connectivity (32 objects)
Checking a1607d81984206648265fbd23a4af5e13b289f83
Checking e5e5f63b462ec6012bc69dfa076fa7d92510f22f
Checking 4a2f335e042db12cc32a684827c5c8f7c97fe60b
Checking cb6c9498d7f33305f32522f862bce592ca4becd5
Checking 4c0555b27c05dbdf044598a0601e5c8e28319f67
Checking 2bd4c81f7261a60ecded9bae3027a46b9746fa4f
Checking 2e5d553f41522fc9036bacce1398c87c2483c2d5
Checking efda2f556de36b9e9e1d62417c5f282d8961e2f8
Checking 354ebf392533dce06174f9c8c093036c138935f3
Checking d57aaf773b1a8c8e79b6e515d3f92fc5cb332860
Checking f8d0839dd728cb9a723e32058dcc386070d5e3b5
Checking d961f81a588fcfd5e57bbea7e17ddae8a5e61333
Checking 7c9ba8a38ffe5ce6912c69e7171befc64da12d4c
missing blob 354ebf392533dce06174f9c8c093036c138935f3
missing blob f8d0839dd728cb9a723e32058dcc386070d5e3b5
missing blob d961f81a588fcfd5e57bbea7e17ddae8a5e61333
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Well, crap. How do we fix these? Well, I guess the good news is that the git blob format is &lt;a href="https://git-scm.com/book/en/v2/Git-Internals-Git-Objects"&gt;fairly well documented&lt;/a&gt;. The SHA-1 of a blob is computed by taking the string &lt;code&gt;blob &lt;/code&gt;, appending the length of the blob as an ASCII-encoded decimal value, a null character, and then the blob contents itself: &lt;code&gt;blob &amp;lt;blob_length&amp;gt;\0&amp;lt;blob_data&amp;gt;&lt;/code&gt;. The final blob value as written in the objects directory of the git repository is the zlib-compressed version of this string. This leads us to these useful functions for reading, writing, and hashing git blobs in python:&lt;/p&gt;</description></item><item><title>Blue Team Player's Guide for Pros vs Joes CTF</title><link>https://systemoverlord.com/2015/08/15/blue-team-players-guide-for-pros-vs-joes-ctf/</link><pubDate>Sat, 15 Aug 2015 19:15:36 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2015/08/15/blue-team-players-guide-for-pros-vs-joes-ctf/</guid><description>&lt;p&gt;I&amp;rsquo;ve played in Dichotomy&amp;rsquo;s &lt;a href="http://www.prosversusjoes.net/"&gt;Pros v Joes&lt;/a&gt; CTF for
the past 3 years &amp;ndash; which, I&amp;rsquo;m told, makes me the only player to have done so.
It&amp;rsquo;s an incredible CTF and dramatically different from any other that I&amp;rsquo;ve ever
played. Dichotomy and I were having lunch at DEF CON when he said &amp;ldquo;You know
what would be cool? A blue team player&amp;rsquo;s guide.&amp;rdquo; So, I give to you, the blue
team player&amp;rsquo;s guide to the Pros v Joes CTF.&lt;/p&gt;</description></item><item><title>Hacker Summer Camp 2015: DEF CON</title><link>https://systemoverlord.com/2015/08/14/hacker-summer-camp-2015-def-con/</link><pubDate>Fri, 14 Aug 2015 03:11:12 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2015/08/14/hacker-summer-camp-2015-def-con/</guid><description>&lt;p&gt;So, following up on my post on BSides LV 2015, I thought I&amp;rsquo;d give a summary of DEF CON 23. I can&amp;rsquo;t cover everything I did (after all, what happens in Vegas, stays in Vegas&amp;hellip; mostly) but I&amp;rsquo;m going to cover the biggest highlights as I saw them.&lt;/p&gt;
&lt;p&gt;The first thing to know about my take on DEF CON is that DEF CON is a one-of-a-kind event, somewhere between a security conference and a trip to Mecca. It&amp;rsquo;s one part conference, one part party, and one part social experience. The second thing to know about my take on DEF CON is that I&amp;rsquo;m not there to listen to people speak. If I was just there to listen to people speak, there&amp;rsquo;s the videos posted to YouTube or available on streaming/DVD from the conference recordings. I&amp;rsquo;m at DEF CON to &lt;em&gt;participate&lt;/em&gt;, &lt;em&gt;meet people&lt;/em&gt;, and &lt;strong&gt;hack all the things&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Hacker Summer Camp 2015: BSides LV &amp; Pros vs Joes CTF</title><link>https://systemoverlord.com/2015/08/12/hacker-summer-camp-2015-bsides-lv-pros-vs-joes-ctf/</link><pubDate>Wed, 12 Aug 2015 00:13:58 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2015/08/12/hacker-summer-camp-2015-bsides-lv-pros-vs-joes-ctf/</guid><description>&lt;p&gt;I&amp;rsquo;ve just returned from Las Vegas for the annual &amp;ldquo;hacker summer camp&amp;rdquo;, and am
going to be putting up a series of blog posts covering the week. Tuesday and
Wednesday were &lt;a href="https://bsideslv.org"&gt;BSides Las Vegas&lt;/a&gt;. For the uninitiated,
BSides was founded as the &amp;ldquo;flip side&amp;rdquo; to Black Hat, and has spawned into a
series of community organized and oriented conferences around the globe.
Entrance to BSides LV was free, but you could guarantee a spot by donating in
advance if you were so inclined. (I was.)&lt;/p&gt;</description></item><item><title>Getting Started in CTFs</title><link>https://systemoverlord.com/2014/09/14/getting-started-in-ctfs/</link><pubDate>Sun, 14 Sep 2014 20:07:10 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/09/14/getting-started-in-ctfs/</guid><description>&lt;p&gt;My last post was about getting started in a career in information security. This post is about the sport end of information security: Capture the Flag (CTFs).&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d played around with some wargames (&lt;a href="http://smashthestack.org/"&gt;Smash the Stack&lt;/a&gt;, &lt;a href="http://overthewire.org/wargames/"&gt;Over the Wire&lt;/a&gt;, and &lt;a href="https://www.hackthissite.org/"&gt;Hack this Site&lt;/a&gt;) before, but my first real CTF (timed, competitive, etc.) was the &lt;a href="https://systemoverlord.com/2013/03/02/bsides-sf-ctf-by-mad-security-part-1/"&gt;CTF run by Mad Security at BSides SF 2013&lt;/a&gt;. By some bizarre twist of fate, I ended up winning the CTF, and I was hooked. I&amp;rsquo;ve probably played in about 30 CTFs since, most of them online with the team &lt;a href="https://ctftime.org/team/4710"&gt;Shadow Cats&lt;/a&gt;. It&amp;rsquo;s been a bumpy ride, but I&amp;rsquo;ve learned a lot about a variety of topics by doing this.&lt;/p&gt;</description></item><item><title>Secuinside Quals 2014: Simple Login</title><link>https://systemoverlord.com/2014/06/04/secuinside-quals-2014-simple-login/</link><pubDate>Wed, 04 Jun 2014 02:08:25 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/06/04/secuinside-quals-2014-simple-login/</guid><description>&lt;p&gt;In this challenge, we received the source for a site with a pretty basic login functionality. Aside from some boring forms, javascript, and css, we have this PHP library for handling the session management:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!php
&amp;lt;?
	class common{
		public function getidx($id){
			$id = mysql_real_escape_string($id);
			$info = mysql_fetch_array(mysql_query(&amp;quot;select idx from member where id='&amp;quot;.$id.&amp;quot;'&amp;quot;));
			return $info[0];
		}

		public function getpasswd($id){
			$id = mysql_real_escape_string($id);
			$info = mysql_fetch_array(mysql_query(&amp;quot;select password from member where id='&amp;quot;.$id.&amp;quot;'&amp;quot;));
			return $info[0];
		}

		public function islogin(){
			if( preg_match(&amp;quot;/[^0-9A-Za-z]/&amp;quot;, $_COOKIE['user_name']) ){
	 			exit(&amp;quot;cannot be used Special character&amp;quot;);
			}

			if( $_COOKIE['user_name'] == &amp;quot;admin&amp;quot; )	return 0;

			$salt = file_get_contents(&amp;quot;../../long_salt.txt&amp;quot;);

			if( hash('crc32',$salt.'|'.(int)$_COOKIE['login_time'].'|'.$_COOKIE['user_name']) == $_COOKIE['hash'] ){
				return 1;
			}

			return 0;
		}

		public function autologin(){

		}

		public function isadmin(){
			if( $this-&amp;gt;getidx($_COOKIE['user_name']) == 1){
				return 1;
			}

			return 0;
		}

		public function insertmember($id, $password){
			$id = mysql_real_escape_string($id);
			mysql_query(&amp;quot;insert into member(id, password) values('&amp;quot;.$id.&amp;quot;', '&amp;quot;.$password.&amp;quot;')&amp;quot;) or die();

			return 1;
		}
	}
?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Some first impressions:&lt;/p&gt;</description></item><item><title>Secuinside Quals 2014: Shellcode 100</title><link>https://systemoverlord.com/2014/06/02/secuinside-quals-2014-shellcode-100/</link><pubDate>Mon, 02 Jun 2014 04:57:01 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/06/02/secuinside-quals-2014-shellcode-100/</guid><description>&lt;p&gt;This is a level that, at first, seemed like it would be extremely simple, but then turned out to be far more complicated than expected. We were provided a zip file containing a python script and an elf binary.&lt;/p&gt;
&lt;p&gt;Disassembling the binary reveals a very basic program:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/ (fcn) sym.main 165
| 0x0804847d 55 push ebp
| 0x0804847e 89e5 mov ebp, esp
| 0x08048480 83e4f0 and esp, 0xfffffff0
| 0x08048483 83ec30 sub esp, 0x30
| 0x08048486 8b450c mov eax, [ebp+0xc]
| 0x08048489 83c004 add eax, 0x4
| 0x0804848c 8b00 mov eax, [eax]
| 0x0804848e 890424 mov [esp], eax
| ; CODE (CALL) XREF from 0x08048376 (fcn.08048376)
| ; CODE (CALL) XREF from 0x08048370 (fcn.08048366)
| 0x08048491 e8dafeffff call 0x108048370 ; (sym.imp.atoi)
| sym.imp.atoi(unk)
| 0x08048496 89442428 mov [esp+0x28], eax
| 0x0804849a c7442424000. mov dword [esp+0x24], 0x0
| 0x080484a2 c7442408040. mov dword [esp+0x8], 0x4
| 0x080484aa 8d442424 lea eax, [esp+0x24]
| 0x080484ae 89442404 mov [esp+0x4], eax
| 0x080484b2 8b442428 mov eax, [esp+0x28]
| 0x080484b6 890424 mov [esp], eax
| ; CODE (CALL) XREF from 0x08048330 (fcn.0804832c)
| 0x080484b9 e872feffff call 0x108048330 ; (sym.imp.read)
| sym.imp.read()
| 0x080484be 8b442424 mov eax, [esp+0x24]
| 0x080484c2 c7442414000. mov dword [esp+0x14], 0x0
| 0x080484ca c7442410fff. mov dword [esp+0x10], 0xffffffff
| 0x080484d2 c744240c220. mov dword [esp+0xc], 0x22
| 0x080484da c7442408070. mov dword [esp+0x8], 0x7
| 0x080484e2 89442404 mov [esp+0x4], eax
| 0x080484e6 c7042400000. mov dword [esp], 0x0
| ; CODE (CALL) XREF from 0x08048350 (fcn.08048346)
| 0x080484ed e85efeffff call 0x108048350 ; (sym.imp.mmap)
| sym.imp.mmap()
| 0x080484f2 8944242c mov [esp+0x2c], eax
| 0x080484f6 8b442424 mov eax, [esp+0x24]
| 0x080484fa 89442408 mov [esp+0x8], eax
| 0x080484fe 8b44242c mov eax, [esp+0x2c]
| 0x08048502 89442404 mov [esp+0x4], eax
| 0x08048506 8b442428 mov eax, [esp+0x28]
| 0x0804850a 890424 mov [esp], eax
| 0x0804850d e81efeffff call 0x108048330 ; (sym.imp.read)
| sym.imp.read()
| 0x08048512 31c0 xor eax, eax
| 0x08048514 31c9 xor ecx, ecx
| 0x08048516 31d2 xor edx, edx
| 0x08048518 31db xor ebx, ebx
| 0x0804851a 31f6 xor esi, esi
| 0x0804851c 31ff xor edi, edi
\ 0x0804851e ff64242c jmp dword [esp+0x2c]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It takes a single argument, an integer, which it uses as a file descriptor for input. It then reads 4 bytes from the file descriptor, mmap&amp;rsquo;s an anonymous block of memory of that size with RWX permissions, then reads that many bytes from the file descriptor into the mapped region, and finally jumps to the map region. So, in summary, read shellcode length, read shellcode, then jump to shellcode.&lt;/p&gt;</description></item><item><title>Secuinside Quals 2014: Javascript Jail (Misc 200)</title><link>https://systemoverlord.com/2014/06/02/secuinside-quals-2014-javascript-jail/</link><pubDate>Mon, 02 Jun 2014 03:43:33 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/06/02/secuinside-quals-2014-javascript-jail/</guid><description>&lt;p&gt;The challenge was pretty straightforward: connect to a service that&amp;rsquo;s running a Javascript REPL, and extract the flag. You were provided a check function that was created by the checker function given below:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!javascript
function checker(flag, myRand) {
 return function (rand) {
 function stage1() {
 var a = Array.apply(null, new Array(Math.floor(Math.random() * 20) + 10)).map(function () {return Math.random() * 0x10000;});
 var b = rand(a.length);

 if (!Array.isArray(b)) {
 print(&amp;quot;You're a cheater!&amp;quot;);
 return false;
 }

 if (b.length &amp;lt; a.length) {
 print(&amp;quot;hmm.. too short..&amp;quot;);
 for (var i = 0, n = a.length - b.length; i &amp;lt; n; i++) {
 delete b[b.length];
 b[b.length] = [Math.random() * 0x10000];
 }
 } else if (b.length &amp;gt; a.length) {
 print(&amp;quot;hmm.. too long..&amp;quot;);
 for (var i = 0, n = b.length - a.length; i &amp;lt; n; i++)
 Array.prototype.pop.apply(b);
 }

 for (var i = 0, n = b.length; i &amp;lt; n; i++) {
 if (a[i] != b[i]) {
 print(&amp;quot;ddang~~&amp;quot;);
 return false;
 }
 }

 return true;
 }

 function stage2() {
 var a = Array.apply(null, new Array((myRand() % 20) + 10)).map(function () {return myRand() % 0x10000;});
 var b = rand(a.length);

 if (!Array.isArray(b)) {
 print(&amp;quot;You're a cheater!&amp;quot;);
 return false;
 }

 if (b.length &amp;lt; a.length) {
 print(&amp;quot;hmm.. too short..&amp;quot;);
 for (var i = 0, n = a.length - b.length; i &amp;lt; n; i++) {
 delete b[b.length];
 b[b.length] = [Math.random() * 0x10000];
 }
 } else if (b.length &amp;gt; a.length) {
 print(&amp;quot;hmm.. too long..&amp;quot;);
 for (var i = 0, n = b.length - a.length; i &amp;lt; n; i++)
 Array.prototype.pop.apply(b);
 }

 for (var i = 0, n = b.length; i &amp;lt; n; i++) {
 if (a[i] != b[i]) {
 print(&amp;quot;ddang~~&amp;quot;);
 return false;
 }
 }

 return true;
 }

 print(&amp;quot;stage1&amp;quot;);

 if (!stage1())
 return;

 print(&amp;quot;stage2&amp;quot;);

 if (!stage2())
 return;

 print(&amp;quot;awesome!&amp;quot;);
 return flag;
 };
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you can tell, there are two nearly identical stages that create an array of random length (10-30) consisting of random values. The only difference is in how the random values are generated: once from Math.random, and, in stage 2, from a function provided by the factory function. This function was not available to us to reverse the functionality of.&lt;/p&gt;</description></item><item><title>Weekly Reading List for 5/23/14</title><link>https://systemoverlord.com/2014/05/23/weekly-reading-list-for-52314/</link><pubDate>Fri, 23 May 2014 07:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/05/23/weekly-reading-list-for-52314/</guid><description>&lt;p&gt;###Radare2 Book
Maijin on GitHub is in the process of putting together an &lt;a href="https://radare.gitbooks.io/radare2book/"&gt;online book for Radare2&lt;/a&gt;. I&amp;rsquo;ve been looking for a good resource for using Radare2, and this is a great start.&lt;/p&gt;
&lt;p&gt;###Reverse Engineering for Beginners
Dennis Yurichev has a &lt;a href="http://yurichev.com/RE-book.html"&gt;free eBook on Reverse Engineering&lt;/a&gt;. I haven&amp;rsquo;t gotten through it yet, but it looks interesting, and you can&amp;rsquo;t beat the price.&lt;/p&gt;
&lt;p&gt;###Hacker Playbook
Finally, I finished up &lt;a href="http://www.amazon.com/gp/product/1494932636/ref=as_li_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1494932636&amp;amp;linkCode=as2&amp;amp;tag=systemovecom-20"&gt;The Hacker Playbook: Practical Guide To Penetration Testing&lt;/a&gt; this week. You can find &lt;a href="https://systemoverlord.com/2014/05/21/book-review-the-hacker-playbook/"&gt;my full review here&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>DEF CON 22 CTF Quals: 3dttt</title><link>https://systemoverlord.com/2014/05/21/def-con-22-ctf-quals-3dttt/</link><pubDate>Wed, 21 May 2014 14:07:02 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/05/21/def-con-22-ctf-quals-3dttt/</guid><description>&lt;p&gt;Unlike most of the challenges in DC22 quals, this one required no binary exploitation, no reversing, just writing a little code. You needed to play 3-D Tic Tac Toe, and you needed to play fast. Unfortunately, I didn&amp;rsquo;t record the sessions, so I don&amp;rsquo;t have the example output.&lt;/p&gt;
&lt;p&gt;Basically, you just received an ASCII representation of each of the 3 boards making up the 3d-tic-tac-toe environment, and were prompted to provide x,y,z coordinates for your next move. However, you had only a very short period of time (fractions of a second) to send your move, so playing by hand was impossible. The winner of each board was the player with the most rows won, and it did go to the full 27 moves each time. Also, it&amp;rsquo;s important to note that the player always goes first, and that you have to win 50 rounds in order to receive the flag.&lt;/p&gt;</description></item><item><title>DEF CON 22 CTF Quals: Hackertool</title><link>https://systemoverlord.com/2014/05/19/def-con-22-ctf-quals-hackertool/</link><pubDate>Mon, 19 May 2014 03:32:11 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/05/19/def-con-22-ctf-quals-hackertool/</guid><description>&lt;p&gt;Hackertool was one of the &lt;code&gt;Baby&amp;rsquo;s First&lt;/code&gt; challenges in DEF CON CTF Quals this year, and provided you with a .torrent file, and asked you to download the file and MD5 it. Seems easy enough, so I knew there must be more to it. The torrent file itself was a whopping 4 MB in size, very large for a torrent file. Looking at it, we see it contains just one file, named &lt;code&gt;every_ip_address.txt&lt;/code&gt;, and the file is ~61GB in size. Hrrm, there must be an easier way than torrenting 61GB, especially at &amp;lt;1k/s.&lt;/p&gt;</description></item><item><title>Announcement: PwnableWeb Released</title><link>https://systemoverlord.com/2014/05/09/announcement-pwnableweb-released/</link><pubDate>Fri, 09 May 2014 00:11:58 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/05/09/announcement-pwnableweb-released/</guid><description>&lt;p&gt;In addition to my primary interest in the technical aspects of information security, I&amp;rsquo;m also a big fan of wargames &amp;amp; CTFs as educational tools, so a while back, I decided I wanted to build a web-based wargame and CTF scoreboard system. Today I am releasing the results of that, dubbed &lt;strong&gt;PwnableWeb&lt;/strong&gt;, under the Apache 2.0 License. It includes web-based wargame-style challenges and an accompanying scoreboard.&lt;/p&gt;
&lt;p&gt;###The Framework
Each vulnerable site is built on top of a small framework that provides common functionality, and also provides a framework for building a client for interactive exploitation. (It provides a target to exploit XSS and XSRF against.)&lt;/p&gt;</description></item><item><title>PlaidCTF 2014: Conclusion</title><link>https://systemoverlord.com/2014/04/14/plaidctf-2014-conclusion/</link><pubDate>Mon, 14 Apr 2014 17:30:42 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/04/14/plaidctf-2014-conclusion/</guid><description>&lt;p&gt;The 2014 edition of PlaidCTF was excellent, but I wish we&amp;rsquo;d been able to make it through more challenges. We cleared about 7 challenges, but really only two of them felt worth writing up. The others have been well documented elsewhere, no sense in rewriting the same thing.&lt;/p&gt;
&lt;p&gt;I liked how the challenges often required a series of exploits/techniques, this is much like what happens in the real world. I do wish I had spent more time on binary exploitation, attempting to get a solution to &lt;code&gt;_&lt;em&gt;nightmares&lt;/em&gt;_&lt;/code&gt; burned a lot of time.&lt;/p&gt;</description></item><item><title>PlaidCTF 2014: ReeKeeeee</title><link>https://systemoverlord.com/2014/04/14/plaidctf-2014-reekeeeee/</link><pubDate>Mon, 14 Apr 2014 06:46:01 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/04/14/plaidctf-2014-reekeeeee/</guid><description>&lt;p&gt;ReeKeeeeee was, by far, the most visually painful challenge in the CTF, with a flashing rainbow background on every page. Blocking scripts was clearly a win here. Like many of the challenges this year, it turned out to require multiple exploitation steps.&lt;/p&gt;
&lt;p&gt;ReeKeeeeee was a meme-generating service that allowed you to provide a URL to an image and text to overlay on the image. Source code was provided, and it was worth noting that it&amp;rsquo;s a Django app using the &lt;code&gt;django.contrib.sessions.serializers.PickleSerializer&lt;/code&gt; serializer. As the &lt;a href="https://docs.djangoproject.com/en/3.0/topics/http/sessions/"&gt;documentation for the serializer&lt;/a&gt; notes, &lt;strong&gt;If the SECRET_KEY is not kept secret and you are using the PickleSerializer, this can lead to arbitrary remote code execution.&lt;/strong&gt; So, maybe, can we get the SECRET_KEY?&lt;/p&gt;</description></item><item><title>PlaidCTF 2014: mtpox</title><link>https://systemoverlord.com/2014/04/14/plaidctf-mtpox/</link><pubDate>Mon, 14 Apr 2014 05:13:12 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/04/14/plaidctf-mtpox/</guid><description>&lt;p&gt;&lt;strong&gt;150 Point Web Challenge&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The Plague has traveled back in time to create a cryptocurrency before Satoshi does in an attempt to quickly gain the resources required for his empire. As you step out of your time machine, you learn his exchange has stopped trades, due to some sort of bug. However, if you could break into the database and show a different story of where the coins went, we might be able to stop The Plague.&lt;/p&gt;</description></item><item><title>Weekly Reading List for 4/4/14</title><link>https://systemoverlord.com/2014/04/04/weekly-reading-list-for-3114/</link><pubDate>Fri, 04 Apr 2014 07:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/04/04/weekly-reading-list-for-3114/</guid><description>&lt;p&gt;It&amp;rsquo;s been a while where I&amp;rsquo;ve been too busy even for any good reading, but we&amp;rsquo;re back to the reading lists!&lt;/p&gt;
&lt;h4 id="return-oriented-programming-rop"&gt;Return-Oriented Programming (ROP)&lt;/h4&gt;
&lt;p&gt;Code Arcana has an &lt;a href="http://codearcana.com/posts/2013/05/28/introduction-to-return-oriented-programming-rop.html"&gt;excellent introduction to ROP exploitation techniques&lt;/a&gt;. In addition to providing an introduction to the concept, it takes it through detailed implementation and debugging. I look forward to getting an opportunity to try it during the next CTF with a ROP challenge. (I&amp;rsquo;m guess PlaidCTF will offer such a chance.)&lt;/p&gt;</description></item><item><title>Boston Key Party: Mind Your Ps and Qs</title><link>https://systemoverlord.com/2014/03/10/boston-key-party-mind-your-ps-and-qs/</link><pubDate>Mon, 10 Mar 2014 21:29:13 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/03/10/boston-key-party-mind-your-ps-and-qs/</guid><description>&lt;p&gt;About a week old, but I thought I&amp;rsquo;d put together a writeup for mind your Ps and Qs because I thought it was an interesting challenge.&lt;/p&gt;
&lt;p&gt;You are provided 24 RSA public keys and 24 messages, and the messages are encrypted using RSA-OAEP using the private components to the keys. The flag is spread around the 24 messages.&lt;/p&gt;
&lt;p&gt;So, we begin with an analysis of the problem. If they&amp;rsquo;re using RSA-OAEP, then we&amp;rsquo;re not going to attack the ciphertext directly. While RSA-OAEP might be vulnerable to timing attacks, we&amp;rsquo;re not on a network service, and there are no known ciphertext-only attacks on RSA-OAEP. So how are the keys themselves? Looking at them, we have a ~1024 bit modulus:&lt;/p&gt;</description></item><item><title>Codegate 2014 Quals: 120</title><link>https://systemoverlord.com/2014/02/26/codegate-2014-quals-120/</link><pubDate>Wed, 26 Feb 2014 06:51:10 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/02/26/codegate-2014-quals-120/</guid><description>&lt;p&gt;From Codegate 2014 quals comes &amp;ldquo;120&amp;rdquo;. Provided is a web interface with a single text box and a link to the source, reproduced below:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!php
&amp;lt;?php
session_start();

$link = @mysql_connect('localhost', '', '');
@mysql_select_db('', $link);

function RandomString()
{
 $filename = &amp;quot;smash.txt&amp;quot;;
 $f = fopen($filename, &amp;quot;r&amp;quot;);
 $len = filesize($filename);
 $contents = fread($f, $len);
 $randstring = '';
 while( strlen($randstring)&amp;lt;30 ){
 $t = $contents[rand(0, $len-1)];
 if(ctype_lower($t)){
 $randstring .= $t;
 }
 }
 return $randstring;
}

$max_times = 120;

if ($_SESSION['cnt'] &amp;gt; $max_times){
 unset($_SESSION['cnt']);
}

if ( !isset($_SESSION['cnt'])){
 $_SESSION['cnt']=0;
 $_SESSION['password']=RandomString();

 $query = &amp;quot;delete from rms_120_pw where ip='$_SERVER[REMOTE_ADDR]'&amp;quot;;
 @mysql_query($query);

 $query = &amp;quot;insert into rms_120_pw values('$_SERVER[REMOTE_ADDR]', &amp;quot;.
 &amp;quot;'$_SESSION[password]')&amp;quot;;
 @mysql_query($query);
}
$left_count = $max_times-$_SESSION['cnt'];
$_SESSION['cnt']++;

if ( $_POST['password'] ){
 
 if (eregi(&amp;quot;replace|load|information|union|select|from|where|&amp;quot; .
 &amp;quot;limit|offset|order|by|ip|\.|#|-|/|\*&amp;quot;,$_POST['password'])){
 @mysql_close($link);
 exit(&amp;quot;Wrong access&amp;quot;);
 }

 $query = &amp;quot;select * from rms_120_pw where &amp;quot;.
 &amp;quot;(ip='$_SERVER[REMOTE_ADDR]') and &amp;quot; .
 &amp;quot;(password='$_POST[password]')&amp;quot;;
 $q = @mysql_query($query);
 $res = @mysql_fetch_array($q);
 if($res['ip']==$_SERVER['REMOTE_ADDR']){
 @mysql_close($link);
 exit(&amp;quot;True&amp;quot;);
 }
 else{
 @mysql_close($link);
 exit(&amp;quot;False&amp;quot;);
 }
}

@mysql_close($link);
?&amp;gt;

&amp;lt;head&amp;gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;black.css&amp;quot;&amp;gt;
&amp;lt;/head&amp;gt;

&amp;lt;form method=post action=index.php&amp;gt;
 &amp;lt;h1&amp;gt; &amp;lt;?= $left_count ?&amp;gt; times left &amp;lt;/h1&amp;gt;
 &amp;lt;div class=&amp;quot;inset&amp;quot;&amp;gt;
 &amp;lt;p&amp;gt;
 &amp;lt;label for=&amp;quot;password&amp;quot;&amp;gt;PASSWORD&amp;lt;/label&amp;gt;
 &amp;lt;input type=&amp;quot;password&amp;quot; name=&amp;quot;password&amp;quot; id=&amp;quot;password&amp;quot; &amp;gt;
 &amp;lt;/p&amp;gt;
 &amp;lt;/div&amp;gt;
 &amp;lt;p class=&amp;quot;p-container&amp;quot;&amp;gt;
 &amp;lt;span onclick=location.href=&amp;quot;auth.php&amp;quot;&amp;gt; Auth &amp;lt;/span&amp;gt;
 &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Check&amp;quot;&amp;gt;
 &amp;lt;/p&amp;gt;
&amp;lt;/form&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The TL;DR of this code is that it uses your PHP session to store a 30 character lowercase letter token, and a counter of how many tries you&amp;rsquo;ve made against it. You&amp;rsquo;re given 120 total tries, then a new code will be generated, meaning any data you&amp;rsquo;ve been able to glean is useless. For what it&amp;rsquo;s worth, not all letters are equally likely &amp;ndash; the source of the data is Aleph One&amp;rsquo;s &amp;ldquo;Smashing the Stack for Fun and Profit.&amp;rdquo; The code contains a blacklist to protect against certain types of SQL injection, but certainly doesn&amp;rsquo;t cover all SQL injection possibilities.&lt;/p&gt;</description></item><item><title>Weekly Reading List for 1/25/14</title><link>https://systemoverlord.com/2014/01/25/weekly-reading-list-for-12514/</link><pubDate>Sat, 25 Jan 2014 08:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/01/25/weekly-reading-list-for-12514/</guid><description>&lt;p&gt;This week, we&amp;rsquo;re focusing on binary exploitation and reversing. (Thanks to Ghost in the Shellcode for making me feel stupid with all their binary pwning challenges!)&lt;/p&gt;
&lt;h4 id="basic-shellcode-examples"&gt;Basic Shellcode Examples&lt;/h4&gt;
&lt;p&gt;Gal Badishi has a great set of &lt;a href="https://badishi.com/basic-shellcode-example/"&gt;Basic Shellcode Examples&lt;/a&gt;. It&amp;rsquo;s almost two years old, but a good primer into how basic shellcode works. x86 hasn&amp;rsquo;t changed (yes, I&amp;rsquo;m ignoring x64 for now), so still quite a relevant resource for those of us who have leaned on msfvenom/msfpayload for our payload needs.&lt;/p&gt;</description></item><item><title>Ghost in the Shellcode 2014</title><link>https://systemoverlord.com/2014/01/21/ghost-in-the-shellcode-2014/</link><pubDate>Tue, 21 Jan 2014 04:57:33 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/01/21/ghost-in-the-shellcode-2014/</guid><description>&lt;p&gt;A quick Ghost in the Shellcode 2014 summary. Great CTF, but you better know your binary exploitation. I&amp;rsquo;m pretty happy with the overall 27th finish Shadow Cats managed. Here&amp;rsquo;s a summary of our team writeups, the first 3 by me, the last one by Dan.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://systemoverlord.com/2014/01/19/ghost-in-the-shellcode-2014-radioactive/"&gt;Radioactive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://systemoverlord.com/2014/01/19/ghost-in-the-shellcode-2014-lugkist/"&gt;Lugkist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://systemoverlord.com/2014/01/19/ghost-in-the-shellcode-2014-pillowtalk/"&gt;Pillowtalk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lockboxx.blogspot.com/2014/01/ghost-in-shellcode-2014-ctf-writeup.html"&gt;Unbearable&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Ghost in the Shellcode 2014: Radioactive</title><link>https://systemoverlord.com/2014/01/19/ghost-in-the-shellcode-2014-radioactive/</link><pubDate>Sun, 19 Jan 2014 20:21:46 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/01/19/ghost-in-the-shellcode-2014-radioactive/</guid><description>&lt;p&gt;Radioactive was a crypto challenge that executed arbitrary python code, if you could apply a correct cryptographic tag. Source was provided, and the handler is below:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!python
class RadioactiveHandler(SocketServer.BaseRequestHandler):
 def handle(self):
 key = open(&amp;quot;secret&amp;quot;, &amp;quot;rb&amp;quot;).read()
 cipher = AES.new(key, AES.MODE_ECB)

 self.request.send(&amp;quot;Waiting for command:\n&amp;quot;)
 tag, command = self.request.recv(1024).strip().split(':')
 command = binascii.a2b_base64(command)
 pad = &amp;quot;\x00&amp;quot; * (16 - (len(command) % 16))
 command += pad

 blocks = [command[x:x+16] for x in xrange(0, len(command), 16)]
 cts = [str_to_bytes(cipher.encrypt(block)) for block in blocks]
 for block in cts:
 print ''.join(chr(x) for x in block).encode('hex')

 command = command[:-len(pad)]

 t = reduce(lambda x, y: [xx^yy for xx, yy in zip(x, y)], cts)
 t = ''.join([chr(x) for x in t]).encode('hex')

 match = True
 print tag, t
 for i, j in zip(tag, t):
 if i != j:
 match = False

 del key
 del cipher

 if not match:
 self.request.send(&amp;quot;Checks failed!\n&amp;quot;)
 eval(compile(command, &amp;quot;script&amp;quot;, &amp;quot;exec&amp;quot;))

 return
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;So, it looks for a tag:command pair, where the tag is hex-encoded and the command is base64 encode. The command must be valid python, passed through compile and eval, so you&amp;rsquo;ll need to send a response back to yourself via self.request.send.&lt;/p&gt;</description></item><item><title>Ghost in the Shellcode 2014: Lugkist</title><link>https://systemoverlord.com/2014/01/19/ghost-in-the-shellcode-2014-lugkist/</link><pubDate>Sun, 19 Jan 2014 19:43:56 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/01/19/ghost-in-the-shellcode-2014-lugkist/</guid><description>&lt;p&gt;Lugkist was an interesting &amp;ldquo;trivia&amp;rdquo; challenge. We were told &amp;ldquo;it&amp;rsquo;s not crypto&amp;rdquo;, but it sure looked like a crypto challenge. We had a file like:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Find the key.&lt;/p&gt;
&lt;p&gt;GVZSNG&lt;br&gt;
AXZIOG&lt;br&gt;
YNAISG&lt;br&gt;
ASAIUG&lt;br&gt;
IVPIOK&lt;br&gt;
AXPIVG&lt;br&gt;
PVZIUG&lt;br&gt;
AXLIEG&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Always 6 letters, but no other obvious pattern. I did notice that the 4th character always was S or I and the final character G or K, but couldn&amp;rsquo;t make anything of that. I realized the full character set was &amp;lsquo;AEGIKLONPSUTVYXZ&amp;rsquo;. Searching for this string revealed nothing, but searching for the characters space separated revealed that this was the same character set as used by the codes for the original Game Genie. And Game Genie codes were 6 characters long.&lt;/p&gt;</description></item><item><title>Ghost in the Shellcode 2014: Pillowtalk</title><link>https://systemoverlord.com/2014/01/19/ghost-in-the-shellcode-2014-pillowtalk/</link><pubDate>Sun, 19 Jan 2014 19:11:27 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/01/19/ghost-in-the-shellcode-2014-pillowtalk/</guid><description>&lt;p&gt;Pillowtalk was a 200 point crypto challenge. Provided was a stripped 64-bit binary along with a pcap file. I started off by exercising the behavior of the binary, looking at system calls/library calls to see what it was doing.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Client connects to server&lt;/li&gt;
&lt;li&gt;Server reads 32 bytes from /dev/urandom&lt;/li&gt;
&lt;li&gt;Server sends 32 bytes on the wire (not same bytes as read from /dev/urandom)&lt;/li&gt;
&lt;li&gt;Client does same 32 byte read/send&lt;/li&gt;
&lt;li&gt;Loop:
&lt;ul&gt;
&lt;li&gt;Server reads a line from stdin&lt;/li&gt;
&lt;li&gt;Server sends 4 byte length&lt;/li&gt;
&lt;li&gt;Server sends encrypted line&lt;/li&gt;
&lt;li&gt;Client does the same steps&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;My first approach was by trying to use scapy to replay the pcap to the server, but this only gave complete noise, so I decided the two 32 byte values must be significant. I even tried controlling /dev/urandom (via LD_PRELOAD) to see if putting in the 32 bytes from the pcap would get to the right key. It didn&amp;rsquo;t.&lt;/p&gt;</description></item><item><title>Weekly Reading List for 1/18/14</title><link>https://systemoverlord.com/2014/01/18/weekly-reading-list-for-11714/</link><pubDate>Sat, 18 Jan 2014 05:00:00 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/01/18/weekly-reading-list-for-11714/</guid><description>&lt;p&gt;I&amp;rsquo;ve decided to start posting a weekly reading list of interesting security-related articles I&amp;rsquo;ve come across in the past week. They&amp;rsquo;re not guaranteed to be new, but should at least still be relevant.&lt;/p&gt;
&lt;h4 id="using-a-beaglebone-to-bypass-8021x"&gt;Using a BeagleBone to bypass 802.1x&lt;/h4&gt;
&lt;p&gt;Most security practitioners are already aware that NAC doesn&amp;rsquo;t provide meaningful security. While it&amp;rsquo;ll keep some random guy from plugging in to an exposed ethernet port in the lobby (shouldn&amp;rsquo;t that be turned off?), it won&amp;rsquo;t stop a determined attacker. You can just MITM the legitimate device, let it perform the 802.1x handshake, then send packets appearing to be from the legitimate device. To make it easier, &lt;a href="http://shellsherpa.nl/nac-bypass-8021x-or-beagle-in-the-middle"&gt;ShellSherpa has put together a BeagleBone-based device to automatically MITM the NAC connection&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>LD_PRELOAD for Binary Analysis</title><link>https://systemoverlord.com/2014/01/13/ld_preload-for-binary-analysis/</link><pubDate>Mon, 13 Jan 2014 02:18:16 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/01/13/ld_preload-for-binary-analysis/</guid><description>&lt;p&gt;During the BreakIn CTF, there were a few challenges that depended on the return value of of libc functions like &lt;code&gt;time()&lt;/code&gt; or &lt;code&gt;rand()&lt;/code&gt;, and had differing behavior depending on those return values. In order to more easily reverse those binaries, it can be nice to control the return values of those functions. In other cases, you have binaries that may call functions like &lt;code&gt;unlink()&lt;/code&gt;, &lt;code&gt;system()&lt;/code&gt;, etc., where you prefer not to have those functions really called. (Though you are running these untrusted binaries in a VM, right?)&lt;/p&gt;</description></item><item><title>BreakIn CTF 2014</title><link>https://systemoverlord.com/2014/01/13/breakin-ctf-2014/</link><pubDate>Mon, 13 Jan 2014 01:20:08 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2014/01/13/breakin-ctf-2014/</guid><description>&lt;p&gt;The &lt;a href="http://felicity.iiit.ac.in/threads/breakin"&gt;Threads BreakIn CTF&lt;/a&gt; hosted by IIIT Hyderabad has just wrapped up. Shadow Cats did pretty well, placing 16th overall, completing 22/33 challenges, especially considering we only had 2 guys playing this CTF. Mad props goes out to &lt;a href="http://lockboxx.blogspot.com/"&gt;Dan&lt;/a&gt;, and here&amp;rsquo;s hoping for a bigger team turnout next week for &lt;a href="http://ghostintheshellcode.com/"&gt;Ghost in the Shellcode&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m going to be doing some writeups of a couple of the challenges I thought were particularly interesting, as well as some topical information inspired by the CTF. I&amp;rsquo;ll be linking to the writeups below as they get published.&lt;/p&gt;</description></item><item><title>DerbyCon CTF</title><link>https://systemoverlord.com/2013/09/29/derbycon-ctf/</link><pubDate>Sun, 29 Sep 2013 22:38:19 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2013/09/29/derbycon-ctf/</guid><description>&lt;p&gt;While at Derbycon last weekend, I played in the Derbycon Capture the Flag (CTF). I played with some people from the DefCon Group back in Atlanta (DC404) &amp;ndash; and we had a great team and that lead to a 5th place finish out of more than 80 teams with points on the board. Big shout out to Michael (@decreasedsales), Aaron (@aaronmelton), Dan (@alltrueic), and all the others who helped out.&lt;/p&gt;</description></item><item><title>Boston Key Party -- MITM</title><link>https://systemoverlord.com/2013/06/10/boston-key-party-mitm/</link><pubDate>Mon, 10 Jun 2013 00:54:54 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2013/06/10/boston-key-party-mitm/</guid><description>&lt;p&gt;Boston Key Party is the latest CTF I've played in (this time playing with some local friends as part of our team 'Shadow Cats'). The first challenge we cleared (actually, first blood in the CTF) was MITM.&lt;/p&gt;
&lt;p&gt;Now, you might think a challenge named "MITM" was some sort of Man-In-The-Middle exercise, but it's actually crypto! We're given five base-64 encoded messages: two plaintext/ciphertext pairs, and a ciphertext (which we're presumably supposed to decrypt).&lt;/p&gt;</description></item><item><title>PlaidCTF Compression</title><link>https://systemoverlord.com/2013/04/30/plaidctf-compression/</link><pubDate>Tue, 30 Apr 2013 05:26:20 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2013/04/30/plaidctf-compression/</guid><description>&lt;p&gt;PlaidCTF 2013 had a level called "Compression". Here's the provided code for
this level:&lt;/p&gt;
&lt;div class="geshifilter"&gt;&lt;div class="python geshifilter-python" style="font-family:monospace;"&gt;&lt;pre style="font-family: monospace; font-weight: normal; font-style: normal"&gt;&lt;span style="color: #808080; font-style: italic;"&gt;#!/usr/bin/python&lt;/span&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;import&lt;/span&gt; &lt;span style="color: #dc143c;"&gt;os&lt;/span&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;import&lt;/span&gt; &lt;span style="color: #dc143c;"&gt;struct&lt;/span&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;import&lt;/span&gt; &lt;span style="color: #dc143c;"&gt;SocketServer&lt;/span&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;import&lt;/span&gt; &lt;span style="color: #dc143c;"&gt;zlib&lt;/span&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;from&lt;/span&gt; Crypto.&lt;span style="color: black;"&gt;Cipher&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;import&lt;/span&gt; AES
&lt;span style="color: #ff7700;font-weight:bold;"&gt;from&lt;/span&gt; Crypto.&lt;span style="color: black;"&gt;Util&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;import&lt;/span&gt; Counter
 
&lt;span style="color: #808080; font-style: italic;"&gt;# Not the real keys!&lt;/span&gt;
ENCRYPT_KEY &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #483d8b;"&gt;'0000000000000000000000000000000000000000000000000000000000000000'&lt;/span&gt;.&lt;span style="color: black;"&gt;decode&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #483d8b;"&gt;'hex'&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;
&lt;span style="color: #808080; font-style: italic;"&gt;# Determine this key.&lt;/span&gt;
&lt;span style="color: #808080; font-style: italic;"&gt;# Character set: lowercase letters and underscore&lt;/span&gt;
PROBLEM_KEY &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #483d8b;"&gt;'XXXXXXXXXXXXXXXXXXXX'&lt;/span&gt;
 
&lt;span style="color: #ff7700;font-weight:bold;"&gt;def&lt;/span&gt; encrypt&lt;span style="color: black;"&gt;(&lt;/span&gt;data&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; ctr&lt;span style="color: black;"&gt;)&lt;/span&gt;:
    aes &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; AES.&lt;span style="color: #dc143c;"&gt;new&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;ENCRYPT_KEY&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; AES.&lt;span style="color: black;"&gt;MODE_CTR&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; counter&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;ctr&lt;span style="color: black;"&gt;)&lt;/span&gt;
    &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; aes.&lt;span style="color: black;"&gt;encrypt&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #dc143c;"&gt;zlib&lt;/span&gt;.&lt;span style="color: black;"&gt;compress&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;data&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;
 
&lt;span style="color: #ff7700;font-weight:bold;"&gt;class&lt;/span&gt; ProblemHandler&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #dc143c;"&gt;SocketServer&lt;/span&gt;.&lt;span style="color: black;"&gt;StreamRequestHandler&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;:
    &lt;span style="color: #ff7700;font-weight:bold;"&gt;def&lt;/span&gt; handle&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;self&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;:
        nonce &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #dc143c;"&gt;os&lt;/span&gt;.&lt;span style="color: black;"&gt;urandom&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500;"&gt;8&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;
        &lt;span style="color: #008000;"&gt;self&lt;/span&gt;.&lt;span style="color: black;"&gt;wfile&lt;/span&gt;.&lt;span style="color: black;"&gt;write&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;nonce&lt;span style="color: black;"&gt;)&lt;/span&gt;
        ctr &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; Counter.&lt;span style="color: #dc143c;"&gt;new&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500;"&gt;64&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; prefix&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt;nonce&lt;span style="color: black;"&gt;)&lt;/span&gt;
        &lt;span style="color: #ff7700;font-weight:bold;"&gt;while&lt;/span&gt; &lt;span style="color: #008000;"&gt;True&lt;/span&gt;:
            data &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;self&lt;/span&gt;.&lt;span style="color: black;"&gt;rfile&lt;/span&gt;.&lt;span style="color: black;"&gt;read&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500;"&gt;4&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;
            &lt;span style="color: #ff7700;font-weight:bold;"&gt;if&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;not&lt;/span&gt; data:
                &lt;span style="color: #ff7700;font-weight:bold;"&gt;break&lt;/span&gt;
 
            &lt;span style="color: #ff7700;font-weight:bold;"&gt;try&lt;/span&gt;:
                length &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #dc143c;"&gt;struct&lt;/span&gt;.&lt;span style="color: black;"&gt;unpack&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #483d8b;"&gt;'I'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; data&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;[&lt;/span&gt;&lt;span style="color: #ff4500;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;]&lt;/span&gt;
                &lt;span style="color: #ff7700;font-weight:bold;"&gt;if&lt;/span&gt; length &lt;span style="color: #66cc66;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #ff4500;"&gt;1&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color: #ff4500;"&gt;20&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;:
                    &lt;span style="color: #ff7700;font-weight:bold;"&gt;break&lt;/span&gt;
                data &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;self&lt;/span&gt;.&lt;span style="color: black;"&gt;rfile&lt;/span&gt;.&lt;span style="color: black;"&gt;read&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;length&lt;span style="color: black;"&gt;)&lt;/span&gt;
                data +&lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; PROBLEM_KEY
                ciphertext &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; encrypt&lt;span style="color: black;"&gt;(&lt;/span&gt;data&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; ctr&lt;span style="color: black;"&gt;)&lt;/span&gt;
                &lt;span style="color: #008000;"&gt;self&lt;/span&gt;.&lt;span style="color: black;"&gt;wfile&lt;/span&gt;.&lt;span style="color: black;"&gt;write&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #dc143c;"&gt;struct&lt;/span&gt;.&lt;span style="color: black;"&gt;pack&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #483d8b;"&gt;'I'&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; &lt;span style="color: #008000;"&gt;len&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;ciphertext&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;
                &lt;span style="color: #008000;"&gt;self&lt;/span&gt;.&lt;span style="color: black;"&gt;wfile&lt;/span&gt;.&lt;span style="color: black;"&gt;write&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;ciphertext&lt;span style="color: black;"&gt;)&lt;/span&gt;
            &lt;span style="color: #ff7700;font-weight:bold;"&gt;except&lt;/span&gt;:
                &lt;span style="color: #ff7700;font-weight:bold;"&gt;break&lt;/span&gt;
 
&lt;span style="color: #ff7700;font-weight:bold;"&gt;class&lt;/span&gt; ReusableTCPServer&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: #dc143c;"&gt;SocketServer&lt;/span&gt;.&lt;span style="color: black;"&gt;ForkingMixIn&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; &lt;span style="color: #dc143c;"&gt;SocketServer&lt;/span&gt;.&lt;span style="color: black;"&gt;TCPServer&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;:
    allow_reuse_address &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;True&lt;/span&gt;
 
&lt;span style="color: #ff7700;font-weight:bold;"&gt;if&lt;/span&gt; __name__ &lt;span style="color: #66cc66;"&gt;==&lt;/span&gt; &lt;span style="color: #483d8b;"&gt;'__main__'&lt;/span&gt;:
    HOST &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #483d8b;"&gt;'0.0.0.0'&lt;/span&gt;
    PORT &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #ff4500;"&gt;4433&lt;/span&gt;
    &lt;span style="color: #dc143c;"&gt;SocketServer&lt;/span&gt;.&lt;span style="color: black;"&gt;TCPServer&lt;/span&gt;.&lt;span style="color: black;"&gt;allow_reuse_address&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;True&lt;/span&gt;
    server &lt;span style="color: #66cc66;"&gt;=&lt;/span&gt; ReusableTCPServer&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;HOST&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; PORT&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;,&lt;/span&gt; ProblemHandler&lt;span style="color: black;"&gt;)&lt;/span&gt;
    server.&lt;span style="color: black;"&gt;serve_forever&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: black;"&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt; So there's a few interesting things of note here:
&lt;/p&gt;</description></item><item><title>Lessons From the Nebula</title><link>https://systemoverlord.com/2013/03/24/lessons-from-the-nebula/</link><pubDate>Sun, 24 Mar 2013 00:46:59 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2013/03/24/lessons-from-the-nebula/</guid><description>&lt;p&gt;&lt;a href="http://exploit-exercises.com/nebula"&gt;Exploit-Exercises.com's Nebula&lt;/a&gt;, that is.  I just spent a good 8 hours or so working through the levels there, and I'm pretty sure I took much longer than I should have.  In any case, there were a couple of things I was disappointed by: running "getflag" to get a flag (or otherwise being delivered a token) didn't provide you with anything to really validate what you were doing.  You can actually jump directly to any level (which is good when you reset your VM) but not so interesting for "progression" or the sense of accomplishment -- at least for me.&lt;/p&gt;</description></item><item><title>BSides SF CTF by MAD Security, Conclusion</title><link>https://systemoverlord.com/2013/03/06/bsides-sf-ctf-by-mad-security-conclusion/</link><pubDate>Wed, 06 Mar 2013 05:51:21 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2013/03/06/bsides-sf-ctf-by-mad-security-conclusion/</guid><description>&lt;p&gt;This is the conclusion to my write-up of the awesome BSides SF CTF by &lt;a href="http://madsecurity.com"&gt;MAD Security&lt;/a&gt;/&lt;a href="http://thehackeracademy.com"&gt;The Hacker Academy&lt;/a&gt;.  You can find the other parts here: &lt;a href="https://systemoverlord.com/2013/03/02/bsides-sf-ctf-by-mad-security-part-1"&gt;Levels 1-2&lt;/a&gt;, &lt;a href="https://systemoverlord.com/2013/03/03/bsides-sf-ctf-by-mad-security-part-2"&gt;Levels 3-4&lt;/a&gt;, &lt;a href="https://systemoverlord.com/2013/03/03/bsides-sf-ctf-by-mad-security-part-3"&gt;Levels 5-7&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What I Learned&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;
		Don't overthink things -- work from the simplest case.&lt;/li&gt;
&lt;li&gt;
		Internet access during a CTF may be spotty (or nonexistent) -- be prepared to work fully offline.  (Download a copy of exploit-db, etc.)&lt;/li&gt;
&lt;li&gt;
		Keep meticulous notes -- otherwise you'll find yourself revisiting avenues you've exhausted, forgetting things, etc.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;What I Wish I'd Done&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>BSides SF CTF by MAD Security, Part 3</title><link>https://systemoverlord.com/2013/03/03/bsides-sf-ctf-by-mad-security-part-3/</link><pubDate>Sun, 03 Mar 2013 19:41:47 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2013/03/03/bsides-sf-ctf-by-mad-security-part-3/</guid><description>&lt;p&gt;This is a continuation of my &lt;a href="https://systemoverlord.com/2013/03/02/bsides-sf-ctf-by-mad-security-part-1" style="outline: none; color: rgb(26, 150, 212); font-family: Arial, Verdana, Helvetica, sans-serif;"&gt;write-up of the BSides SF 2013 CTF&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Level 5: Phone Work&lt;/strong&gt;&lt;br /&gt;
	This level required that we find a phone number on the Absurdistani snoop's computer and gain access to the voicemail box associated with the number.  Finding the number was straightforward -- there was an email draft that contained the signature of the snoop, and in that signature was his phone number and voice mail box number.  (This also lets us know his name is Marco.)  Calling the phone number and entering the VM box number, we're asked for the PIN of the voicemail box.  After trying some obvious things (the VM box number, the last 4 digits of the phone number, 1234, 0000, etc.) I started looking through his machine for any clues, but his machine was very sparsely populated with files.  So, off to the internet for &lt;a href="http://mashable.com/2012/09/24/pin-number-top-20/"&gt;a list of the most common pins&lt;/a&gt;.  Yeah, humans are predictable... the top 20 PINs (20/10000 =~ 0.2% of pins) represent a whopping 27% of PINs in use.  Turns out Marco was that predictable too.  One of the top 10 and we're in!  The voicemail tells Marco that his new secure key is available on the secure keyserver, which he can retrieve using the 15 digit project access code.&lt;/p&gt;</description></item><item><title>BSides SF CTF by MAD Security, Part 2</title><link>https://systemoverlord.com/2013/03/03/bsides-sf-ctf-by-mad-security-part-2/</link><pubDate>Sun, 03 Mar 2013 00:43:10 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2013/03/03/bsides-sf-ctf-by-mad-security-part-2/</guid><description>&lt;p&gt;This is a continuation of my &lt;a href="https://systemoverlord.com/2013/03/02/bsides-sf-ctf-by-mad-security-part-1"&gt;write-up of the BSides SF 2013 CTF&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Level 3: Disk Forensics&lt;/strong&gt;&lt;br /&gt;
	A professional cleaner who has done some work for Nick provides you with an image of a flash drive, and you're to find the most "interesting file" on the drive and provide its md5sum.  The first thing I do is run &lt;tt&gt;file&lt;/tt&gt; on the image to get an idea of what we're working with:&lt;/p&gt;</description></item><item><title>BSides SF CTF by MAD Security, Part 1</title><link>https://systemoverlord.com/2013/03/02/bsides-sf-ctf-by-mad-security-part-1/</link><pubDate>Sat, 02 Mar 2013 07:47:38 +0000</pubDate><author>david@systemoverlord.com (David Tomaschik)</author><guid>https://systemoverlord.com/2013/03/02/bsides-sf-ctf-by-mad-security-part-1/</guid><description>&lt;p&gt;Last weekend I was at BSides SF and had the opportunity to participate in the Capture the Flag competition run by MAD Security/The Hacker Academy. I was able to clear 6 of the levels, and thought I'd write them up here to share my experience. Most of this is from my memory, so there might be a few inaccuracies, but the intent is to share the general concepts, not the specifics.&lt;/p&gt;</description></item></channel></rss>