---
# System prepended metadata

title: CS 2019 Fall - Homework 0x03
tags: [程安]

---

###### 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)
