php escapeshellcmd多字節(jié)編碼漏洞(3)_PHP教程
推薦:詳細(xì)講解PHP中緩存技術(shù)的應(yīng)用PHP,一門最近幾年興起的web設(shè)計腳本語言,由于它的強(qiáng)大和可伸縮性,近幾年來得到長足的發(fā)展,php相比傳統(tǒng)的asp網(wǎng)站,在速度上有絕對的優(yōu)勢,想mssql轉(zhuǎn)6萬條數(shù)據(jù)php如需要40秒,asp不下2分鐘.但是,由于
大家可以看到,在php的處理過程中,它是單字節(jié)處理的,它只把輸入當(dāng)作一個字節(jié)流,而在linux設(shè)置了GBK字符集的時候,它的處理是雙字節(jié)的,大家的理解很明顯地不一致。我們查下GBK的字符集范圍為8140-FEFE,首字節(jié)在 81-FE 之間,尾字節(jié)在 40-FE 之間,而一個非常重要的字符的編碼為5c,在GBK的尾字節(jié)范圍之內(nèi),這樣我們考慮一個特殊的輸入:
0xbf;id 或 0xbf'id
經(jīng)過php的escapeshellcmd單字節(jié)轉(zhuǎn)碼之后將會是
0xbf5c;id
0xbf5c'id
注意0xbf5c是一個合法的GBK編碼,那么在linux執(zhí)行的時候,會認(rèn)為輸入是
[0xbfbc];id
很好,后面的id將會被執(zhí)行�?梢宰鰝簡單的實(shí)驗(yàn),如下:
[loveshell@Loveshelltmp]$echo?lt;br />>
?
[loveshell@Loveshelltmp]$set|grep-ilang
LANG=zh_CN.GB2312
LANGVAR=en_US.UTF-8
[loveshell@Loveshelltmp]$exportLANG=zh_CN.GBK
[loveshell@Loveshelltmp]$echo?lt;br />?lt;br />[loveshell@Loveshelltmp]$set|grep-ilang
LANG=zh_CN.GBK
LANGVAR=en_US.UTF-8
[loveshell@Loveshelltmp]$
其中康謀嗦胛?xbf5c,可以看到在不設(shè)置LANG為GBK的時候渴且桓齜欠ǖ膅b2312編碼,所以會被認(rèn)為是兩個字符,所以其中含有的0x5c起作用,被認(rèn)為命令沒結(jié)束。然后我們設(shè)置編碼為GBK,烤突岜蝗銜且桓鱟址磂cho了。
那我們?nèi)绾蝸碜C明php的漏洞呢,拿
<?php
$e=escapeshellcmd($_GET[c]);
//herewedon'tcareif$ehasspaces
system("echo$e");
?>
作為例子,正常情況下上面的代碼工作很好,我們提交
分享:利用PHP V5開發(fā)多任務(wù)應(yīng)用程序許多 PHP 開發(fā)人員認(rèn)為,由于標(biāo)準(zhǔn)的 PHP 缺少線程功能,因此實(shí)際 PHP 應(yīng)用程序不可能執(zhí)行多任務(wù)處理。例如,如果應(yīng)用程序需要其他 Web 站點(diǎn)的信息,那么在遠(yuǎn)程檢索完成之前它都必須停止。這是錯
- PHPNOW安裝Memcached擴(kuò)展方法詳解
- php記錄頁面代碼執(zhí)行時間
- PHP中獎概率的抽獎算法程序代碼
- apache設(shè)置靜態(tài)文件緩存方法介紹
- php對圖像的各種處理函數(shù)代碼小結(jié)
- PHP 關(guān)于訪問控制的和運(yùn)算符優(yōu)先級介紹
- 關(guān)于PHP語言構(gòu)造器介紹
- php/js獲取客戶端mac地址的實(shí)現(xiàn)代碼
- php5.5新數(shù)組函數(shù)array_column使用
- PHP preg_match的匹配多國語言的技巧
- php 中序列化和json使用介紹
- php采集文章中的圖片獲取替換到本地
- 相關(guān)鏈接:
- 教程說明:
PHP教程-php escapeshellcmd多字節(jié)編碼漏洞(3)
。