實驗吧-PHP大法-eregi()函數


題目地址:http://www.shiyanbar.com/ctf/54

題目:

<?php
if(eregi("hackerDJ",$_GET[id])) {
  echo("<p>not allowed!</p>");
  exit();
}

$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "hackerDJ")
{
  echo "<p>Access granted!</p>";
  echo "<p>flag: *****************} </p>";
}
?>


<br><br>
Can you authenticate to this website?
PHP 函數 eregi()
語法
    int eregi(string pattern, string string, [array regs]);
定義和用法
eregi()函數在一個字符串搜索指定的模式的字符串。搜索不區分大小寫。Eregi()可以特別有用的檢查有效性字符串,如密碼。 

可選的輸入參數規則包含一個數組的所有匹配表達式,他們被正則表達式的括號分組。

返回值
如果匹配成功返回true,否則,則返回false

Example
下面是一段代碼,這段代碼復制並粘貼到一個文件中並驗證結果。

    <?php

    $password = "abc";
    if (! eregi ("[[:alnum:]]{8,10}", $password))
    {
       print "Invalid password! Passwords must be from 8 - 10 chars";
    }
    else
    {
      print "Valid password";
    }
    ?>
這將會產生以下結果:

    Invalid password! Passwords must be from 8 - 10 chars

 

解題思路:

id變量是一個url解碼函數前不包含hackerDJ,url解碼函數后為hackerDJ的變量,即id在進入url解碼函數前必須是hackerDJ的url編碼形式

 注意:

id通過url形式傳遞,瀏覽器會自動url解碼一次,直接

?id=%68%61%63%6B%65%72%44%4A

是不行的

 這樣瀏覽器自動解碼后即為hackerDJ,被eregi()攔住

所以要進行二次編碼,即對%68%61%63%6B%65%72%44%4A進行url編碼

 


免責聲明!

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



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