[Permanent CTF for beginners] setodaNote CTF WEB Writeup! Recommended for getting a sense of CTF!

[Permanent CTF for beginners] setodaNote CTF WEB Writeup! Recommended for getting a sense of CTF!

This time, I'll try out the setodaNote CTF web.
"setodaNote CTF: https://ctfexh.setodanote.net/About "

The setodaNote CTF is a permanent CTF that was held in 2021, and in terms of difficulty, it is equivalent to an introductory level.
If anyone is thinking of starting CTF, I think you'll enjoy it if you try it!

Please note that the explanation is spoilers.

Recommended reference books
Author: IPUSIRON
¥2,090 (As of 15:33 on 2025/07/13 | Amazon research)
\Amazon Prime Day is now underway! /
Amazon
Author: IPUSIRON
¥3,850 (As of 21:11 on 07/08/2025 | Amazon research)
\Amazon Prime Day is now underway! /
Amazon
Author: Justin Seitz, Author: Tim Arnold, Supervised by: Mantani Nobutaka, Translation: Arai Yu, Translation: Kakara Hirosei, Translation: Murakami Ryo
¥3,520 (As of 12:26 on 07/09/2025 | Amazon research)
\Amazon Prime Day is now underway! /
Amazon
table of contents

Body

When I opened the above URL, I was taken to the following screen.

While looking up Body because the title is Body, I found a flag that was commented out!

Answer

flag{Section_9}

Header

When I opened the above URL, I got a screen like this:

Next, I was looking up the Header, and when I found a flag!

Answer

flag{Just_a_whisper}

puni_puni

This one is a bit special. It's a Punycode issue.
Punycode is one of the encoding methods that convert Unicode strings into alphabets, numbers, and hyphens to enable internationalized domain names to be used in existing DNS!

You can convert it on the site like the one above.
Anyway, I tried converting it.

The flags are san, san, pe, u, n, y, c, o, dy, yon, yon, yon, yon, katakana notation is in lowercase letters, while hiragana notation is in half-width digit numbers. Please remove the flags as commas are delimited characters.

It seems that you should create a flag based on this sentence.

Answer

flag{33punycode44}

Mistake

It appears that confidential information has been leaked from the site being created.

Thankfully, he gives us a polite hint, "Everything is open here. If you follow it, you'll be sure to find what you're looking for."

Judging from the above, I thought it wasn't a directory listing.
So, for now, let's look at the visible directories "/assets/" and "/images/".

I took a look at "/assets/", but it seems there is no information about this.

There was a flag in "/images/"!

Answer

flag{You_are_the_Laughing_Man,_aren't_you?}

tkys_royale

When I opened the above URL, I got a login form.

Anyway, while looking at the source, I discovered a test user.

When I logged in, I was told, "You need to be logged in as admin to find the flag."
You are likely to be able to log in using the username "addmin".

Just to be safe, I tried logging in with "admin:admin" or "admin:pass123", but it didn't work.
Next, try SQL injection.

admin:' OR 1 = 1; #

I was able to log in and get the flag!

Answer

flag{SQLi_with_b1rds_in_a_b34utiful_landscape}

Estimated

It appears that confidential information has been leaked on the blog. When I looked at the URL, I saw the blog.

I clearly found an apology article for this incident.
In terms of content, there seems to be a flag in the image.

The image naming convention appears to be "YYYYMMDD001b.jpg".

The inappropriate images are one day before June 3, 2021, so they will be June 2, 2021.
This image should probably be "20210602001b.jpg".

I've managed to get the image.

I was looking for a lot from here, but when I enlarged the PC section of the image, I found a flag. . .

Answer

flag{The_flag_wouldn't_like_to_end_up_in_other_peoples_photos}

Mx.Flag

The above URL has a letter-like website.

After looking at various things, I noticed that favicon.png was loaded.
However, if you look closely, the favicon is not displayed, so it looks suspicious.

When I checked the meta information using exiftool, it appears that the image was just a txt.

┌──(hacklab㉿hacklab)-[~] └─$ exiftool favicon.png ExifTool Version Number: 12.65 File Name: favicon.png Directory: . File Size: 122 bytes File Modification Date/Time: 2023:08:24 09:49:22+09:00 File Access Date/Time: 2023:08:24 09:49:22+09:00 File Inode Change Date/Time: 2023:08:24 09:49:28+09:00 File Permissions: -rw-r--r-- File Type: TXT File Type Extension: txt MIME Type: text/plain MIME Encoding: us-ascii Newlines: Windows CRLF Line Count: 3 Word Count: 10

So, when I checked the contents, I was able to find the flag.

┌──(hacklab㉿hacklab)-[~] └─$ cat favicon.png // flag{Mr_Flag_hiding_in_the_favicon} console.table({place: "favicon.png", png: "false", flag: "true", Look: "me"});

Answer

flag{Mr_Flag_hiding_in_the_favicon}

Redirect

There was a blog site. It's called Redirect, so I'll look into redirects.

<script>!function(){var ref = document.referrer;var domain = ref.match(/^http([s]?):\/\/([a-zA-Z0-9-_\.]+)(:[0-9]+)?/)[2];if(domain == "www.google.com" || domain == "www.google.co.jp" ){location.href = atob('Li9iV0ZzYTJsMC5odG1s');}}();</script>

I found that decoding in Base64 redirects to "./bWFsa2l0.html".

It's difficult to actually redirect, so I'll use API testers.

<!DOCTYPE HTML><html><head><title>start</title><noscript><meta http-equiv=refresh content="1; URL=./noscript.html"></noscript><script> !function() { var params = new URL(window.location.href).searchParams; if(Array.from(params).length > 0){ location.href = './bm9mbGFn/?'+params; }else{ location.href = './bWFsa2l0.html?callback=wantFlag&data1=2045&data2=0907&data3=BiancoRoja&data4=1704067200'; } }(); </script></head><body><p>Find out the flag.</p></body></html>

When I checked the contents of the HTML to which I was redirected, it appears that I'm redirecting further.

if(Array.from(params).length > 0){ location.href = './bm9mbGFn/?'+params; }else{ location.href = './bWFsa2l0.html?callback=wantFlag&data1=2045&data2=0907&data3=BiancoRoja&data4=1704067200'; }

As far as you can see above, you should make a request as follows:

./bm9mbGFn/?callback=wantFlag&data1=2045&data2=0907&data3=BiancoRoja&data4=1704067200

Let's make a request.

<html><head><title>Next</title><noscript><meta http-equiv=refresh content="1; URL=../noscript.html"></noscript><script> !function() { var params = new URL(window.location.href).searchParams; location.href = '../bmV4dG5leHQ/?'+params }(); </script></head><body><p>No flag here. Go to next.</p></body></html>

It appears to be redirected again.
The parameters are redirected to "../bmV4dG5leHQ/" with the same parameters.

<html><head><title>Next-Next</title><noscript><meta http-equiv=refresh content="1; URL=../noscript.html"></noscript><script> !function() { var params = new URL(window.location.href).searchParams; location.href = '../b25lLXR3by10aHJlZQ/?'+params }(); </script></head><body><p>No flag here too. Go to next.</p></body></html>

It seems that it's still being redirected.
We will redirect the system in the way we have done up until now.

<html><head><title>Branching point</title><noscript><meta http-equiv=refresh content="1; URL=../noscript.html"></noscript><script> !function() { var params = new URL(window.location.href).searchParams; if (params.get('callback') == 'getFlag') { location.href = '../dGFjaGlrb21hX2thd2FpaV95b25l/?' + params; }else{ location.href = '../ZGFtbXlmbGFn/?' + params; } }(); </script></head><body><p>You need the correct parameters to get the flag.</p></body></html>
if (params.get('callback') == 'getFlag') { location.href = '../dGFjaGlrb21hX2thd2FpaV95b25l/?' + params;

I want to enter this, so I'll turn the callback parameter into getFlag and let it redirect.

<html><head><title>GO!GO!GO!GO!</title><noscript><meta http-equiv=refresh content="1; URL=../noscript.html"></noscript><script> !function() { var params = new URL(window.location.href).searchParams; var callback = params.get('callback'); var data1 = params.get('data1'); var data2 = params.get('data2'); var data3 = params.get('data3'); var data4 = params.get('data4'); if (callback == 'getFlag' && data1 == "2045" && data2 =="0907" && data3 == "BiancoRoja" && data4 =="1704067200") { location.href = 'https://noisy-king-d0da.setodanote.net/?'+params; }else{ location.href = '../ZGFtbXlmbGFn/hint.html?'+params; } }(); </script></head><body><p>Yes! Go to next.</p></body></html>

This seems to be the last one. Let's redirect the parameters as they are.

if (callback == 'getFlag' && data1 == "2045" && data2 == "0907" && data3 == "BiancoRoja" && data4 ==="1704067200") { location.href = 'https://noisy-king-d0da.setodanote.net/?'+params;
<!DOCTYPE html><body><h1>Nice work!!</h1><p> flag{Analyz1ng_Bad_Red1rects}</p></body>

I got the flag!

Answer

flag{Analyz1ng_Bad_Red1rects}

summary

This time, I tried out the setodaNote CTF web!
Since it is for beginners, it was more like solving puzzles than using knowledge, but I think it's a fun first step towards starting CTF.

References and Sites

--

Share if you like!

Who wrote this article

This is a blog I started to study information security. As a new employee, I would be happy if you could look with a broad heart.
There is also Teech Lab, which is an opportunity to study programming fun, so if you are interested in software development, be sure to take a look!

table of contents