1. 程式人生 > >PHP漏洞全解(三)-客戶端指令碼植入【轉】

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的漏洞頁面

管理好自己的情緒,你就是優雅的,控制好自己的心態,你就是成功的。