{dpp}

[H4CKING GAME] Calculator 문제 - SSTI(Server Side Template Injection) 본문

해킹/WarGame-Write-Up

[H4CKING GAME] Calculator 문제 - SSTI(Server Side Template Injection)

dpp07 2021. 11. 28. 15:56

 

TeamH4C 에서 운영중인 워게임 H4CKING GAME의 첫번쨰 WebHacking문제, Calculator이다.

계산기 이기 떄문에 처음에는 eval 함수를 이용한 문제인줄 알았다.

'a'+'a'

를 입력해 aa가 나오는걸 확인하고 python또는 javascript로 확인되었고 

True+Flase

를 입력해, 1이 나오니 파이썬인게 확정되었다.(Javascript는 오류가 뜬다...)

그러므로

open("flag.txt", "r").read()

를 입력해 flag.txt를 보려했지만, 파일이름이 flag.txt가 아닌건지 오류가 나왔다.

다른 파일명들도 시도해보았지만 안나오는걸 보아 eval문제는 아닌거같았다. 다른걸 고민하다보니

파이썬과 웹을 종합해보니 SSTI가 생각났다.

SSTI는 Server Side Templates Injection의 약자로 공격자가 서버의 탬플릿 구문을

이용해 페이로드를 삽입시켜 실행시키는 취약점이다.

 

eval과 느낌은 비슷하지만 몇몇코드는 작동을 안한다는거다..

위 표는 서버가 어떤 템플릿 엔진을 사용하는지 알아낼수있는 표이다.

만약 파란칸의 코드를 입력했을떄 작동한다면 위쪽으로, 작동안한다면 아랫쪽으로 이동하며 초록칸에 도착하면 그 칸의 엔진이

서버의 템플릿 엔진 인것이다.

 

배운대로 차근차근 입력해봤다

${7*7}

음..

오류가난다...

다음껄 입력해봤다.

{{ 7*7 }}

하지만 이것도 오류가 생긴다.

 

이것저것해봤지만... 중괄호가 들어가면 오류가 생긴다..

그말은 이미 중괄호가 있다는거..;;;

뭔 개고생한거지

중괄호를 빼고 정석대로 코드를 입력해봤다. 목표는 RCE(remote code execute콘솔명령어를 사용하는것)

 

os.system() 같은 명령어는 쓸수없으므로..

''.__class__.__mro__[1].__subclasses__()

를 입력해 subproccess.Popen의 클래스를 찾아 함수를 실행시켜, 쉘명령어의 결과를 출력하도록 하였다.

페이지내 검색기능을통해 Subprocess Popen의 위치를 찾았고,

''.__class__.__mro__[1].__subclasses__()[popen위치:]

popen 위치에 subprocess.popen이 어느정도 인덱스에 있는지 각자의 방법으로 찾아네 넣어보며 정확한 위치를 찾으면된다.

나의경우에는 popen위치에 100부터 넣어보며 213에 popen class가 있다는것을 찾아내었다.

''.__class__.__mro__[1].__subclasses__()[popen위치]('popen 명령어',shell=True,stdout=-1).communicate()

이제부터는 popen 위치에 아까 찾은 위치를 넣어주고 popen 명령어에 사용할 명령어를 넣어주면 된다.

''.__class__.__mro__[1].__subclasses__()[213]('ls',shell=True,stdout=-1).communicate()

(예시이다)

 

H4CKINGGAME 규칙상 flag와 full exploit은 공개할수 없기에 나머지는 알아서 할수있을것이라 믿는다.

ㅎㅇㅌ!

Comments