質問コードは次のとおりです:
脆弱性分析:
質問の意味によると、これは何ですか?ここで調査されているのは xss 脆弱性 である必要があり、脆弱性のトリガー ポイントはコードの 行 13 ~ 14 である必要があります。これら 2 行のコードの機能は、HTML <a></a>
タグを直接出力することです。コードの 3 ~ 5 行目 、foreach ループ は $_GET で渡されたパラメータを処理しますが、ここに問題があります。 の 4 行目のコードを見てみましょう。このコード行は、$value に対して型変換を実行し、強制的に int 型にします。ただし、コードのこの部分は $value 変数のみを処理し、$key 変数は処理しません。 3行目~5行目のコード処理後、&という記号に従って分割し、13行目のecho##につなぎ合わせます。このステートメントでは、出力中に htmlentities 関数が再度処理されます。 htmlentities この関数は主に、いくつかの特殊なシンボルの HTML エンティティをエンコードします。具体的な定義は次のとおりです:
htmlentities()string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = ini_get("default_charset") [, bool $double_encode = true ]]] )機能: PHP コードを記述する場合、エンティティ文字を文字列に直接記述することはできません。 HTML 特殊文字をエンティティ文字に変換する関数 htmlentities()。
注:
は、すべての特殊文字を変換することはできません。スペースを除く特殊文字が変換され、一重引用符と二重引用符は個別に制御する必要があります (2 つの引用符を介して)パラメーター)。 2 番目のパラメータには次の 3 つの値があります:
- ENT_COMPAT (デフォルト値): 二重引用符のみが変換されます。
- ENT_QUOTES: 両方のタイプの引用符が変換されます。
- ENT_NOQUOTES: どちらのタイプの引用符も変換されません。
- HTML で役立つ文字エンティティの表をここに添付します。
上記の分析が終わったら、トピックに戻りましょう。攻撃の構築方法
を考えてみましょう。まず既知の情報を整理しましょう:
- ここでの
- $query
パラメータは制御可能な
および - htmlエンティティです
この関数はここで一重引用符をエスケープできます。
xss の脆弱性トリガー ポイントは タグ内にあります。
では、javascript
イベントを通じて js コードを実行できます。たとえば、次のようになります。このタイプのイベントの場合、最終的な POC 構造は次のとおりです。 /?a'onclick%3dalert(1)%2f%2f=c
この分析例は、DM エンタープライズ Web サイト構築システムで
分析用。まず第一に、次のように cnvd からいくつかの関連情報を確認できます:
脆弱性通知からいくつかの有用な情報を見つけることができます。ログイン ポイント。ビルド時に、バックグラウンド ログイン ポートの場所が
admindm-yourname/g.php ファイルにあることを確認するメッセージが表示されます。このファイルを開くと、
ファイルなので、脆弱性がトリガーされます。このファイル内にある必要があります。
admindm-yournamemod_common/login.php このファイルを開くと、脆弱性の場所が一目でわかり、関連するコードをいくつかインターセプトできます。
Line 15 SQL インジェクションの脆弱性が存在することは明らかであり、スプライシングによって select ステートメントに直接挿入されます。
$user 変数は POST を通じて送信され、その値は制御可能です。ただし、上の図の 行 3 コードは、htmlentitiesdm 関数を呼び出して、POST データを処理します。この htmlentitiesdm 関数をフォローアップします。 。この関数は component/dm-config/global.common.php ファイルにあり、キー コードは次のようにインターセプトされます: 这个函数是调用 htmlentities 函数针对输入的数据进行处理。前面我们已经介绍过了这个函数的用法,这里这个函数的可选参数是 ENT_NOQUOTES ,也就是说两种引号都不转换。下面我们来看个小例子: 这里我猜测开发者应该是考虑到了xss的问题,但是由于 htmlentities 这个函数选择的参数出现了偏差,导致这里我们可以引入单引号造成注入的问题。 我们看看最新版是怎么修复,使用 beyond compare 对比两个版本代码的差别。 新版修复的时候将可选参数修改为 ENT_QUOTES ,这个参数的作用就是过滤单引号加双引号,我们来看看下面这个例子,就很容易明白了这个参数的作用了。 这里因为没有回显,所以是盲注,下面是验证截图: 针对 htmlentities 这个函数,我们建议大家在使用的时候,尽量加上可选参数,并且选择 ENT_QUOTES 参数。 我们看看对比的效果 看完了上述分析,不知道大家是否对 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 "";
}
?>
# 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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ホットトピック









