챌린지 49

bughela - SimpleBoard

wargame.kr의 18번째 문제인 SimpleBoard다. 간단한 Union SQL Injection 문제라고 한다. 스크립트가 필요할 수도 있다고 하는데 LoS를 풀던 때처럼 파이썬 스크립트를 이용하여 반복문을 통해 추리하는 과정이 필요한 것 같다. Start 버튼을 눌러 문제를 확인해보자. 간단한 테이블로 게시판이 구현되어 있다. 각 게시글을 클릭하면 내용이 나타나며 조회수(HIT)가 올라간다. URL은 read.php에 idx 파라미터로 읽을 게시글 번호를 넘겨준다. 각 게시글을 클릭했을 때 자바스크립트 코드로 해당 URL을 생성하여 그곳으로 이동한다. 현재 1번부터 4번까지 4개의 글이 있으니 확인 차 5번이나 0번을 넘겨보았으나 아무런 정보도 돌아오지 않았다. 하지만 테이블은 잘 나타나는 걸..

bughela - pyc decompile

wargame.kr의 17번째 문제인 pyc decompile이다. pyc decompile이라는 문제 이름답게 pyc 파일을 디컴파일하는 문제인 것 같은데 Start 버튼을 눌러 접속해보자. 파이썬이라는 문구와 함께 서버 시각, 그리고 bughela.pyc 파일 다운로드 링크가 주어져 있다. 서버 시각과 pyc 파일과는 무슨 상관이 있을까? 아마 예전에 webhacking.kr에서 풀었던 어떤 문제처럼 매 초마다 다른 어떤 값을 미리 시간을 예측해서 계산해서 플래그로 제출해야 하는 게 아닌가 싶다. 일단 다운로드한 파일을 이 사이트에서 디컴파일해보자. # uncompyle6 version 3.5.0 # Python bytecode 2.7 (62211) # Decompiled from: Python 2...

Lord of SQLInjection - giant

14번째 문제인 giant다. 이번 문제는 특이하게 id나 pw같은 파라미터를 받지 않고 shit이라는 파라미터를 받아서 쿼리 중간에 삽입한다. 그런데 쿼리가 삽입되는 위치가 원래 공백이 있어야 할 위치인데 그렇다면 shit 파라미터에 공백 문자를 삽입해서 쿼리가 정상적으로 수행될 수 있도록 해야 하지 않을까? 하지만 두 가지 필터링이 이를 방해하고 있다. 먼저 shit 파라미터에 전달된 글자가 한글자를 초과할 경우 종료한다. 그리고 공백 문자(' '), 개행 문자('\n'), 리턴 문자('\r'), 탭 문자('\t') 등 해당 쿼리에 공백을 줄 수 있는 다양한 문자들을 필터링하고 있다. 그럼 이 필터링된 문자들을 제외하고 어떤 한글자짜리 값을 입력해야 쿼리에 공백을 만들어 줄 수 있을까? 문제를 해결할..

bughela - web chatting

wargame.kr의 16번째 문제인 web chatting이다. 트래픽을 감소시키는 방향에 대해 개발자의 관점에서 생각해보라는 힌트가 주어져 있다. 일단 Start 버튼을 눌러서 문제를 확인해보자. BlueCHAT이라는 서비스 이름과 함께 아이디를 입력하는 간단한 입력 폼이 주어져 있다. HTML 소스를 확인해도 아이디를 입력하도록 하는 로직 말고는 별다른 점을 찾을 수 없었다. 간단하게 아이디를 입력하고 들어가 보면 다음과 같은 채팅방이 나타난다. 재밌는 점은 왼쪽 아래에 자신의 아이디를 나타내는 부분은 쌍따옴표(")에 의해 잘리는 것을 볼 수 있었다. 다른 문자들은 이스케이프 되어 그대로 표시되었으나 일반 채팅에는 따옴표, 큰따옴표나 역슬래시 등 SQL Injection을 시도해볼 만한 문자들은 이..