這道題有點(diǎn)東西網(wǎng)頁(yè)一段計(jì)算框,只有加和減數(shù)字,但是永遠(yuǎn)到大不了20,頁(yè)面也沒啥特別的,準(zhǔn)備看源碼,但是打不開,我以為是環(huán)境壞掉了,看wp別人也這樣,只不過大佬的開發(fā)者工具可以打開,我的就不行
最后試了一下,你要么就在網(wǎng)頁(yè)右上角更多工具里面手動(dòng)打開,要么就另外打開一個(gè)網(wǎng)頁(yè),然后先打開開發(fā)者工具再加載題目url
?在代碼此處有一段src標(biāo)簽,好像是一個(gè)JavaScript的代碼,但是利于工具看的時(shí)候,頁(yè)面并沒有對(duì)應(yīng)回顯,看起來是個(gè)路徑,可以訪問一下?
?js看不懂,但是在最后又一段base64加密的字符串,我還以為flag就拿到了
?解密后才發(fā)現(xiàn)依舊是一個(gè)文件,應(yīng)該也可以訪問?,保險(xiǎn)起見我還是去提交了一下,果然是錯(cuò)誤的哈哈
代碼審計(jì)
訪問后是一段php代碼
1. 第一行代碼`error_reporting(0);`用于禁止錯(cuò)誤報(bào)告。
2. 然后,通過`include("flag.php")`包含了一個(gè)名為`flag.php`的文件。
3. 接下來,定義了一個(gè)名為`nss`的類,其中有一個(gè)名為`ctf()`的靜態(tài)方法。包含了hint2.php
4. 在接下來的代碼中,通過`isset($_GET['p'])`檢查`$_GET['p']`是否存在。如果存在,就進(jìn)入下一層判斷。
5. 在第6行代碼中,使用`preg_match()`函數(shù)對(duì)`$_GET['p']`進(jìn)行正則匹配,判斷其是否含有字母`n`或`c`。如果匹配成功,就輸出`"no"`并結(jié)束腳本的執(zhí)行。
6. 在第7行代碼中,使用了`call_user_func()`函數(shù),根據(jù)`$_GET['p']`的值調(diào)用對(duì)應(yīng)的函數(shù)。`call_user_func()`函數(shù)用于調(diào)用一個(gè)回調(diào)函數(shù)。這里回調(diào)函數(shù)的名稱由`$_GET['p']`指定。
hint2.php是可以直接訪問的,但是完全看不懂有啥關(guān)聯(lián)
?一開始想的是直接用命令執(zhí)行,但是不行,后來查看了wp,才得知我們要利用的東西就是nss類,一開始我看直接就可以訪問hint2.php我還以為就沒他啥事兒了呢,
這里還要學(xué)習(xí)一個(gè)新的運(yùn)算符? ::雙冒號(hào)運(yùn)算符
我們可以直接利用雙冒號(hào)運(yùn)算符去訪問類中的方法,因?yàn)檎齽t表達(dá)式中匹配到了n和c,但是用到的修飾符是/m多文本匹配,所以我們可以采用大小寫看能否繞過,所以構(gòu)造payload
得到hint2.php文件的數(shù)據(jù),根據(jù)提示修改payload,訪問后看源碼得到flag?
?
::雙冒號(hào)運(yùn)算符
在PHP中,::是一個(gè)雙冒號(hào)運(yùn)算符,也被稱為范圍解析操作符或靜態(tài)訪問操作符。它用于訪問類中的靜態(tài)屬性、靜態(tài)方法和常量,或調(diào)用父類的靜態(tài)方法。
在類名后面使用`::`,可以直接訪問類的靜態(tài)成員或調(diào)用靜態(tài)方法,而無需創(chuàng)建類的實(shí)例。這使得我們無需實(shí)例化一個(gè)類就可以訪問和操作類級(jí)別的成員。文章來源:http://www.zghlxwxcb.cn/news/detail-636504.html
1. 訪問靜態(tài)屬性:文章來源地址http://www.zghlxwxcb.cn/news/detail-636504.html
? ?class MyClass {
? ? ? ?public static $myStaticProperty = 10;
? ?}
? ?echo MyClass::$myStaticProperty; // 輸出 10
到了這里,關(guān)于[SWPUCTF 2022 新生賽]numgame的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!