목록Wargame Writeups/wargame.kr (26)
White Security
wargame.kr 사이트의 10번째 문제입니다. 그저 비교하세요. 서로 다른 값을 :D 링크에 접속하니 두개의 입력칸이 있습니다.그리고 하단의 view-source 링크를 통해 php 소스를 확인할 수 있습니다. 먼저 소스를 확인해보겠습니다. 브루트포스 방지를 위해 sleep(3) 구문를 끼워넣었군요.첫번째 값은 알파벳으로, 두번째 값은 숫자로 이루어져야 하며md5 해싱을 한 후에 == 비교를 하여 값이 같다고 여겨져야 합니다. php에는 두개의 비교 연산자가 존재합니다.느슨한 비교인 ==, 엄격한 비교인 === 가 그것인데요. 자료형까지 고려하여 완벽하게 같지 않으면 탈락시키는 ===와는 다르게==는 의도와 다르게 통과시키는 경우가 더러 있습니다. 이번 문제의 경우에도 적용되는 부분이 있는데요. 바로..
wargame.kr 사이트의 아홉번째 문제입니다. 본 문제는 간단하기 때문에 본문을 보기보다는php strcmp 취약점에 대해 탐색해보고 직접 푸는 편이 유익할 것이라 생각됩니다. 만약 strcmp 함수를 우회하면 플래그를 얻을 수 있어요 링크에 접속하니 위와 같은 단일 입력 폼과php 소스링크를 확인 할 수 있었습니다. 먼저, 하단의 링크를 통해 소스를 확인해 보겠습니다. 브루트포스를 방지하기 위해 sleep함수를 끼워넣었고 password 변수와 사용자 입력 변수를 인자로문제에서 언급했던 strcmp 함수를 수행하여0을 반환한 경우 플래그를 출력하도록 했군요. strcmp에서 0을 반환시키려면 두 인자의 값이 같아야만 합니다.그런데 password 변수값은 알 방법이 없지요. 사실 strcmp는, 한..
wargame.kr 사이트의 여덟번째 문제입니다. 이 DB는 어떤 종류일까요? 유저 이름과 DB간의 상관관계를 찾아봅시다. 링크에 접속하니 위와 같은 로그인 폼을 확인할 수 있었습니다.user에 posix라고 입력하고 로그인 해 보겠습니다. 위와 같은 방명록 형식으로 텍스트 저장을 할 수 있습니다.posix.tistory.com 이라고 입력하여 저장해본 결과, 별 문제없이 올라가네요. 각종 특수문자들을 입력해 보았습니다..어떤 이유에서 인지는 모르겠지만, 홀수개의 작은 따옴표는 입력이 되지 않습니다.다시 로그인 화면으로 돌아와서admin계정으로 로그인을 해 보겠습니다. 이런, 당연하게도 막혀있군요! 페이지 소스를 확인해 본 결과, 자바스크립트를 통해 블록하고 있었습니다. burpsuite 프록시를 통해 ..
wargame.kr 사이트의 일곱번째 문제입니다. php의 md5 해싱함수 사용예시를 보여주고 있는데뒷쪽의 true 인자가 이번 문제의 요점입니다. 링크에 접속하면 한개의 입력 폼이 보입니다. 소스를 확인하면 md5_password 데이터베이스의admin_password 테이블에서 password가 md5 해싱된 전달값과 동일한 요소를 질의하고만약 존재한다면 Key가 출력하도록 되어있습니다. 앞서 소개했던 php의 md5 함수 두번째 인자는 해싱 결과가 바이너리 형식 문자열로 출력되도록 하는데요. 예시로단어 [ apple ] 를 해싱하면 raw_output apple false 1f3870be274f6c49b3e31a0c6728957f true 8p�'OlI�� g(� 만약 해싱한 결과에 sql inje..
wargame.kr 사이트의 여섯번째 문제입니다. 자바스크립트 게임입니다. 부정 프로그램 방어를 우회하여 클리어 할 수 있나요? 게임에서 사망시 31337 포인트를 모아야 한다는 안내가 보입니다. 페이지 소스를 살펴보면packer 를 통해 난독화된 자바스크립트 소스를 볼 수 있습니다. xssor.io의 unpacker을 통해변환시키고 해석해보니 위의 _0x8618x6 라는 이름이 변수가 점수를 의미하는 것 같네요. burp proxy를 통해 응답 페이지를 변조하여초기 점수값을 99999로 바꾸었습니다. 99999 점수로 시작했고 사망시에 Key를 획득할 수 있었습니다.
wargame.kr 사이트의 다섯번째 문제입니다. 이건 프로그래밍 언어예요. 이 소스코드를 읽을 수 있나요? 링크에 접속하면 ws확장자명의 파일 링크를 확인할 수 있습니다. 파일을 다운받아 내용을 확인해 보니빈화면만 수십 줄 보이네요. 파일 내용을 16진수로 변환하면 확인해 보면[ 0x09, 0x0a, 0x20 ] 만으로 구성되었다는걸 확인할 수 있는데( ASCII코드를 기준으로 하여 순서대로 [ 수평 탭, 개행 문자, 공백 ] ) 처음 봤을때 혹시 삼진수로 변환하여 해석하는 것이 아닐까킹리적 갓심을 발휘해 보았지만 당연히 아니었다. ^^;; whitespace 라는 마이너한 프로그래밍 언어 소스 코드였고온라인 컴파일러에 넣어보니 Key를 얻어낼 수 있었습니다.
wargame.kr 사이트의 네번째 문제입니다. 계정을 정지당했어요. 우회해서 도와주실 수 있나요? 정지당한 계정정보를 이용해 로그인을 하는것이 문제의 목표입니다. 링크에 접속하면 위와 같은 로그인 화면을 확인할 수 있고아래에는 페이지 소스를 확인하는 링크가 존재합니다. login_filtering 데이터베이스의 user 테이블의 정보를 이용해우리가 입력한 아이디/비밀번호 정보와 일치되는 정보가 있으면 인증이 성공하며 맨 하단에 주석으로 정지된 계정 두개가 보입니다. 제공된 정지아이디로 로그인을 시도하면에러메시지를 볼 수 있습니다. Mysql은 where절에서 대소문자를 구분하지 않는데요. 따라서 [ guest/guest ] 계정을[ Guest/guest ] 와 같이대소문자를 바꿔 로그인을 시도하면 로그..
wargame.kr 사이트의 세번째 문제입니다. 자바스크립트 퍼즐 문제입니다. 재미있게 하세요자바스크립트 문제라는 것을 알 수 있네요. 링크에 접속하면 위와 같은 고전 게임이 등장합니다. 소스를 확인해보면 jquery 구문으로$('#join_img').attr('src',unescape('.%2f%69%6d%67%2f%71%72%2e%70%6e%67'));이미지의 src속성 지정하고 있네요. 아해 내용들은 해당 이미지를 가지고서 게임을 구성하는 내용으로 보입니다. 해당 주소를 URI 디코딩 해 보면./img/qr.png 가 이미지의 주소라는 것을 알 수 있습니다. 해당 이미지 주소로 들어가보면위와 같은 QR코드를 확인할 수 있네요. QR코드를 해석하니 주소 GET! 들어가면 플래그를 확인할 수 있습니다.