91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

誤用html entities函數引發的漏洞怎么解決

發布時間:2022-03-15 16:41:19 來源:億速云 閱讀:310 作者:iii 欄目:網絡管理

這篇文章主要介紹了誤用html entities函數引發的漏洞怎么解決的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇誤用html entities函數引發的漏洞怎么解決文章都會有所收獲,下面我們一起來看看吧。

題目代碼如下:

誤用html entities函數引發的漏洞怎么解決

漏洞解析

根據題目意思,這里考察的應該是個 xss漏洞 , 漏洞觸發點應該在代碼中的 第13-14行 。這兩行代碼的作用是直接輸出一個html的 <a> 標簽。代碼中的 第3-5行foreach循環$_GET 傳入的參數進行了處理,但是這里有個問題。我們看下 第四行 的代碼,這行代碼針對 $value 進行類型轉換,強制變成int類型。但是這部分代碼只處理了 $value 變量,沒針對 $key 變量進行處理。經過了 第3-5行 的代碼處理之后,根據 & 這個符號進行分割,然后拼接到 第13行echo 語句中,在輸出的時候又進行了一次 htmlentities 函數處理。 htmlentities 函數主要是會對一些特殊符號進行HTML實體編碼。具體定義如下:

htmlentities — 將字符轉換為 HTML 轉義字符

string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )

作用:在寫PHP代碼時,不能在字符串中直接寫實體字符,PHP提供了一個將HTML特殊字符轉換成實體字符的函數 htmlentities()。

注:htmlentities() 并不能轉換所有的特殊字符,是轉換除了空格之外的特殊字符,且單引號和雙引號需要單獨控制(通過第二個參數)。第2個參數取值有3種,分別如下:

  • ENT_COMPAT(默認值):只轉換雙引號。

  • ENT_QUOTES:兩種引號都轉換。

  • ENT_NOQUOTES:兩種引號都不轉換。

這里附上一個 HTML 中有用的字符實體表

誤用html entities函數引發的漏洞怎么解決

經過上面的分析,我們再回到題目,想想如何構造一下攻擊 payload 。我們先梳理一些已知信息:

  • 這里的 $query 參數可控

  • htmlentities 函數在這里可逃逸單引號

  • xss的漏洞觸發點在 <a> 標簽。

<a> 中,我們可以通過 javascript 事件來執行js代碼,例如: onclick 這類事件,因此最后的poc構造如下:

/?a'onclick%3dalert(1)%2f%2f=c

誤用html entities函數引發的漏洞怎么解決

實例分析

本次實例分析選擇 DM企業建站系統 v201710 中的 sql注入漏洞 來進行分析。首先,我們可以從cnvd上面看到一些相關信息,如下:

誤用html entities函數引發的漏洞怎么解決

從漏洞通告中可以發現一些有用的信息,漏洞位置在登陸處,搭建的時候提示后臺登陸口位置在 admindm-yourname/g.php 文件中,打開這個文件,發現重定向到 admindm-yournamemod_common/login.php 文件中,所以漏洞觸發點應該就在這個文件中。

誤用html entities函數引發的漏洞怎么解決

打開 admindm-yournamemod_common/login.php 這個文件,一眼就看到漏洞位置,截取部分相關代碼如下:

誤用html entities函數引發的漏洞怎么解決

第15行 很明顯存在sql注入漏洞,通過拼接的方式直接插入到select語句中。 第15行 中的 $user 變量是通過 POST 方式提交上來,其值可控。但是上圖的 第3行 代碼調用 htmlentitiesdm 函數,對 POST 數據進行了處理,我們跟進這個 htmlentitiesdm 函數。該函數位置在 component/dm-config/global.common.php 文件中,截取關鍵代碼如下:

誤用html entities函數引發的漏洞怎么解決

這個函數是調用 htmlentities 函數針對輸入的數據進行處理。前面我們已經介紹過了這個函數的用法,這里這個函數的可選參數是 ENT_NOQUOTES ,也就是說兩種引號都不轉換。下面我們來看個小例子:

誤用html entities函數引發的漏洞怎么解決

這里我猜測開發者應該是考慮到了xss的問題,但是由于 htmlentities 這個函數選擇的參數出現了偏差,導致這里我們可以引入單引號造成注入的問題。

我們看看最新版是怎么修復,使用 beyond compare 對比兩個版本代碼的差別。

誤用html entities函數引發的漏洞怎么解決

新版修復的時候將可選參數修改為 ENT_QUOTES ,這個參數的作用就是過濾單引號加雙引號,我們來看看下面這個例子,就很容易明白了這個參數的作用了。

誤用html entities函數引發的漏洞怎么解決

漏洞驗證

這里因為沒有回顯,所以是盲注,下面是驗證截圖:

誤用html entities函數引發的漏洞怎么解決

漏洞修復

針對 htmlentities 這個函數,我們建議大家在使用的時候,盡量加上可選參數,并且選擇 ENT_QUOTES 參數。

誤用html entities函數引發的漏洞怎么解決

我們看看對比的效果

誤用html entities函數引發的漏洞怎么解決

結語

看完了上述分析,不知道大家是否對 htmlentities 函數在使用過程中可能產生的問題,有了更加深入的理解,文中用到的代碼可以從 這里 下載,當然文中若有不當之處,還望各位斧正。如果你對我們的項目感興趣,歡迎發送郵件到 hongrisec@gmail.com 聯系我們。Day12 的分析文章就到這里,我們最后留了一道CTF題目給大家練手,題目如下:

<?php
require 'db.inc.php';

if(isset($_REQUEST['username'])){
    if(preg_match("/(?:\w*)\W*?[a-z].*(R|ELECT|OIN|NTO|HERE|NION)/i", $_REQUEST['username'])){
        die("Attack detected!!!");
    }
}

if(isset($_REQUEST['password'])){
    if(preg_match("/(?:\w*)\W*?[a-z].*(R|ELECT|OIN|NTO|HERE|NION)/i", $_REQUEST['password'])){
        die("Attack detected!!!");
    }
}

function clean($str){
    if(get_magic_quotes_gpc()){
        $str=stripslashes($str);
    }
    return htmlentities($str, ENT_QUOTES);
}

$username = @clean((string)$_GET['username']);
$password = @clean((string)$_GET['password']);


$query='SELECT * FROM ctf.users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';

#echo $query;

$result=mysql_query($query);
while($row = mysql_fetch_array($result))
{
    echo "<tr>";
    echo "<td>" . $row['name'] . "</td>";
    echo "</tr>";
}

?>
# Host: localhost  (Version: 5.5.53)
# Date: 2018-08-05 12:55:29
# Generator: MySQL-Front 5.3  (Build 4.234)

/*!40101 SET NAMES utf8 */;

#
# Structure for table "users"
#

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `Id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `pass` varchar(255) DEFAULT NULL,
  `flag` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

#
# Data for table "users"
#

/*!40000 ALTER TABLE `users` DISABLE KEYS */;
INSERT INTO `users` VALUES (1,'admin','qwer!@#zxca','hrctf{sql_Inject1on_Is_1nterEst1ng}');
/*!40000 ALTER TABLE `users` ENABLE KEYS */;

關于“誤用html entities函數引發的漏洞怎么解決”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“誤用html entities函數引發的漏洞怎么解決”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

梅河口市| 芮城县| 蚌埠市| 桦甸市| 柏乡县| 大厂| 临朐县| 义马市| 临夏市| 乐陵市| 娄烦县| 萍乡市| 云浮市| 大英县| 陆良县| 潼关县| 台南市| 黎城县| 巴林左旗| 伽师县| 吐鲁番市| 明星| 饶阳县| 句容市| 松原市| 阿拉善盟| 长治县| 天水市| 凤山市| 岳池县| 寻乌县| 文水县| 贵德县| 五莲县| 赞皇县| 保康县| 景东| 肥东县| 民乐县| 余江县| 涪陵区|