반응형

Server-side Template Injection 문제입니다. 처음에 접했을 때는 생소한 공격방법이라 당황했었는데요,

구글 검색 시 많은 정보가 나오더라고요.. (공부 안한거 들통ㅠ)


이 문제를 풀 때 개념을 https://www.netsparker.com/blog/web-security/server-side-template-injection/ 이 곳에서 파악했구요,

상세 공격 방법들은 https://portswigger.net/blog/server-side-template-injection 이 곳을 참고했습니다.

요약하면, Server Side Template는 동적 HTML을 생성할 수 있다는 큰 장점때문에 사용되고 있는데, 템플릿 문자열 내에 사용자가 입력을 제어하는 부분을 이용하여 사용자가 템플릿 표현식을 실행할 수 있을 경우 원격 코드 실행까지 이어질 수 있다는 것입니다.

 

문제를 풀어보도록 하겠습니다.


문제에 들어가보면, 닉네임을 입력하라는 입력창과 check 버튼이 있습니다.

임의의 문자열을 삽입한 후 버튼을 클릭하면 아랫 줄에 echo 명령어처럼 사용자가 입력한 값을 그대로 뿌려줍니다.


이번에는 공격 가능성이 존재하는지 알아보도록 하겠습니다.


${7*7} 을 입력할 경우, 공격이 불가능한 경우라면 "${7*7}" 전문이 나오는 것이 정상이지만, 문제에서는 계산이 되어 나옵니다.

때문에, 원하는 명령어를 실행할 경우 서버에서 실행되어 결과 값을 얻을 수 있을 것 같습니다..


우선, 간단한 명령어부터 실행해보도록 하겠습니다.


<#assign ex="freemarker.template.utility.Execute"?new()> ${ ex("실행할 명령어") } << 명령 코드를 입력하면 위와 같이 명령어 결과 값을 확인할 수 있습니다. (공격코드는 상위 링크에서 확인하였습니다.)


whoami 명령어 역시 정상 동작하여 결과를 확인 할 수 있었습니다.


이번에는 문제에서 요구한 파일을 읽어보겠습니다. 간단한 cat 명령어로 flag를 획득할 수 있습니다.

반응형

'Study > Wargame' 카테고리의 다른 글

[root-me] Path Truncation  (0) 2019.02.26
[root-me] SQL Injection - GBK  (0) 2019.02.21
[root-me] SQL injection - string  (0) 2019.02.07
[root-me] LFI - Double Encoding  (1) 2019.01.17
[root-me] PHP filters  (0) 2019.01.16

+ Recent posts