CTF 正則匹配題目的基礎小結

2021-10-10 23:13:57 字數 2992 閱讀 5681

由於某次打ctf比賽,在一道有關正則匹配的題目上卡了很大時間,我發現我在這方面的知識還不是很牢固,所以寫這樣一篇小結來總結。

首先對正則匹配進行一定的了解:

preg_match 函式用於執行匹配正規表示式,搜尋 subject 與 pattern 給定的正規表示式的乙個匹配。函式返回 pattern 的匹配次數,值是 0 次(不匹配)或 1 次,因為 preg_match() 在第一次匹配後 將會停止搜尋。preg_match_all() 不同於此,它會一直搜尋subject 直到到達結尾。如果發生錯誤 preg_match() 返回 false。函式語法為:

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )

題目:開啟後,是這樣子滴~

<?php

highlight_file('2.php');

$key='key';

$im= preg_match("/key.*key.key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_get["id"]), $match);

if( $im )

?>

.     匹配除 "\n" 之外的任何單個字元

*     匹配它前面的表示式 0 次或多次,等價於

.     匹配 4 到 7 個任意字元

/     匹配 /,\ 是為了轉義

[a-z]     匹配所有小寫字母

[:punct:]     匹配任何標點符號

/i     表示不分大小寫

構造字串的時候,暫且把\/.\/認為需要『/任意字元/』的型別

而.*認為需要『乙個單個字元』

構造字串如下:

?id=keybkeyabcdkey:/a/akeya;

即可得到flag。

這個題之前寫過wp的,攻防世界web高階題001-012

現在再將這個題目簡單分析一下:

function $()

"];var n=["a","_h0l","n"];

var r=["g}}

document.write('ok');

delete _;

$    匹配行尾

^    匹配行首

所以說所需的字串是以be0f23為開頭,以e98aa$為結尾,同時還要包含233ac和c7be9,起初我把這些字串進行直接疊加,但是結果不對,後來發現這些字元之間有些聯絡,比如,be0f23和33ac可以共用3,其後的c同樣可以共用。傳入進輸入框,即可得到flag。

題目:開啟後,題目是這樣子滴~

flag in the variable ! <?php  

error_reporting(0);

include "flag1.php";

highlight_file(__file__);

if(isset($_get['args']))

eval("var_dump($$args);");

}?>

需要知識:

\w      [a-za-z0-9] 數字字母下劃線

\w    匹配單詞字母之外的任意字元,等同於[^0-9a-za-z_]。

$_post [用於接收post提交的資料]

$_get [用於獲取url位址列的引數資料]

$_files [用於檔案就收的處理img 最常見]

$_cookie [用於獲取與setcookie()中的name 值]

$_session [用於儲存session的值或獲取session中的值]

$_request [具有get,post的功能,但比較慢]

server[是預定義伺服器變數的一種,所有server[是預定義伺服器變數的一種,所有_server [是預定義伺服器變數的一種,所有_server開頭的都

$globals [乙個包含了全部變數的全域性組合陣列]

$_env [ 是乙個包含伺服器端環境變數的陣列。它是php中乙個超級全域性變數,我們可以在php 程式的任何地方直接訪問它]

$globals :乙個包含了全部變數的全域性組合陣列,它是php中乙個超級全域性變數,我們可以在php 程式的任何地方直接訪問它,當args=globals時,flag出現。

最後一句eval("var_dump($$args);"),其中的$$args是$($args)可變變數,值為變數$args的值

所以payload:

?args=globals,即可得到flag.

常見的正則匹配:

\d    匹配阿拉伯數字,等同於[0-9]。

\d    匹配阿拉伯數字之外的任意字元,等同於[^0-9]。

\x    匹配十六進製制數字,等同於[0-9a-fa-f]。

\x    匹配十六進製制數字之外的任意字元,等同於[^0-9a-fa-f]。

\t    匹配字元。

\s    匹配空白字元,等同於[ \t],即空格和tab

\s    匹配非空白字元,等同於[^ \t]。

\w      [a-za-z0-9] 數字字母下劃線

\w    匹配單詞字母之外的任意字元,等同於[^0-9a-za-z_]。

另外,如果要查詢字元*、.、/等,則需要在前面用 \ 符號,表示這不是元字元,而只是普通字元而已。

\*    匹配 * 字元。

\.    匹配 . 字元。

\/    匹配 / 字元。

\\    匹配 \ 字元。

\[    匹配 [ 字元。

元字元

$    匹配行尾

^    匹配行首

\<    匹配單詞詞首

\>    匹配單詞詞尾

CTF中RSA題目的pem檔案處理

需要用到工具opensll 現在版本的kali裡面會自帶openssl pem檔案分析 其中每個元素對應的rsa中的元素 私鑰rsaprivatekey sequence version version,modulus integer,n publicexponent integer,e priva...

js 正則匹配key值 js 正則匹配 小結

js的正規表示式 rge.test str 檢驗目標物件中是否包含匹配模式,並相應的返回true或false rge.source str.search rge 將返回乙個整數值,指明這個匹配距離字串開始的偏移位置。如果沒有找到匹配,則返回 1 str.replace re,function 替換匹...

經典題目 正規表示式匹配

引例 請實現乙個函式用來匹配包括 和 的正規表示式。模式中的字元 表示任意乙個字元,而 表示它前面的字元可以出現任意次 含0次 在本題中,匹配是指字串的所有字元匹配整個模式。例如,字串 aaa 與模式 a.a 和 ab ac a 匹配,但是與 aa.a 和 ab a 均不匹配。本題可通過動態規劃解決...