티스토리 뷰

보안/CTF

TyphoonconCTF2022 후기

돔돔이부하 2022. 6. 24. 23:52
728x90
반응형

저 끝 너머 돔돔이월드가 보입니다....! 점수를 획득한 155 팀 중 18등을 하였습니다. 사실 엄청 잘한 건 아니지만, 적어도 웹 문제 나온 거는 다 풀어서 기분이 좋았습니다!

 

문제를 보기 시작한 건 대회 시작 시간보다 좀 늦게 보았습니다. 그래서 그런지 어떤 문제가 제일 많이 풀렸는지 볼 수 있었는데, 마침 리버싱 문제인 KeyGenMe 문제가 상대적으로 많이 풀려있길래 저도 그것부터 풀어보았습니다.

 

이후에는 웹 문제 중에서 제일 어려워보이는 문제 하나를 골라서 이것만 풀고 자야지 생각으로 했습니다. 이름하여 Hidden Character 문제였는데, 처음에 로그인 페이지에서 node.js 에서 사용하는 mysql 라이브러리 사용했을 때 나오는 SQL query 버그 문제가 나왔습니다. 다행히 예전에 Hackthebox 문제에서도 접한 적이 있어서 오류 내용을 보고 바로 로그인할 수 있었습니다.

https://domdom.tistory.com/entry/Hackthebox-Spiky-Tamagotchi-Writeup%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4?category=1047272 

 

[Hackthebox] Spiky Tamagotchi Writeup(문제풀이)

문제 개요 Bypass authentication with node.js javascript Mysql query injection and RCE in node.js at Function 문제 풀이 우선 문제에서는 회원가입 기능이 존재하지 않았고, 오로지 로그인 기능과 JWT 토큰..

domdom.tistory.com

로그인하니깐 소스코드가 나왔습니다. 소스코드가 나왔을 때 개인적으로 눈이 좀 안좋아서 색깔있는걸 안보면 문제를 풀기가 싫어져서 바로 복사해서 Visual Studio Code 에 붙여넣었습니다. 그랬더니 편집기가 정말 친절하게도 Hidden Character가 있다는 것을 알려주었습니다. ㅋㅋㅋㅋ Hidden Character 라는 건 알고보니 공백문자인데 특수문자로 사용한 문자였고, 이를 변수 이름으로 사용하고 있었습니다. 이 변수를 이용해서 Command Injection 을 할 수 있었고, 문제를 풀 수 있었습니다.

 

이후에 Knowme 문제는 Boolean-based Blind SQL Injection 을 통해서 Database를 추출할 수 있고, 이후에 관리자 계정으로 접속해 파일 업로드를 통해서 업로드되는 파일의 경로는 게싱하구서 쉘을 딸 수 있었습니다.

 

Typo 문제는 유일하게 소스코드가 주어지는 문제였습니다. php 문제였는데, hidden character 랑 유사하게 여기도 계정접근에 있어서 트릭이 필요했고, Union-based SQL Injection 으로 secretkeys 테이블에 있는 uuid를 털고, 이후 접근 후에 정말 다행이게도 최근에 공부했던 Blind XXE 문제가 나왔습니다. 이전에 정리했던 그대로 수행하였고, file protocol이 안되서 php wrapper 를 사용해서 flag 파일의 내용을 추출해서 풀었습니다.

https://domdom.tistory.com/entry/Research-Blind-XXE-XXE-OOBOut-of-band-%EA%B3%B5%EA%B2%A9-%EA%B8%B0%EB%B2%95

 

[Research] Blind XXE - XXE OOB(Out-of-band) 공격 기법

일반적으로 XXE(XML External Entity) 공격이라 함은 XML content-type 의 데이터를 웹 요청을 통해서 전송하고 서버에서 XML 외부 엔티티가 처리 가능하게 설정된 경우 발생하는 취약점을 말합니다. 그리고

domdom.tistory.com

 

그렇게 웹 문제만 다 풀고 끝내려고 했는데, 알고보니 이 CTF 가 엄청 오래한다는 것을 알게 되어서 뒤늦게 다시 들어가서 봤더니 이상하게 포너블 문제 중에서 800점짜리가 많이 풀려있길래 이상하다 싶어서 들어가서 봐보았습니다.

이름하여 See You Later Allocator 문제였는데, ncat 으로 들어가서 보니깐 무슨 firefox 의 Javascript 인터페이스를 하나 던져주는 것 같았습니다. 뭐 어떻게 하는지 몰라서 그냥 일단 javascript 라면 무슨 변수나 함수나 객체들이 있겠지 싶어서 console.log(this); 를 해보았습니다. 그랬더니 help 라는 함수가 있길래 뭐지 싶어서 help() 해봤고, 그렇게 하다가 ㅋㅋㅋㅋ 운이 좋게 os.system() 이라는 함수를 발견하였고, 결국 아 사람들이 이걸로 엄청 쉽게 풀었구나 싶었습니다. os.system("ls -al"); 하니깐 그대로 명령이 실행되더라구요. (나중에 알고보니 이게 언인텐이 터진거였고, 그래서 문제 제작자들이 다시 version 2를 올렸다고 하네요)

 

무튼 마지막 문제까지 풀어서 진짜 운좋게 18등이 되었습니다. 높은 등수는 아니지만 웹문제를 다 푼 것만으로 정말 만족하게 되는 대회였습니다. 문제 사이트는 아직 닫히지 않은 것인지, 나중에 기회되면 천천히 문제풀이도 작성해볼 생각입니다.

 

끝.

728x90
반응형
댓글