PHP中雙引號引起的命令執行漏洞


前言

在PHP語言中,單引號和雙引號都可以表示一個字符串,但是對於雙引號來說,可能會對引號內的內容進行二次解釋,這就可能會出現安全問題。

正文

舉個簡單例子

<?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])}";?> //@是用來防止輸出錯誤信息的


菜刀成功連接

總結

本文簡單記錄了雙引號可能會引發的代碼執行的情況
對於這種漏洞的防御,一定要明確單引號與雙引號的區別所在,不要簡單認為兩者是互相可以替代的,在平時的代碼書寫中能只用單引號一定不要用雙引號,畢竟單引號的解釋時間也比雙引號少得多,代碼運行相對更快。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM