Try   HackMD
tags: 程安

CS 2019 Fall - Homework 0x03

[0x03] Unexploitable

網頁本身似乎沒有任何可以打的地方
那我們只好用上課提到的dirsearch掃掃看這個網域

一個一個去試會發現大家都是顯示nice try!而已
只有其中一個是

Bucharesti應該是一個 github id,那我們就去 github 找找

檔案太多了 直接去 commit 翻翻看

🤔

[0x03] Safe R/W

一樣先掃掃看

有一個設定檔phpinfo.php可以看
但太多東西了,先回去看 source code 吧


if(strlen($s) > 20) die(bye());

這個部份可以用[]來繞過長度限制


if(isset($i) && stripos(file_get_contents($i), '<') === FALSE) { ... ... @include($i); ... }

第二個關鍵點就是這邊的file_get_contents
我們要想辦法繞過他的檢查,把有<?php的 tag 的字串讓他include去執行

我們直接把file_get_contents搭配一些關鍵字拿去搜尋
會發現他跟include和2個php設定有關︰

  • allow_url_fopen
  • allow_url_include

剛好我們有phpinfo.php可以看 來去找一下

此外,他們還很常跟一些 protocol 和 wapper 一起出現
像是http://,data://等等
看來要從這些東西裡面找出解法

因為東西無論如何都會寫進meow這個檔案
我們能動的只有他所在的資料夾的名稱
而且因為allow_url_include=off的關係
我們也不能從外網 include 東西進去
看來我們只能想辦法讓他讀到 local 的meow檔案
但是又讓他讀不出<

仔細再多看一些網路上的文章跟 php 的 doc 發現那2個設定似乎是以下意思︰

  • allow_url_fopen
    • 是否允許使用 url 形式的封裝,也就是上面提到的 protocol 跟 wrapper
  • allow_url_include
    • 是否允許以下 function 使用 url 形式的封裝
      • include
      • include_once
      • require
      • require_once

也就是說,題目中的file_get_contents能使用 wrapper
include不行
那我們是不是能利用這個差異,來讓file_get_contents回傳的字串跑掉

這邊使用 hackbar 來輔助一下



成功了!
利用data:的不完整來讓file_get_contents壞掉回傳FALSE,自然就通過檢測了
include不能使用wrapper,所以他就會把data:/meow當作一般的相對路徑去找檔案
所以就拿到了我們剛剛輸入的<

一切都就緒了,那就來寫 php 吧