<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://blog.bobbedbob.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://blog.bobbedbob.io/" rel="alternate" type="text/html" /><updated>2025-11-21T15:34:37+00:00</updated><id>https://blog.bobbedbob.io/feed.xml</id><title type="html">blog.bobbedbob.io</title><subtitle>This blog is my creative outlet for Opinion articles,  cybersecurity and other tech stuff.</subtitle><entry><title type="html">Why AI will never be able to create art</title><link href="https://blog.bobbedbob.io/opinions/2025/11/21/ai-art.html" rel="alternate" type="text/html" title="Why AI will never be able to create art" /><published>2025-11-21T15:14:00+00:00</published><updated>2025-11-21T15:14:00+00:00</updated><id>https://blog.bobbedbob.io/opinions/2025/11/21/ai-art</id><content type="html" xml:base="https://blog.bobbedbob.io/opinions/2025/11/21/ai-art.html"><![CDATA[<p>A long-standing argument and debate about artificial intelligence
is its ability, along with, the inability thereof, to create art.</p>

<p>Though some may view otherwise, the sketches created by AI should not
be considered as real art.</p>

<h1 id="the-definition-of-art">The Definition of Art</h1>

<p>Through time and time again, from the dawn of humanity, man has created art.
Whether if that was from the aboriginal rock paintings in Australia
originating 65,000 or 80,000 years ago, or in modern forms of art
even beyond canvases such as rocks or paper.</p>

<p>Though in recent years, some view that modern art had decreased
the standard of art, such as the recent exhibition of, quite literally,
a banana taped to a wall. No matter how ridiculous it may seem, it is still a form of art.</p>

<p>The reason of this is, despite the method or the means of which art
is contrived or delivered, is that art has <strong>meaning</strong>. Every piece of human
art, no matter if it is drawn by a child in primary school, or a professional
artist, making a living off of art, they all have meaning, it is revocable, inevitable and undebatable.</p>

<p>Art, is also a form of creation, it creates and delivers these messages
through the exhaustion of the artists, which trains the artists in the process,
their skills, resilience and all other abilities related to the creation of art.</p>

<p>It takes time, and requires skill to create art, and art has meaning.</p>

<h1 id="ai-cannot-understand-meaning">AI Cannot Understand Meaning</h1>

<p>To its core, artificial intelligence is mathematics, through the calculations of
matrices, vectors and other complicated computer science gibberish.
It predicts what the next pixel is, and guesses what it should say next.</p>

<p>It does not have a mind, as much as some AI-fanatics pretend it does,
it is cold, has no flesh, and it cannot think or understand.</p>

<p>This is shown through a study conducted by Apple <em>[1]</em>, it had found that AI
is incapable of reasoning, it had found that artificial intelligence “face a complete accuracy collapse beyond certain
complexities”.</p>

<p>If AI cannot reason, or <em>actually</em> think, then how can we trust it to understand
the true meaning behind human art? If we cannot trust AI to understand the true meaning of art,
then how can we trust it to create meaning in art? And, to that extent, to create
art as defined above?</p>

<h1 id="intelligence--understanding">Intelligence != Understanding</h1>

<p>Sure, one can argue that the human brains also have limits, and also cannot understand
beyond certain complexities, but the difference is all humans, no matter
where you come from, or what your background is, have emotions, have feelings
and have common experiences.</p>

<p>Humans have emotions, and that is what sets humans apart from computers, and AI.
When an AI model looks at a piece of art about connection with one’s mother, it
calculates the meaning based off of the pieces of real human art it had profiteered upon, and
outputs a line of text, outlining the emotions of what a human <em>might</em> feel.</p>

<p>However, when a real human being sees a piece of art about one’s mother, they can <em>feel</em>, they can <em>connect</em>,
they can understand through their own experiences with their mother, and understand something
through their own thought process.</p>

<p>Human brains, human understandings, human thoughts grow.</p>

<h1 id="ai-steals-not-create">AI Steals, not Create</h1>

<p>It is a objective fact that all AI models are trained upon data. And, where does this data come from?
They come from real human artists, and often without consent or payment.</p>

<p>In fact, the Australian federal government has even recently banned <em>[2]</em> this practice,
if this was not happening before the ban, then why would they ban it?</p>

<p>Artificial intelligence ruthlessly and brutally crawls artists’ Twitter posts, through
their blogs and wherever they post online. Some artists were even forced to add watermarks
or to use specialised programs to prevent this exact behaviour.</p>

<p>It is unbelievable, concerning and dangerous that the creators of real human art, a practice which as mentioned earlier,
originated from more than 80 thousand years ago, way before electricity or even any modern commodity was invented, have
to
go under, effectively, hiding, and having to metaphorically “dodge the AI bullet”.</p>

<p>Artists have a sense of community, they have a sense of unity, they help each other and
compliment each other, not destroy, steal and profit off of one another.</p>

<p>Thus, AI is not “an artist” as it lacks the simple understanding of human unity and community,
it is designed for one purpose, and that is to help its original creators make money, and it is quite frankly
disgusting and, as it is in Australia, heavily regulated.</p>

<h1 id="ai-art-is-fruitless">AI “Art” is Fruitless</h1>

<p>As mentioned earlier,</p>
<blockquote>
  <p>It takes time, and requires skill to create art, and art has meaning.</p>
</blockquote>

<p>Sure, people can argue, and they do argue, that AI has made art more accessible.
But, is that necessarily a good thing?</p>

<p>Creating pieces of art is rewarding and useful in the development of the human mind
because of the skills you build along the way. When you learn to draw, you learn to
manage time, and how to, literally create pieces of art.</p>

<p>It is often the inaccessibility of the results of art that makes art a form of creation
unlike any other.</p>

<p>It is also rewarding because you are <em>visibly</em> able to see the progress you have made
along your create journey.</p>

<p>AI “art” takes both of these fruits of art away from humanity. When all it takes is a prompt, a single line
of littered words, is to create a piece of art, where is the growth? Where is the learning experiences?</p>

<p>That picture file you receive at the end of a GenAI creation is <strong>not</strong> a reflection of your skills,
nor is it a reflection of your growth.
Art is fruitful, not because of its results, but because of the process.</p>

<p>And without this process, one cannot call art “art”.</p>

<h1 id="ai-fosters-a-dangerous-society">AI Fosters a Dangerous Society</h1>

<p>We live in an age where everything has to be fast. Whether that is food deliveries, or E-mails, or assignments,
we wants things done, quickly.</p>

<p>That is a trap, of which I personally falls into, too frequently as well.
We are a generation of social media and short-form videos which had already shown its impact on our attention spans.</p>

<p>And, GenAI “art” does not help, it adds fuel to the fire, further accelerating this understanding in society that:</p>
<blockquote>
  <p>Effort Spent != Results Received</p>
</blockquote>

<p>Though one may argue that this principle is true, one may not be successful despite the efforts they have given,
but it is undebatable that this mindset is toxic and should not be indoctrinated into our young people’s minds.</p>

<p>We should foster a society of “creators” and not a society of “receivers”.</p>

<h1 id="ai-accelerates-destruction">AI Accelerates Destruction</h1>

<p>So far, as mentioned in the previous argument, AI damages humanity
metaphorically and mentally.
However, AI “art” also has its negative impact environmentally.</p>

<p>When you ask AI to put together a senseless and meaningless sketch of what can
only be considered as gibberish, it takes a heavy toll on the environment.</p>

<p>In an Australian federal inquiry conducted by the Royal Melbourne Institute of Technology <em>[3]</em>, Dr. Gordon
presented the fact that “producing an image” via AI “uses about <strong>20 times</strong>” more energy than a GenAI text inquiry.</p>

<p>Which by the way, uses “somewhere between <strong>10 to 90 times more energy per inquiry</strong>” than a Google search.
That means, when you ask an AI model to generate a silly picture, it uses <strong>200 to 1800</strong> times more energy
per inquiry than a Google search.</p>

<p>The same study also found that these GenAI models also use between “<strong>1~3%</strong> of the world’s energy”, and that it is “set
to grow”.</p>

<p>When the numbers and facts are presented, it is without doubt that it is shocking and concerning at the same time.
Without doubt, AI “art” has taken a giant toll on the environment, and a giant dump on the efforts that literally every
contributing member of society had made to the coping and the reversal of climate change.</p>

<p>Personally, I have never seen a real human artist consume <strong>200 to 1800</strong> times more energy than a Google search
just to create a real piece of art, which, in its core have more value than the trash AI can produce anyway.</p>

<h1 id="conclusion">Conclusion</h1>

<p>As argued above, it is difficult to conclude that AI-generated “art” is really art, and not only that, but it is also
a plague, and a tumour which damages artists, our society, and humanity as a whole.</p>

<h2 id="footnotes">Footnotes</h2>

<ol>
  <li>Shojaee, P., Mirzadeh, I., Alizadeh, K., Horton, M., Bengio, S. and Farajtabar, M. (2025). The Illusion of Thinking:
Understanding the Strengths and Limitations of Reasoning Models via the Lens of Problem Complexity. <strong>[online]</strong>
arXiv.org. Available at: <a href="https://arxiv.org/abs/2506.06941">https://arxiv.org/abs/2506.06941</a>.</li>
  <li>Maani Truu (2025). Federal government rules out changing copyright law to give AI companies free rein. <strong>[online]</strong>
Abc.net.au. Available
at: <a href="https://www.abc.net.au/news/2025-10-27/labor-rules-out-ai-training-copyright-exceptions/105935740/">https://www.abc.net.au/news/2025-10-27/labor-rules-out-ai-training-copyright-exceptions/105935740/</a>.</li>
  <li>Rmit.edu.au. (2024). Federal Inquiry hears warning on environmental impacts of AI. <strong>[online]</strong> Available
at: <a href="https://www.rmit.edu.au/news/media-releases-and-expert-comments/2024/sep/environmental-impacts-of-ai">https://www.rmit.edu.au/news/media-releases-and-expert-comments/2024/sep/environmental-impacts-of-ai</a>.</li>
</ol>]]></content><author><name></name></author><category term="opinions" /><summary type="html"><![CDATA[A long-standing argument and debate about artificial intelligence is its ability, along with, the inability thereof, to create art.]]></summary></entry><entry><title type="html">DownUnder CTF 2025 Write-ups</title><link href="https://blog.bobbedbob.io/cybersecurity/2025/07/20/ductf-25.html" rel="alternate" type="text/html" title="DownUnder CTF 2025 Write-ups" /><published>2025-07-20T08:44:00+00:00</published><updated>2025-07-20T08:44:00+00:00</updated><id>https://blog.bobbedbob.io/cybersecurity/2025/07/20/ductf-25</id><content type="html" xml:base="https://blog.bobbedbob.io/cybersecurity/2025/07/20/ductf-25.html"><![CDATA[<h1 id="osint-zer0c00l">OSINT: Zer0C00l</h1>
<blockquote>
  <p>You used to call me on my cellphone.</p>
</blockquote>

<h2 id="provided-clues">Provided Clues</h2>

<ul>
  <li>We are provided with an audio clip of someone connecting to dial-up internet.</li>
  <li>This phone number is from Sydney.</li>
  <li>This happened in 1995.</li>
  <li>We need to try harder.</li>
</ul>

<h2 id="chasing-the-goose">Chasing the Goose</h2>

<p>Now, we must remember,</p>
<h1 id="this-is-not-forensics-this-is-osint"><code class="language-plaintext highlighter-rouge">this is NOT forensics. This is OSINT.</code></h1>
<p><em>(do not try to read the dial-up sound effect that happened AFTER the initial DTMF sounds)</em>
Repeat that 3 times before continuing.</p>

<p>Okay. So, by using Google or any research tool, we know that to connect to the dial-up internet, or some sort of modem using dial-up internet, <strong>we must first dial the phone number of that modem</strong>.<br />
This is done through <strong>DTMF</strong> <em>(Dual-Tone Multi-Frequency)</em>, this is the audio that plays when you press a number key on phones even to this day.</p>

<p>Using Google, we can find <a href="https://dtmf.netlify.app/">an online DTMF reader</a>.<br />
<img src="https://upload.cc/i1/2025/11/21/WuO5jg.png" alt="https://upload.cc/i1/2025/11/21/WuO5jg.png" /></p>

<p>This way, we can find that the number they have dialed, is, at least, some parts of, is <strong>3693244</strong>.</p>

<p>Now, if you live in Australia, you will quickly find that that is no longer the number format we use anymore. In Australia, the phone number now is (<strong>01) 23 456 789.</strong></p>

<p>There are often 10 digits instead of 7. Even with the added area code prefix of Sydney, which is <strong>(02)</strong>, that still leaves us with <strong>(02) 369 3244</strong>.</p>

<p>What’s going on here?</p>

<h2 id="ask-a-boomer">Ask a Boomer</h2>

<p>Now, in 1995, <strong>landlines and modems can still just have 7 digits after the area code, so in 1995, that would have been a perfectly normal phone number that you can call</strong>.<br />
So, now we just need to find out <strong>who owns this number.</strong></p>

<p>We will need to look up this number on Google, maybe in a few different formats as they might have been listed in an irregular format, <strong>who knows what happened in 1995. I can’t imagine being a millennial!</strong></p>

<p>Trying many different formats of the same thing is quite a common strategy, see from <a href="/cybersecurity/2024/01/08/irisctf-24.html">IrisCTF 2024 Write-ups - OSINT: Harsh Reality of Passwords</a>.</p>

<p><strong>In Australia, when you use the international calling code to call an Australian phone number, you generally always remove the 0 at the front.</strong></p>

<p>Let’s try:</p>

<table>
  <tbody>
    <tr>
      <td>023693244</td>
      <td>(02) 369 3244</td>
      <td>(02) 3693 244</td>
    </tr>
    <tr>
      <td>+61 23693244</td>
      <td>+61 (2) 369 3244</td>
      <td>+61 (2) 3693 244</td>
    </tr>
    <tr>
      <td>+61 023693244</td>
      <td>+61 (02) 369 3244</td>
      <td>+61 (02) 3693 244</td>
    </tr>
    <tr>
      <td>+61-02-369-3244</td>
      <td> </td>
      <td>+61-02-3693-244</td>
    </tr>
    <tr>
      <td><strong>+61-2-369-3244</strong></td>
      <td> </td>
      <td>+61-2-3693-244</td>
    </tr>
  </tbody>
</table>

<p>Indeed, <strong>+61-2-369-3244</strong> leads us somewhere. All other phone numbers will result in absolutely nothing.<br />
<em><strong>You may need to turn SafeSearch off</strong>.</em></p>

<p>We can find this <a href="http://annex.retroarchive.org/cdrom/nightowl-016/002A/GBBS9504/GBBS9504.TXT">list of BBS’s in 1995</a>, incidentally, that phone number just so happens to be on there!<br />
<img src="https://upload.cc/i1/2025/11/21/AHrVUo.png" alt="https://upload.cc/i1/2025/11/21/AHrVUo.png" /></p>

<h2 id="solution">Solution</h2>

<p>This reveals the flag to be <code class="language-plaintext highlighter-rouge">DUCTF{Hotline\_BBS}</code>.</p>

<hr />

<h1 id="osint-yippee">OSINT: yippee</h1>
<blockquote>
  <p>You son of a beach.</p>
</blockquote>

<h2 id="provided-clues-1">Provided Clues</h2>

<p><img src="https://upload.cc/i1/2025/11/21/GKe2HU.png" alt="https://upload.cc/i1/2025/11/21/GKe2HU.png" /></p>

<h2 id="chasing-the-goose-1">Chasing the Goose</h2>

<p>First, we want to analyse this picture.<br />
<img src="https://upload.cc/i1/2025/11/21/fubDaO.png" alt="https://upload.cc/i1/2025/11/21/fubDaO.png" /><br />
Now, we must analyse the clues one by one.</p>

<p>This sign is a very generic <strong>tide warning</strong> sign in Australia, as evident when you try to image search this thing.<br />
So, something important would be the steep hills in the background. That is a unique feature to this beach or image. Let’s image search just that portion.<br />
<img src="https://upload.cc/i1/2025/11/21/dokzm2.png" alt="https://upload.cc/i1/2025/11/21/dokzm2.png" /></p>

<p>This will yield these results:<br />
<img src="https://upload.cc/i1/2025/11/21/xNunZg.png" alt="https://upload.cc/i1/2025/11/21/xNunZg.png" /></p>

<p>Now, I am very curious as to what happened in the first image, and why they are all blurred out. Sydney people must be very… <em><strong>expressive</strong>.</em></p>

<p>But that’s not relevant.</p>

<p>Every other image has led us to the same location, <strong>Port Macquire, Nobby’s Beach and Flynn’s Beach.</strong></p>

<h2 id="solution-1">Solution</h2>

<p>We can either try all these three flags one by one, or we can use Google Maps Street View, to finally rest the location on <strong>Nobbys Beach, Port Macquire…?</strong><br />
<img src="https://upload.cc/i1/2025/11/21/qmYf3N.png" alt="https://upload.cc/i1/2025/11/21/qmYf3N.png" /></p>

<p>Weirdly enough, this was not the flag. Although we can see the hills and views are almost <strong>an exact match</strong>, the flag was <strong>Flynn’s Beach,</strong> being <code class="language-plaintext highlighter-rouge">DUCTF{Flynns_Beach}</code>.</p>

<p>This is probably to avoid a conflict between <strong>Nobby’s Beach, Port Macquarie</strong> and an identically named <strong>Nobby’s Beach, Newcastle.</strong></p>

<hr />
<h1 id="osint-look-at-all-those-chickens">OSINT: Look at all those chickens!</h1>
<h2 id="where-did-you-get-that-hoodie-and-how-do-i-get-one"><em>Where did you get that hoodie? And how do I get one?</em></h2>

<h2 id="provided-clues-2">Provided Clues</h2>

<p><img src="https://upload.cc/i1/2025/11/21/FpLIqC.png" alt="https://upload.cc/i1/2025/11/21/FpLIqC.png" /></p>

<h2 id="chasing-the-goose-2">Chasing the Goose</h2>

<p>Use <strong>Google Image Search</strong>. Selecting the important portion of the image, that being the central island and the little bit of residential area on the right.<br />
We can find this article <a href="https://www.pedestrian.tv/travel/bin-chicken-island/">talking about a Bin Chicken Island</a>.<br />
<img src="https://upload.cc/i1/2025/11/21/k3KUnf.png" alt="https://upload.cc/i1/2025/11/21/k3KUnf.png" /></p>

<p>Using <strong>Google Maps</strong> we can find this location in Coburg, Victoria.<br />
<img src="https://upload.cc/i1/2025/11/21/jheFRA.png" alt="https://upload.cc/i1/2025/11/21/jheFRA.png" /><br />
The challenge mentioned the location we are looking for is…<br />
<strong>“… can you find out the name of the place where these birds were locked up?”</strong></p>

<p>Now, let’s find where those bin chickens were locked up. Searching for the keyword <strong>“prison”</strong> on Google Maps, and there it is! The <strong>Pentridge Prison.</strong></p>

<h2 id="solution-2">Solution</h2>

<p><img src="https://upload.cc/i1/2025/11/21/ZW9Nbz.png" alt="https://upload.cc/i1/2025/11/21/ZW9Nbz.png" /><br />
And thus, the flag is <code class="language-plaintext highlighter-rouge">DUCTF{Pentridge_Prison}</code></p>

<h1 id="afterword">Afterword</h1>

<p>This was the first time I did DownUnder CTF. The OSINT challenges were <strong><em>interesting</em></strong>, I think the most unique one was <strong>Zer0C00l</strong>, as all other challenges were either a simple Google Image search away, or some derivation of that.<br />
Some flags were quite misleading, as well as the hints. I am also not too confident in if spamming “try harder” gifs are exactly the least taunting way to say “no hints”.</p>]]></content><author><name></name></author><category term="cybersecurity" /><summary type="html"><![CDATA[OSINT: Zer0C00l You used to call me on my cellphone.]]></summary></entry><entry><title type="html">UCLA CTF 2024 Write-ups</title><link href="https://blog.bobbedbob.io/cybersecurity/2024/02/19/uclactf-24.html" rel="alternate" type="text/html" title="UCLA CTF 2024 Write-ups" /><published>2024-02-19T11:33:00+00:00</published><updated>2024-02-19T11:33:00+00:00</updated><id>https://blog.bobbedbob.io/cybersecurity/2024/02/19/uclactf-24</id><content type="html" xml:base="https://blog.bobbedbob.io/cybersecurity/2024/02/19/uclactf-24.html"><![CDATA[<h1 id="crypto-selamat-pagi">CRYPTO: Selamat Pagi</h1>
<blockquote>
  <p>My best friend’s first name is Frequency, and his last name is Analysis.</p>
</blockquote>

<h2 id="original-challenge">Original Challenge</h2>

<p><em>If you talk in another language, nobody can understand what you say! Check out this message I sent in Indonesian. To add some extra security, I also applied a monoalphabetic substitution cipher on it!</em></p>

<h2 id="provided-files">Provided Files</h2>

<p><em><strong>message.txt</strong></em></p>
<blockquote>
  <p>Efe kqkbkx czwkf akfs kdkf qzfskf wzdcjtfk
Ieqku kqk akfs ikxj kck akfs wkak ukikukf :Q<br />
Lzfqztk ukdj kqk qe wefe: bkvim{wzbkdki_ckse_kckukx_ukdj_wjuk_kfkbewew_mtzujzfwe}</p>
</blockquote>

<h2 id="chasing-the-goose">Chasing the Goose</h2>
<h3 id="huh">Huh?</h3>

<p>From the challenge description, we can find out that the text in question is ciphered using a <strong>monoalphabetic substitution cipher</strong>, and that the <strong>original text</strong> is written in <strong>Indonesian</strong>.</p>

<p>When we approach this kind of cipher, we should <del>bruteforce it</del> use frequency analysis. And so, here it begins.</p>

<h3 id="analysing-bit-by-bit">Analysing bit by bit</h3>

<p>Okay. There’s a lot of characters. What do we do? First, we <strong>need to find a dictionary for us to use</strong>, as most of us, and <strong>I think whoever’s reading this right now, does not know Indonesian</strong>. So, using Google, we can find <strong><a href="https://www.101languages.net/indonesian/most-common-indonesian-words/">a list of the top 1,000 most common Indonesian words</a></strong>. And, better yet, it linked us to <strong><a href="https://docs.google.com/spreadsheets/d/1beGKA8Lv-gC7n7BhRRFK_YH9leplqpjvdmGEmcEsEE4/edit#gid=1082318342">a Google Spreadsheet of the top 2,000 most commonly used words</a></strong>! What a treat. And lucky for us, we can <strong>use</strong> <a href="https://upload.cc/i1/2024/02/18/GZbIsW.png"><strong>Regex (Regular Expressions)</strong></a> <strong>in Google Spreadsheets to find what we need</strong>.</p>

<p><img src="https://upload.cc/i1/2024/02/18/GZbIsW.png" alt="Regex (Regular Expressions)" /></p>

<p>Okay. So, now what? Let’s look at the text first.</p>

<blockquote>
  <p>Efe kqkbkx czwkf akfs kdkf qzfskf wzdcjtfk
Ieqku kqk akfs ikxj kck akfs wkak ukikukf :Q<br />
Lzfqztk ukdj kqk qe wefe: bkvim{wzbkdki_ckse_kckukx_ukdj_wjuk_kfkbewew_mtzujzfwe}</p>
</blockquote>

<p>Notice the brackets at the end? That’s our flag. And, we know the prefix to our flags which is “lactf”. And so, we can infer the following: <strong>b -&gt; l, k -&gt; a, l -&gt; t, m -&gt; f, v -&gt; c.</strong></p>

<table>
  <tbody>
    <tr>
      <td>a</td>
      <td>b</td>
      <td>c</td>
      <td>d</td>
      <td>e</td>
      <td>f</td>
      <td>g</td>
      <td>h</td>
      <td>i</td>
      <td>j</td>
      <td>k</td>
      <td>l</td>
      <td>m</td>
      <td>n</td>
      <td>o</td>
      <td>p</td>
      <td>q</td>
      <td>r</td>
      <td>s</td>
      <td>t</td>
      <td>u</td>
      <td>v</td>
      <td>w</td>
      <td>x</td>
      <td>y</td>
      <td>z</td>
    </tr>
    <tr>
      <td> </td>
      <td><strong>l</strong></td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td><strong>a</strong></td>
      <td><strong>t</strong></td>
      <td><strong>f</strong></td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td><strong>c</strong></td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td> </td>
    </tr>
  </tbody>
</table>

<ul>
  <li>Moving on, we can see the first word in the message is <strong>“Efe”</strong>, we need to find a word that <strong>starts and ends with the same letter, and has a different letter in between</strong>. At the 4th spot in the list, we have <strong>ini</strong>. Which means “This”, we can safely assume that this is the case and continue with our table: <strong>e-&gt; i, f -&gt; n</strong>.</li>
  <li>Moving on, we can see the <strong>second word, “kqkbkx”, and using our current table</strong>, we can get the decipher word of <strong>“a[q]ala[x]”</strong> <em>(letters in the [] brackets are not deciphered yet)</em>. At the 9th spot in the list, we can easily spot the word of similar structure, <strong>“adalah”</strong> which means “is”. We can now update our table, with the newly deciphered <strong>x -&gt; h, q -&gt; d</strong>.</li>
  <li>Moving on, we have <strong>“czwkf”</strong>, using our current table, we can get <strong>“[c][z][w]an”. This is too broad for us to search, many words in Indonesian end with “an”, let’s skip this one for now.</strong></li>
  <li>Moving on, we have <strong>“akfs”</strong> -&gt; <strong>“[a]an[s]”</strong>, 4 letters with “an” in the middle. <strong>We can use regex to search for it.</strong> On the Google Spreadsheet, <strong>press Ctrl + F (Find), and select “Search with Regular Expression”.</strong> We can then try to get a Regex string for this query. <strong>We can get “^.{1}an.{1}$”.</strong>  <a href="https://regex101.com/"><em>Learn more about how Regex works and what this means here.</em></a> The first result is, surprisingly, <strong>the most commonly used word in Indonesian, “yang”.</strong> And so, we can get: <strong>a -&gt; y, s - &gt; g</strong>.</li>
  <li>Continuing the trend, the next word, “kdkf” - decipher -&gt; “a[d]an” - regex “^ a.{1}an$” -&gt; too many results, skip. Next word, “qzfskf” -decipher -&gt; “d[z]gan” -regex “^d.{1}ngan$” -&gt; “dengan” -&gt; <strong>z -&gt; e</strong>. Repeat until we have the full alphabet as follows.</li>
</ul>

<table>
  <tbody>
    <tr>
      <td>a</td>
      <td>b</td>
      <td>c</td>
      <td>d</td>
      <td>e</td>
      <td>f</td>
      <td>g</td>
      <td>h</td>
      <td>i</td>
      <td>j</td>
      <td>k</td>
      <td>l</td>
      <td>m</td>
      <td>n</td>
      <td>o</td>
      <td>p</td>
      <td>q</td>
      <td>r</td>
      <td>s</td>
      <td>t</td>
      <td>u</td>
      <td>v</td>
      <td>w</td>
      <td>x</td>
      <td>y</td>
      <td>z</td>
    </tr>
    <tr>
      <td><strong>y</strong></td>
      <td><strong>l</strong></td>
      <td><strong>p</strong></td>
      <td><strong>m</strong></td>
      <td><strong>i</strong></td>
      <td><strong>n</strong></td>
      <td> </td>
      <td> </td>
      <td><strong>t</strong></td>
      <td><strong>u</strong></td>
      <td><strong>a</strong></td>
      <td><strong>t</strong></td>
      <td><strong>f</strong></td>
      <td> </td>
      <td> </td>
      <td> </td>
      <td><strong>d</strong></td>
      <td> </td>
      <td><strong>g</strong></td>
      <td><strong>b</strong></td>
      <td><strong>k</strong></td>
      <td><strong>c</strong></td>
      <td><strong>s</strong></td>
      <td><strong>h</strong></td>
      <td> </td>
      <td><strong>e</strong></td>
    </tr>
  </tbody>
</table>

<p><em>The empty ones are not used in the ciphertext, and so omitted from the table.</em></p>

<h2 id="results">Results</h2>
<p>Using the table, <em>write a script if you want</em>, but we can get the final flag of:  <code class="language-plaintext highlighter-rouge">lactf{selamat_pagi_apakah_kamu_suka_analisis_frekuensi}</code>, which means “good morning do you like frequency analysis” in English. The answer to this question is no when I did the challenge, but when I finally got the flag, yes, yes I do. I love frequency analysis, deeply.</p>

<hr />

<h1 id="osint-closed">OSINT: Closed</h1>
<blockquote>
  <p>OSINT my beloved.</p>
</blockquote>

<h2 id="original-challenge-1">Original Challenge</h2>

<p>*Over spring break, my friend sent me this picture of a place they went to, and said <strong>it was their favourite plate to visit but it closed</strong> :(.</p>

<p><em>Where is this rock?</em></p>

<p><em>Answer using the coordinates of the bottom left corner of the rock, rounded to the nearest thousandth. If the coordinates were the physical location of the bruin bear statue, the flag would be lactf{34.071,-118.445}. Note that there is no space in the flag.</em></p>

<h2 id="provided-files-1">Provided Files</h2>

<p>Rock.png <em>(not the actual file name)</em>
<img src="https://upload.cc/i1/2025/11/21/y4Zb6n.png" alt="https://upload.cc/i1/2025/11/21/y4Zb6n.png" /></p>

<h1 id="chasing-the-goose-1">Chasing the Goose</h1>

<h2 id="mr-johnson-is-that-you">Mr. Johnson? Is that you?</h2>
<p><strong>First, we need to analyse this picture</strong>, to get some information on where the rock could possibly be.<br />
<img src="https://upload.cc/i1/2025/11/21/j5qcX3.png" alt="https://upload.cc/i1/2025/11/21/j5qcX3.png" />
<em>shorebird* (sorry)</em></p>

<p>Very good, we have spotted a lot of basic information from the picture, and we can move on with our investigation. Additionally, from the challenge description, we can also infer the area <strong>was closed of some sor</strong>t.</p>

<p>Also, from the original map, we can tell the orientation of it was <strong>North is Up</strong>, and since the rock’s bump was facing <strong>downwards</strong>, we can safely assume that the <strong>land is up north, and the sea is below</strong>. So, we can start to filter through this one by one.</p>

<p>In addition, the map can also tell us that there are <strong>no signs of a city or civilisation on the premises</strong>.</p>

<p>To summarise, the place we are looking <strong>meets the following criteria</strong>:</p>

<ul>
  <li>Must be <strong>near a coast</strong>, as <strong>there is seawater</strong>;</li>
  <li><strong>In Southern California</strong>;</li>
  <li>There are <strong>shorebirds nesting in the area</strong>;</li>
  <li>Next to a trail that’s named “…(h/n)ore Trail”;</li>
  <li>Closed after spring;</li>
  <li>Very far from any city or civilizations in general;</li>
  <li>Land is up, sea is below.</li>
</ul>

<h2 id="find-a-rock">Find-A-Rock</h2>

<p>Upon preliminary examination, there are <strong>a lot</strong> of state parks in the state of California, and even just Southern California alone. <strong>We will need to dig deeper.</strong></p>

<p>Looking at the <strong>California Department of Parks and Recreation website, we can find a tool named “<a href="https://www.parks.ca.gov/parkindex/">Find-A-Park</a>” which allows us to use filters.</strong></p>

<p>Since we know there’s a trail next door named “…(h/n)ore Trail”, we can safely say that <strong>there’s a hiking trail next to the park we are looking for.</strong> Lucky for us, this tool also comes with a map feature, so we can narrow it down even further.</p>

<p><img src="https://upload.cc/i1/2025/11/21/umoXjN.png" alt="https://upload.cc/i1/2025/11/21/umoXjN.png" />
Okay, now let’s go through this thing. Though, the issue of where the division line really is is up to debate. But, I really do not care, so I am going to use the Fresno line as the division line.</p>

<p><img src="https://upload.cc/i1/2025/11/21/90PF7t.png" alt="https://upload.cc/i1/2025/11/21/90PF7t.png" />
So, we can start to filter through this one by one. We can look from up to down first, as there are more state parks in the area.</p>

<p><img src="https://upload.cc/i1/2025/11/21/j5ZFMT.png" alt="https://upload.cc/i1/2025/11/21/j5ZFMT.png" />
So, we have the <a href="https://www.parks.ca.gov/?page_id=569"><strong>Ishxenta State Park</strong></a>, <a href="https://www.parks.ca.gov/?page_id=571"><strong>Point Lobos State Natural Reserve</strong></a>, and <a href="https://www.parks.ca.gov/?page_id=579"><strong>Garrapata State Park</strong></a>. Let’s open these locations on Google Maps in Satellite mode.</p>

<p><img src="https://upload.cc/i1/2025/11/21/XeMNta.png" alt="https://upload.cc/i1/2025/11/21/XeMNta.png" />
This is the <strong>Ishxenta State Park</strong> <em>(or formerly known as the Point Lobos Ranch Park Property as shown on Google Maps and the official website).</em> And <strong>from preliminary examination, we can tell this location is landlocked and not near any oceans</strong>. We can move on from this one on to Point Lobos SNR.</p>

<p><img src="https://upload.cc/i1/2025/11/21/02CzuN.png" alt="https://upload.cc/i1/2025/11/21/02CzuN.png" />
Oh! We found the “…(h/n)ore Trail” trail we were talking about. <strong>Turns out, it’s the Southern Shore Trail</strong>. This means <strong>we are on the right track</strong>.<br />
Move our mouse a little bit… And…</p>

<p><img src="https://upload.cc/i1/2025/11/21/zLyuCs.png" alt="https://upload.cc/i1/2025/11/21/zLyuCs.png" />
We found it! Let’s confirm with our original image!</p>

<p><img src="https://upload.cc/i1/2025/11/21/nKbFlw.png" alt="https://upload.cc/i1/2025/11/21/nKbFlw.png" />
We can now safely say that this is what we were looking for, in the <a href="https://maps.app.goo.gl/ufgKo7WRAzGNre1B7"><strong>Point Lobos State Natural Reserve</strong></a>.</p>

<h1 id="results-1">Results</h1>
<p>We can get the final coordinates of the location as <strong>“36.51555901354592, -121.94929707007033” by right clicking on the bottom left corner of the rock</strong>. The challenge wanted the coordinates accurate to the nearest thousandth, so the final flag is <strong>lactf{36.516,-121.949}</strong>.</p>

<p>Very good challenge, and I enjoyed it thoroughly.</p>]]></content><author><name></name></author><category term="cybersecurity" /><summary type="html"><![CDATA[CRYPTO: Selamat Pagi My best friend’s first name is Frequency, and his last name is Analysis.]]></summary></entry><entry><title type="html">IrisCTF 2024 Write-ups</title><link href="https://blog.bobbedbob.io/cybersecurity/2024/01/08/irisctf-24.html" rel="alternate" type="text/html" title="IrisCTF 2024 Write-ups" /><published>2024-01-08T00:30:00+00:00</published><updated>2024-01-08T00:30:00+00:00</updated><id>https://blog.bobbedbob.io/cybersecurity/2024/01/08/irisctf-24</id><content type="html" xml:base="https://blog.bobbedbob.io/cybersecurity/2024/01/08/irisctf-24.html"><![CDATA[<h1 id="foreword">Foreword</h1>
<p>These solutions are not the best, this is the first time I’ve participated in a CTF challenge, so I’m trying my best :sob:
This Write-Up consists of all the challenges I’ve solved. I think I’ve used OSINT a bit too much in solving the Networks challenge. But, hey, I had fun, will come again 10/10.</p>

<hr />

<h1 id="osint-away-on-vacation">OSINT: Away On Vacation</h1>
<blockquote>
  <p>Public accounts are sitting ducks.</p>
</blockquote>

<h2 id="provided-clues">Provided Clues</h2>
<p>The <strong>challenge</strong> provided you with an E-mail to Iris Stein’s Assistant, Michelangelo Corning at <code class="language-plaintext highlighter-rouge">michelangelocorning0490@gmail.com</code>.</p>

<h2 id="chasing-the-goose">Chasing the Goose</h2>
<h3 id="the-e-mail">The E-mail</h3>

<p>By sending the E-mail address anything, you will receive an automated, <em>away on vacation</em> message.</p>
<blockquote>
  <p>Dear,</p>

  <p>Thank you for the email, I’m currently away on vacation to celebrate New Years!</p>

  <p>If you would like a quicker response, feel free to reach out to my social media. I mostly talk about birds on it.</p>

  <p>Have a great start to the year, and take care!</p>
</blockquote>

<p>This Email would reveal what <strong>Michelangelo talks about on his public social media account, birds</strong>.</p>

<table>
  <tbody>
    <tr>
      <td>Michelangelo’s</td>
      <td>Social media account</td>
      <td>With Bird content</td>
    </tr>
  </tbody>
</table>

<h3 id="search-engine">Search Engine</h3>
<p>Simply, search up “Michelangelo Corning” on a search engine, if you are lucky, you will be able to find his <a href="https://www.instagram.com/michelangelo_corning/">Instagram</a> account.</p>
<h2 id="results">Results</h2>
<p>On his Instagram account, just go through a few posts, and you will find the flag: <a href="https://www.instagram.com/p/C1n-7_1LfBc/"><em>irisctf{pub1ic_4cc0unt5_4r3_51tt1ng_duck5}</em></a><em>.</em></p>

<hr />

<h1 id="osint-personal-breach">OSINT: Personal Breach</h1>
<blockquote>
  <p>Social media is an infection.</p>
</blockquote>

<h2 id="provided-clues-1">Provided Clues</h2>
<p>The <strong>challenge</strong> provided you with a <a href="https://personal-breach-web.chal.irisc.tf/">web page</a>. Opening the webpage reveals <strong>3 security questions.</strong> We will need to find <strong>Iris’ Age, Birthing Hospital and Workplace.</strong> The challenge also specified <strong>“The weakest link in security could be the people around you.”</strong> meaning we should start looking for people <strong>around Iris</strong> and they could reveal the answers.</p>
<h2 id="chasing-the-goose-1">Chasing the Goose</h2>

<h3 id="iris-instagram">Iris’ Instagram</h3>
<p>We’ve found Michelangelo’s Instagram, now we just need to find Iris’. Easy enough, going to the <strong>Tagged</strong> section of his public Instagram account, you’ll spot a post from Iris. Simply open the post, and you’ve hit Iris’ Instagram account.</p>

<h3 id="iris-workplace">Iris’ Workplace</h3>

<p>In order to find the workplace of a person, you will need to find a platform where people post about their jobs. The closest platform might’ve been… <strong>Linkedin.</strong> Now, we just need to find Iris Stein’s public Linkedin profile.</p>

<h3 id="iris-mother">Iris’ Mother</h3>

<p>Going through some of Iris Stein’s personal posts, you will find this post:</p>

<p><img src="https://upload.cc/i1/2025/11/21/Prm1LQ.png" alt="https://upload.cc/i1/2025/11/21/Prm1LQ.png" /></p>

<p>In this post, she revealed the name of her mother, <strong>Elania Stein.</strong> This is <strong>crucial</strong> to this challenge and the few coming up.</p>

<h3 id="what-we-are-looking-for">What we are looking for</h3>

<table>
  <tbody>
    <tr>
      <td>Iris Stein’s</td>
      <td>Linkedin account</td>
    </tr>
    <tr>
      <td>Elania Stein’s</td>
      <td>Social media account</td>
    </tr>
  </tbody>
</table>

<h3 id="searching">Searching</h3>

<p>Using the search engine, it is very difficult to find Elania Stein’s social media accounts. However, based on her <strong>advanced age</strong>, it might be easy to assume that she’s on some old, boring platform like… <strong>Facebook</strong>. Using a quick search on Facebook, we can reveal <a href="https://www.facebook.com/profile.php?id=61555040318052">her Facebook account</a>.<br />
Iris Stein’s Linkedin account is easy to find, however, we simply need to search on Linkedin, and <a href="https://www.linkedin.com/in/iris-stein-57894b2a7/">we can find it</a>.</p>

<h3 id="iris-security-questions">Iris’ Security Questions</h3>

<p>On her Linkedin account, we can easily find that she worked at the <strong>Mountain Peak Hiring Agency</strong>. In <strong>San Francisco, CA.</strong><br />
On Elania’s Facebook account, if we scroll all the way to the bottom, we can find a post about Iris’ <strong>birthday</strong>, with an image of a <strong>hospital room</strong>.<br />
The birthday revealed would be <strong>27th April, 1996.</strong> Put that in a calculator and we can find out that Iris <strong>is 27</strong>. <br />
To find her <strong>birthing hospital</strong> would be a bit tricky, however, she revealed that, <strong><em>“…To think they got ranked to be the best maternity hospital in Manhattan is astounding…”</em></strong> Using a common ranking tool like Yelp, we can find her birthing hospital to be the <strong>Lenox Hill Hospital</strong>. <em>(This is also doable with a Google Image search but this is how I did it)</em></p>

<h2 id="results-1">Results</h2>

<p>Putting all the answers to her security questions reveals the flag: <code class="language-plaintext highlighter-rouge">irisctf{s0c1al_m3d1a_1s_an_1nf3cti0n}</code>.</p>

<hr />

<h1 id="osint-a-harsh-reality-of-passwords">OSINT: A Harsh Reality of Passwords</h1>
<blockquote>
  <p>🅱️Crypted! (sorry)</p>
</blockquote>

<h2 id="provided-clues-2">Provided Clues</h2>

<p>This <strong>challenge</strong> uses <strong>ALL</strong> of the clues, results and accounts we’ve found so far. However, the challenge also provided a <strong>BCrypt hash of  <em>$2b$04$DkQOnBXHNLw2cnsmSEdM0uyN3NHLUb9I5IIUF3akpLwoy7dlhgyEC</em></strong><em>.</em> And later, Lychi, being the good person that she is, revealed 3 extra clues. We can summarise everything we have so far.</p>

<table>
  <tbody>
    <tr>
      <td>Iris Stein</td>
      <td><a href="https://www.linkedin.com/in/iris-stein-57894b2a7/">Linkedin</a>, <a href="https://www.instagram.com/irisstein_station/">Instagram</a></td>
    </tr>
    <tr>
      <td>Elania Stein</td>
      <td><a href="https://www.facebook.com/profile.php?id=61555040318052">Facebook</a></td>
    </tr>
    <tr>
      <td>Password Clues</td>
      <td>Hash: $2b$04$DkQOnBXHNLw2cnsmSEdM0uyN3NHLUb9I5IIUF3akpLwoy7dlhgyEC</td>
    </tr>
    <tr>
      <td>Lychi’s Clues</td>
      <td>Something <strong>Iris Stein finds important.</strong> There are <strong>3 words and some numbers.</strong> Proper capitalisations. If you are in the Discord server, there <em>(might)</em> have been an implication that there is <strong>a date involved in the final password.</strong></td>
    </tr>
  </tbody>
</table>

<h2 id="chasing-the-goose-2">Chasing the Goose</h2>
<h3 id="through-a-hole-in-society">Through a hole in society</h3>
<p>To find her plaintext password, our best chance at it would be <strong>brute forcing</strong> it, since we have the hash. <strong>We’ll need to create a wordlist, including content that Iris Stein finds important.</strong></p>

<h3 id="the-letters">The Letters</h3>

<p>Through Elania and Iris’ posts, we can find some words that are interesting.</p>
<ul>
  <li>Locations: <a href="https://www.instagram.com/p/C1WM6L2uuom/?img_index=1"><strong>Portofino</strong></a> <strong><a href="https://www.instagram.com/p/C1qxxSwu7qD/">(x2)</a>,</strong> <strong>Italy, <a href="https://www.instagram.com/p/C1rBMQFu-VC/">Amsterdam</a>, Netherlands, <a href="https://www.instagram.com/p/C1rAzn2OZUL/?img_index=1">Swarovski</a>, <a href="https://www.instagram.com/p/C1WM6L2uuom/?img_index=1">Milan, <del>Starbucks</del>, <del>Al Conte Ugolino</del></a>, <a href="https://www.instagram.com/p/C1UZCAnrEc8/?img_index=1">Berlin</a>.</strong></li>
  <li>Food: <a href="https://www.instagram.com/p/C1qwh0Cuj5P/"><strong>Mimosa, Mimosas</strong></a><strong>, <a href="https://www.instagram.com/p/C1WM6L2uuom/?img_index=1">Tiramisu</a>.</strong></li>
  <li>Possible Important / Generic Things: <strong>Mother, Mom, Love, Family, Travel, Traveling, Travelling, Iris, Stein, Elania, Forever, Fun, Life.</strong></li>
</ul>

<h3 id="the-numbers">The Numbers</h3>

<p>Based on their advanced age, it would be safe to assume that they had put their <strong>birthdays</strong> in their passwords. <strong>But how, and whose?</strong> We’ll have to try all of them. <strong>This would also include situations where they failed to put a 0 where it should have one.</strong></p>

<p><strong>Iris Stein’s Birthdays</strong></p>

<ul>
  <li>“4271996”, (M/D/4Y)</li>
  <li>“04271996” (MM/DD/4Y)</li>
  <li>“2741996”, (DD/M/4Y)</li>
  <li>“27041996” (DD/MM/4Y)</li>
  <li>“1996427”, (4Y/M/DD)</li>
  <li>“19960427” (4Y/MM/DD)</li>
</ul>

<p><strong>Elania Stein’s Birthdays</strong></p>

<ul>
  <li>“196548”,  (4Y/M/D)</li>
  <li>“19650408” (4Y/MM/DD)</li>
  <li>“1965048”, (4Y/MM/D)</li>
  <li>“1965408” (4Y/M/DD)</li>
  <li>“481965”, (M/D/4Y)</li>
  <li>“04081965”, (MM/DD/4Y)</li>
  <li>“0481965”, (MM/D/4Y)</li>
  <li>“4081965”, (M/DD/4Y)</li>
  <li>“841965”, (D/M/4Y)</li>
  <li>“08041965”, (DD/MM/4Y)</li>
  <li>“0841965”, (DD/M/4Y)</li>
  <li>“8041965” (D/MM/4Y)</li>
</ul>

<h3 id="making-the-nuke">Making the Nuke</h3>

<p>Shockingly, it would be very difficult to get this done one by one, as there are millions of combinations.<br />
Using python (haters can hate), we can create an inefficient but effective solution, like so:<br />
<em><strong>Note: you will need the <a href="https://pypi.org/project/bcrypt/">bcrypt package</a> for this.</strong></em></p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">bcrypt</span>

<span class="n">passhash</span> <span class="o">=</span> <span class="s">"$2b$04$DkQOnBXHNLw2cnsmSEdM0uyN3NHLUb9I5IIUF3akpLwoy7dlhgyEC"</span>

<span class="n">a</span> <span class="o">=</span> <span class="p">[</span>
    <span class="s">"Tiramisu"</span><span class="p">,</span>
    <span class="s">"Elania"</span><span class="p">,</span>
    <span class="s">"Iris"</span><span class="p">,</span>
    <span class="s">"Stein"</span><span class="p">,</span>
    <span class="s">"Forever"</span><span class="p">,</span>
    <span class="s">"Travels"</span><span class="p">,</span>
    <span class="s">"Travel"</span><span class="p">,</span>
    <span class="s">"Fun"</span><span class="p">,</span>
    <span class="s">"Life"</span><span class="p">,</span>
    <span class="s">"Mom"</span><span class="p">,</span>
    <span class="s">"Mother"</span><span class="p">,</span>
    <span class="s">"Travelling"</span><span class="p">,</span>
    <span class="s">"Traveling"</span><span class="p">,</span>
    <span class="s">"Family"</span><span class="p">,</span>
    <span class="s">"Love"</span><span class="p">,</span>
    <span class="s">"Swarovski"</span><span class="p">,</span>
    <span class="s">"Portofino"</span><span class="p">,</span>
    <span class="s">"Mimosas"</span><span class="p">,</span>
    <span class="s">"Mimosa"</span><span class="p">,</span>
    <span class="s">"Italy"</span><span class="p">,</span>
    <span class="s">"Netherlands"</span><span class="p">,</span>
    <span class="s">"Berlin"</span><span class="p">,</span>
<span class="p">]</span>

<span class="n">formats</span> <span class="o">=</span> <span class="p">[</span>
    <span class="s">"4271996"</span><span class="p">,</span>
    <span class="s">"04271996"</span>
    <span class="s">"2741996"</span><span class="p">,</span>
    <span class="s">"27041996"</span>
    <span class="s">"1996427"</span><span class="p">,</span>
    <span class="s">"19960427"</span>
    <span class="s">"196548"</span><span class="p">,</span>
    <span class="s">"19650408"</span>
    <span class="s">"1965048"</span><span class="p">,</span>
    <span class="s">"1965408"</span>
    <span class="s">"481965"</span><span class="p">,</span>
    <span class="s">"04081965"</span><span class="p">,</span>
    <span class="s">"0481965"</span><span class="p">,</span>
    <span class="s">"4081965"</span><span class="p">,</span>
    <span class="s">"841965"</span><span class="p">,</span>
    <span class="s">"08041965"</span><span class="p">,</span>
    <span class="s">"0841965"</span><span class="p">,</span>
    <span class="s">"8041965"</span>
<span class="p">]</span>

<span class="n">cnt</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">a</span><span class="p">:</span>
    <span class="k">for</span> <span class="n">j</span> <span class="ow">in</span> <span class="n">a</span><span class="p">:</span>
        <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">a</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">formats</span><span class="p">:</span>
                <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="n">j</span> <span class="ow">or</span> <span class="n">i</span> <span class="o">==</span> <span class="n">k</span> <span class="ow">or</span> <span class="n">j</span> <span class="o">==</span> <span class="n">k</span><span class="p">:</span>
                    <span class="k">continue</span>
                <span class="n">cnt</span> <span class="o">+=</span> <span class="mi">1</span>
                <span class="n">s</span> <span class="o">=</span> <span class="s">""</span>
                <span class="n">s</span> <span class="o">+=</span> <span class="n">i</span>
                <span class="n">s</span> <span class="o">+=</span> <span class="n">j</span>
                <span class="n">s</span> <span class="o">+=</span> <span class="n">k</span>
                <span class="n">s</span> <span class="o">+=</span> <span class="n">m</span>
                <span class="k">if</span> <span class="n">bcrypt</span><span class="p">.</span><span class="n">checkpw</span><span class="p">(</span><span class="n">s</span><span class="p">.</span><span class="n">encode</span><span class="p">(</span><span class="s">"utf-8"</span><span class="p">),</span> <span class="n">passhash</span><span class="p">.</span><span class="n">encode</span><span class="p">(</span><span class="s">"utf-8"</span><span class="p">)):</span>
                    <span class="k">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">cnt</span><span class="p">)</span> <span class="o">+</span> <span class="s">" | MATCH! | "</span> <span class="o">+</span> <span class="n">s</span><span class="p">)</span>
                    <span class="nb">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
                <span class="k">else</span><span class="p">:</span>
                    <span class="k">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">cnt</span><span class="p">)</span> <span class="o">+</span> <span class="s">" | NO MATCH | "</span> <span class="o">+</span> <span class="n">s</span><span class="p">)</span>

</code></pre></div></div>

<p>Running this code, you will eventually receive the final password at attempt 92,048.</p>

<h2 id="results-2">Results</h2>
<p>The code revealed her password to be “PortofinoItalyTiramisu0481965”. Wrapping that around the fancy irisctf tag, we will have the final flag, <code class="language-plaintext highlighter-rouge">irisctf{PortofinoItalyTiramisu0481965}</code>.</p>

<hr />

<h1 id="osint-czech-where">OSINT: Czech Where?</h1>
<blockquote>
  <p>Geo-geo-geo-guesssss!?!?</p>
</blockquote>

<h2 id="provided-clues-3">Provided Clues</h2>
<p>The <strong>challenge</strong> provided you with a picture. <strong>This challenge requires no prior clues.</strong><br />
<strong>Note: the challenge only asked for the street name.</strong><br />
<img src="https://upload.cc/i1/2025/11/21/Itf4Ji.png" alt="https://upload.cc/i1/2025/11/21/Itf4Ji.png" /></p>

<h2 id="chasing-the-goose-3">Chasing the Goose</h2>
<h3 id="pixel-analysis">Pixel Analysis</h3>
<p>On the image, you can spot a few things, highlighted in the picture on the next page:<br />
<img src="https://upload.cc/i1/2025/11/21/S97els.png" alt="https://upload.cc/i1/2025/11/21/S97els.png" />
Putting these clues on Google, simply search “Czech wooden products”, and we can find, in <strong>Images, we can see a maps.me website, showing a store with the (almost) exact same font, and writings, we can safely assume this is the same store. Telling us that the store is in Prague.</strong><br />
<img src="https://upload.cc/i1/2025/11/21/sOBJ6x.png" alt="https://upload.cc/i1/2025/11/21/sOBJ6x.png" />
We can then use Google maps, and search <strong>“Prague, czech wooden products”</strong>
Revealing the street, Zlatá ulička u Daliborky.</p>
<h2 id="results-3">Results</h2>
<p>With the street name, the challenge asked us to keep it only in lowercase alphabetical letters only, and replace spaces with an underscore. Giving us the final flag: <em>irisctf{zlata_ulicka_u_daliborky}.</em></p>

<hr />

<h1 id="-net-wheres-skat">🏆 NET: Where’s Skat?</h1>
<blockquote>
  <p>3.7 crocodiles away from the flag</p>
</blockquote>

<h2 id="provided-clues-4">Provided Clues</h2>
<p>The <strong>challenge</strong> provided us with a <strong>.pcap</strong> file of Skat’s network history. The <strong>challenge</strong> also said that <strong>Skat was “wardriving”</strong>. This means we will need to look at the Network SSIDs near him to find out where he is.</p>

<h2 id="chasing-the-goose-4">Chasing the Goose</h2>

<h3 id="baby-sharking">Baby-Sharking</h3>

<p>Opening the .pcap file with Wireshark, and filtering out the local IPs by using:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>!(ip.src in {10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16} &amp;&amp; ip.dst in {10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16})
</code></pre></div></div>
<p>We can get a slightly better view of where Skat is. <br />
Looking through the SSIDs, you will notice that they change quite <strong>dramatically as time goes on, this suggests that Skat was on a moving vehicle</strong>, <strong>but what kind? And where to?</strong> Let’s summarise some of the SSIDs we can see <strong>at the end of the log (because we are looking for the destination, after all)</strong>.</p>

<ul>
  <li>Amtrak_WiFi</li>
  <li>Metrolink</li>
  <li>LAUS Events</li>
</ul>

<p><strong>Amtrak</strong> suggests that Skat was on a <strong>train</strong>, and trains can only stop at train stations, this means our destination would be near a <strong>train station in America</strong>.</p>

<p>It also has to have a <strong>Metrolink station</strong>. Using the power of search engines, we can find out that <strong>Metrolink</strong> is a <strong>Southern California</strong> transportation agency. This means, <strong>Skat’s in LA</strong>.</p>

<p>If you live in <strong>Los Angeles</strong>, you’ll probably see all of these, including the “LAUS” SSID, and go, “Oh my god! It’s Union Station!”, and if you did, congrats, move on.</p>

<p>Unfortunately, I don’t, and I do not use crocodiles as a measuring unit. This means we will have to use the search engine again. If you scroll up a bit in the logs, you’ll find a SSID that reads <strong>“Cilantro Union”</strong>, putting this in Google Maps, reveals the destination to be the <strong>Union Station</strong>.</p>

<h2 id="results-4">Results</h2>
<p>Putting Union Station in the irisctf wrappers, and we can get the final flag of <code class="language-plaintext highlighter-rouge">irisctf{Los_Angeles_Union_Station}</code>.</p>

<h1 id="re-rune-whats-that">RE: Rune? What’s that?</h1>

<h2 id="golang-whats-that"><em>Golang? What’s that?</em></h2>

<h2 id="provided-clues-5">Provided Clues</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>The **challenge** provided you with a Golang script, **main.go** and a file with a **runed** string named “the”.
</code></pre></div></div>

<h2 id="chasing-the-goose-5">Chasing the Goose</h2>

<h3 id="reversing-the-reverse">Reversing the reverse</h3>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>To reverse engineer this code, we will need to see what it does first. The script, effectively, **picks the letters from "irisctf{this\_is\_not\_the\_real\_flag}", one by one**, then, transferring them into **a number** (ASCII table), and adding the **previous character’s number** together, to get a new character. Putting that in a new string, and outputting it.  
To get the flag, we’ll need to flip it over, by changing the code on **Line 16** from **v+z** to **v-z**, same goes with **Line 17**, when we need to make z the value of v-z instead, as that is now the previous character.
</code></pre></div></div>

<h3 id="reversed-code">Reversed Code</h3>

<div class="language-golang highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">package</span> <span class="n">main</span>
<span class="k">import</span> <span class="p">(</span>
	<span class="s">"fmt"</span>
	<span class="s">"os"</span>
	<span class="s">"strings"</span>
<span class="p">)</span>

<span class="k">var</span> <span class="n">flag</span> <span class="err">\</span><span class="o">=</span> <span class="s">"iÛÛÜÖ×ÚáäÈÑ¥gebªØÔÍãâ£i¥§²ËÅÒÍÈä"</span>

<span class="k">func</span> <span class="n">init</span><span class="p">()</span> <span class="p">{</span>
	<span class="n">runed</span> <span class="o">:=</span> <span class="err">\</span><span class="p">[</span><span class="err">\</span><span class="p">]</span><span class="kt">string</span><span class="p">{}</span>
	<span class="n">z</span> <span class="o">:=</span> <span class="kt">rune</span><span class="p">(</span><span class="m">0</span><span class="p">)</span>

	<span class="k">for</span> <span class="err">\</span><span class="n">_</span><span class="p">,</span> <span class="n">v</span> <span class="o">:=</span> <span class="k">range</span> <span class="n">flag</span> <span class="p">{</span>
		<span class="n">runed</span> <span class="err">\</span><span class="o">=</span> <span class="nb">append</span><span class="p">(</span><span class="n">runed</span><span class="p">,</span> <span class="kt">string</span><span class="p">(</span><span class="n">v</span><span class="o">-</span><span class="n">z</span><span class="p">))</span>
		<span class="n">z</span> <span class="err">\</span><span class="o">=</span> <span class="n">v</span> <span class="err">\</span><span class="o">-</span> <span class="n">z</span>
	<span class="p">}</span>

	<span class="n">flag</span> <span class="err">\</span><span class="o">=</span> <span class="n">strings</span><span class="o">.</span><span class="n">Join</span><span class="p">(</span><span class="n">runed</span><span class="p">,</span> <span class="s">""</span><span class="p">)</span>
<span class="p">}</span>

<span class="k">func</span> <span class="n">main</span><span class="p">()</span> <span class="p">{</span>
	<span class="n">file</span><span class="p">,</span> <span class="n">err</span> <span class="o">:=</span> <span class="n">os</span><span class="o">.</span><span class="n">OpenFile</span><span class="p">(</span><span class="s">"the"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">O</span><span class="err">\</span><span class="n">_RDWR</span><span class="o">|</span><span class="n">os</span><span class="o">.</span><span class="n">O</span><span class="err">\</span><span class="n">_CREATE</span><span class="p">,</span> <span class="m">0644</span><span class="p">)</span>
	<span class="k">if</span> <span class="n">err</span> <span class="err">\</span><span class="o">!=</span> <span class="no">nil</span> <span class="p">{</span>
		<span class="n">fmt</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
		<span class="k">return</span>
	<span class="p">}</span>

	<span class="k">defer</span> <span class="n">file</span><span class="o">.</span><span class="n">Close</span><span class="p">()</span>
	<span class="k">if</span> <span class="err">\</span><span class="n">_</span><span class="p">,</span> <span class="n">err</span> <span class="o">:=</span> <span class="n">file</span><span class="o">.</span><span class="n">Write</span><span class="p">(</span><span class="err">\</span><span class="p">[</span><span class="err">\</span><span class="p">]</span><span class="kt">byte</span><span class="p">(</span><span class="n">flag</span><span class="p">));</span> <span class="n">err</span> <span class="err">\</span><span class="o">!=</span> <span class="no">nil</span> <span class="p">{</span>
		<span class="n">fmt</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
		<span class="k">return</span>
	<span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="results-5">Results</h2>
<p>Running that script, we will get the final flag in “the” file (pun not intentional), being: <code class="language-plaintext highlighter-rouge">irisctf{i\_r3411y\_1ik3\_num63r5}</code>.</p>

<h1 id="conclusion">Conclusion</h1>
<p>The first few flags captured, this was a <strong>very fun</strong> and sometimes <strong>frustrating</strong> adventure. I’ve had my regrets, should’ve spent some more time on <strong>Web Exploitation &gt; Skat’s password</strong>, maybe I could’ve solved it. See you next year.</p>]]></content><author><name></name></author><category term="cybersecurity" /><summary type="html"><![CDATA[Foreword These solutions are not the best, this is the first time I’ve participated in a CTF challenge, so I’m trying my best :sob: This Write-Up consists of all the challenges I’ve solved. I think I’ve used OSINT a bit too much in solving the Networks challenge. But, hey, I had fun, will come again 10/10.]]></summary></entry></feed>