###### tags: `程安` # CS 2019 Fall - Homework 0x03 ### [0x03] Unexploitable 網頁本身似乎沒有任何可以打的地方 那我們只好用上課提到的`dirsearch`掃掃看這個網域 ![](https://i.imgur.com/0PeHgaz.png) 一個一個去試會發現大家都是顯示`nice try!`而已 只有其中一個是 ![](https://i.imgur.com/Egq9YQM.png) `Bucharesti`應該是一個 github id,那我們就去 github 找找 ![](https://i.imgur.com/vLyPE5S.png) 檔案太多了 直接去 commit 翻翻看 ![](https://i.imgur.com/Wbr35n3.png) 🤔 ![](https://i.imgur.com/ZKKlnQx.png) ### [0x03] Safe R/W 一樣先掃掃看 ![](https://i.imgur.com/RUwdNQP.png) 有一個設定檔`phpinfo.php`可以看 但太多東西了,先回去看 source code 吧 --- ```php=12 if(strlen($s) > 20) die(bye()); ``` 這個部份可以用`[]`來繞過長度限制 --- ```php=40 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`可以看 來去找一下 ![](https://i.imgur.com/6rem6SJ.png) 此外,他們還很常跟一些 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 來輔助一下 --- ![](https://i.imgur.com/jpRJBcJ.png) --- 成功了! 利用`data:`的不完整來讓`file_get_contents`壞掉回傳`FALSE`,自然就通過檢測了 而`include`不能使用wrapper,所以他就會把`data:/meow`當作一般的相對路徑去找檔案 所以就拿到了我們剛剛輸入的`<` 一切都就緒了,那就來寫 php 吧 --- ![](https://i.imgur.com/CSDxver.png) --- ![](https://i.imgur.com/YGYnuQs.png)