먼저 초대된 슬랙에 들어가면 봇이 존재한다.
봇에게 DM으로 help를 입력하면 사용할 수 있는 명령어를 출력해준다.
먼저 이 부분에서 웹 사이트가 존재한다는 것과 99dan 이라는 쓸모없고 수상한 기능을 파악하는게 출제의도였다.
결론부터 말하자면 99dan 에서 취약점이 터진다.
99dan print(1) 을 입력하면 1이 출력된다.
사실 Python sandbox escaping을 목적으로 만들었지만 코드를 잘못짜버려서 아무런 필터링이 없는
단순한 Command injection 이 되버렸다. 상당히 아쉽다.
튼 이 기능을 이용해서 디렉토리 목록을 출력해보면 readme 라는 파일이 존재한다.
이 파일을 통해 웹 사이트의 소스백업파일을 받을 수 있다.
여러가지 기능들이 존재한다. 그 중 read.php 를 보면 아래와 같다.
u 라는 쿠키가 존재한다면 unserialize 한다. 딱 봐도 Object injection 이다.
uclass.php 를 확인해본다.
간단하다. 쿼리 날리고 필요한 정보 json encode해서 return 해준다. 이 부분에서 board를 우리가 원하는 값으로 덮어쓸 수 있다.
mysql_error 로 에러도 출력해주기 때문에 단순 에러기반 공격으로 진행하면 된다.
테이블을 찾아보면 santa 라는 테이블이 있고 키값이 들어있다.
핑계를 대보자면 시험기간에 만든거라 코드의 헛점을 발견하지 못했다ㅋㅋ
이 때문에 jinmo123님이 쉘따고 mysql 커맨드로 조회해서 빠르게 푸셨다.
아쉽긴 하지만 이것도 대회 중 생기는 재밌는 일 같다.
그리고 코드가 좀 더럽고, 존재하지 않는 페이지에 대한 정보들이 담겨있는데
이 때문에 많은 분들에게 혼동이 온 것 같다.
결론부터 말하자면 의도한 부분이다. 실제 서비스를 접하다 보면 외주를 준건지 때려박는 식의 코드들이
상당히 많이 존재하고 유지보수하면서 없어진 페이지들에 대한 정보도 그대로 들어있는 경우가 상당히 많다.
풀이 자체는 어렵지 않기 때문에 꼬아놓긴 그렇고 일부러 지저분하게 코드를 짰다.
튼 대회운영하면서 재밌었다. 끝
'Wargame(CTF)' 카테고리의 다른 글
[Solveme.kr] Point Lotto (0) | 2016.11.18 |
---|---|
[2016 SECUINSDE CTF] SBBS(Web 250) (0) | 2016.07.12 |
[2014 Codegate] angry_doraemon (0) | 2016.07.07 |
[2013 Codegate] nuclear (0) | 2016.07.05 |
blackjack (0) | 2016.06.28 |