目次
分析用。まず第一に、次のように cnvd からいくつかの関連情報を確認できます:
漏洞验证
漏洞修复
结语
ホームページ 運用・保守 安全性 htmlエンティティ機能の悪用による脆弱性の解決方法

htmlエンティティ機能の悪用による脆弱性の解決方法

May 12, 2023 pm 02:13 PM
html entities

質問コードは次のとおりです:

误用html entities函数引发的漏洞怎么解决

脆弱性分析:

質問の意味によると、これは何ですか?ここで調査されているのは xss 脆弱性 である必要があり、脆弱性のトリガー ポイントはコードの 行 13 ~ 14 である必要があります。これら 2 行のコードの機能は、HTML <a> タグを直接出力することです。コードの 3 ~ 5 行目 foreach ループ $_GET で渡されたパラメータを処理しますが、ここに問題があります。 の 4 行目のコードを見てみましょう。このコード行は、$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 コードを記述する場合、エンティティ文字を文字列に直接記述することはできません。 HTML 特殊文字をエンティティ文字に変換する関数 htmlentities()。

注:
htmlentities()

は、すべての特殊文字を変換することはできません。スペースを除く特殊文字が変換され、一重引用符と二重引用符は個別に制御する必要があります (2 つの引用符を介して)パラメーター)。 2 番目のパラメータには次の 3 つの値があります:

    ENT_COMPAT (デフォルト値): 二重引用符のみが変換されます。
  • ENT_QUOTES: 両方のタイプの引用符が変換されます。
  • ENT_NOQUOTES: どちらのタイプの引用符も変換されません。
  • HTML で役立つ文字エンティティの表をここに添付します。

误用html entities函数引发的漏洞怎么解决上記の分析が終わったら、トピックに戻りましょう。攻撃の構築方法

ペイロード

を考えてみましょう。まず既知の情報を整理しましょう:

    ここでの
  • $query

    パラメータは制御可能な

  • および
  • htmlエンティティです

    この関数はここで一重引用符をエスケープできます。

  • xss の脆弱性トリガー ポイントは
  • <a>

    タグ内にあります。

<a>

では、javascript イベントを通じて js コードを実行できます。たとえば、次のようになります。このタイプのイベントの場合、最終的な POC 構造は次のとおりです。

/?a'onclick%3dalert(1)%2f%2f=c
ログイン後にコピー

インスタンス分析

误用html entities函数引发的漏洞怎么解决この分析例は、DM エンタープライズ Web サイト構築システムで

を選択します。 v201710 SQL インジェクションの脆弱性

分析用。まず第一に、次のように cnvd からいくつかの関連情報を確認できます:

脆弱性通知からいくつかの有用な情報を見つけることができます。ログイン ポイント。ビルド時に、バックグラウンド ログイン ポートの場所が

admindm-yourname/g.php误用html entities函数引发的漏洞怎么解决 ファイルにあることを確認するメッセージが表示されます。このファイルを開くと、

admindm にリダイレクトされることがわかります。 -yournamemod_common/login.php

ファイルなので、脆弱性がトリガーされます。このファイル内にある必要があります。

admindm-yournamemod_common/login.php误用html entities函数引发的漏洞怎么解决 このファイルを開くと、脆弱性の場所が一目でわかり、関連するコードをいくつかインターセプトできます。

Line 15误用html entities函数引发的漏洞怎么解决 SQL インジェクションの脆弱性が存在することは明らかであり、スプライシングによって select ステートメントに直接挿入されます。

15 行目の

$user 変数は POST を通じて送信され、その値は制御可能です。ただし、上の図の 行 3 コードは、htmlentitiesdm 関数を呼び出して、POST データを処理します。この htmlentitiesdm 関数をフォローアップします。 。この関数は component/dm-config/global.common.php ファイルにあり、キー コードは次のようにインターセプトされます:

这个函数是调用 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 &#39;db.inc.php&#39;;

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

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

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

$username = @clean((string)$_GET[&#39;username&#39;]);
$password = @clean((string)$_GET[&#39;password&#39;]);


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

#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エンティティ機能の悪用による脆弱性の解決方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

HTMLの表の境界線 HTMLの表の境界線 Sep 04, 2024 pm 04:49 PM

HTML の表の境界線に関するガイド。ここでは、HTML でのテーブルの境界線の例を示しながら、テーブル境界線を定義する複数の方法について説明します。

HTML 左マージン HTML 左マージン Sep 04, 2024 pm 04:48 PM

HTML マージン左のガイド。ここでは、HTML margin-left の概要とその例、およびそのコード実装について説明します。

HTML のネストされたテーブル HTML のネストされたテーブル Sep 04, 2024 pm 04:49 PM

これは、HTML でのネストされたテーブルのガイドです。ここでは、テーブル内にテーブルを作成する方法をそれぞれの例とともに説明します。

HTML テーブルのレイアウト HTML テーブルのレイアウト Sep 04, 2024 pm 04:54 PM

HTML テーブル レイアウトのガイド。ここでは、HTML テーブル レイアウトの値と例および出力について詳しく説明します。

HTML入力プレースホルダー HTML入力プレースホルダー Sep 04, 2024 pm 04:54 PM

HTML 入力プレースホルダーのガイド。ここでは、コードと出力とともに HTML 入力プレースホルダーの例について説明します。

HTML 順序付きリスト HTML 順序付きリスト Sep 04, 2024 pm 04:43 PM

HTML 順序付きリストのガイド。ここでは、HTML 順序付きリストと型の導入とその例についても説明します。

HTML 内のテキストの移動 HTML 内のテキストの移動 Sep 04, 2024 pm 04:45 PM

HTML でのテキストの移動に関するガイド。ここでは、概要、マーキー タグが構文でどのように機能するか、および実装例について説明します。

HTML の onclick ボタン HTML の onclick ボタン Sep 04, 2024 pm 04:49 PM

HTML オンクリック ボタンのガイド。ここでは、それらの紹介、動作、例、およびさまざまなイベントでの onclick イベントについてそれぞれ説明します。

See all articles