PHP漏洞全解(三)-客戶端指令碼植入【轉】
轉自https://www.cnblogs.com/pingliangren/p/5586973.html
客戶端指令碼植入(Script Insertion),是指將可以執行的指令碼插入到表單、圖片、動畫或超連結文字等物件內。當用戶開啟這些物件後,攻擊者所植入的指令碼就會被執行,進而開始攻擊。
可以被用作指令碼植入的HTML標籤一般包括以下幾種:
1、<script>標籤標記的javascript和vbscript等頁面指令碼程式。在<script>標籤內可以指定js程式程式碼,也可以在src屬性內指定js檔案的URL路徑
2、<object>標籤標記的物件。這些物件是java applet、多媒體檔案和ActiveX控制元件等。通常在data屬性內指定物件的URL路徑
3、<embed>標籤標記的物件。這些物件是多媒體檔案,例如:swf檔案。通常在src屬性內指定物件的URL路徑
4、<applet>標籤標記的物件。這些物件是java applet,通常在codebase屬性內指定物件的URL路徑
5、<form>標籤標記的物件。通常在action屬性內指定要處理表單資料的web應用程式的URL路徑
客戶端指令碼植入的攻擊步驟
1、攻擊者註冊普通使用者後登陸網站
2、開啟留言頁面,插入攻擊的js程式碼
3、其他使用者登入網站(包括管理員),瀏覽此留言的內容
4、隱藏在留言內容中的js程式碼被執行,攻擊成功
CREATE TABLE `postmessage` (
`id` int(11) NOT NULL auto_increment,
`subject` varchar(60) NOT NULL default '',
`name` varchar(40) NOT NULL default '',
`email` varchar(25) NOT NULL default '',
`question` mediumtext NOT NULL,
`postdate` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312 COMMENT='使用者的留言' AUTO_INCREMENT=69 ;
//add.php 插入留言
//list.php 留言列表
//show.php 顯示留言
提交下圖的留言
瀏覽此留言的時候會執行js指令碼
插入 <script>while(1){windows.open();}</script> 無限彈框
插入<script>location.href="http://www.sectop.com";</script> 跳轉釣魚頁面
或者使用其他自行構造的js程式碼進行攻擊
防範的方法
一般使用htmlspecialchars函式來將特殊字元轉換成HTML編碼
函式原型
string htmlspecialchars (string string, int quote_style, string charset)
string 是要編碼的字串
quote_style 可選,值可為ENT_COMPAT、ENT_QUOTES、ENT_NOQUOTES,預設值ENT_COMPAT,表示只轉換雙引號不轉換單引號。 ENT_QUOTES,表示雙引號和單引號都要轉換。ENT_NOQUOTES,表示雙引號和單引號都不轉換
charset 可選,表示使用的字符集
函式會將下列特殊字元轉換成html編碼:
& ----> &
" ----> "
' ----> '
< ----> <
> ----> >
把show.php的第98行改成
<?php echo htmlspecialchars(nl2br($row['question']), ENT_QUOTES); ?>
然後再檢視插入js的漏洞頁面
管理好自己的情緒,你就是優雅的,控制好自己的心態,你就是成功的。