문제 설명을 보면 간단한 비교 문제이고, 힌트는 이 문제의 제목이라고 한다.

 

문제 페이지를 보면 입력창만 하나가 있다.

소스코드를 보면 post 방식으로 입력받고 있는데,

json_decode() 함수로 입력 받은 값을 json 값으로 바꿔준다.

key 값이 true면 flag를 출력하는 것 같다.

post 방식으로 입력받기 때문에 프록시 툴을 이용해서 입력 값을 가로채주면 다음과 같은 값이 나온다.

이 값은 url 인코딩 된 값이기 때문에 decode 해주면 다음과 같이 {"key":"123"} 의 값이 나온다.

저 값에서 123을 true로 바꾼후 값을 전달해 주면 flag를 얻을 수 있다.

true는 문자열이 아닌 boolean형 자료형이기때문에 "값인 %22도 함께 삭제해야 한다.

 

 

알게된 점 : json 관련 취약점, php json_decode() 함수

'Security & Hacking > Wargame' 카테고리의 다른 글

[LoS] cobolt  (0) 2019.11.26
[LoS] gremlin  (0) 2019.11.26
[Wargame.kr] tmitter  (0) 2019.09.07
[Wargame.kr] md5_compare  (0) 2019.09.03
[Wargame.kr] strcmp  (0) 2019.09.02

 

문제 설명을 보면 admin으로 로그인 해야 하는 것 같다.

또한 id와 ps는 char()자료형으로 32자를 고정 길이로 담을 수 있다.

문제 페이지를 보면 로그인과, 회원가입을 할 수 있는데 admin으로 로그인은 당연히 안된다.

id와 ps 변수를 보면 char 자료형으로 되어 있는데 char은 고정 길이 자료형이고, 현재 32자로 고정되어 있는데, 입력된 값 외에 남은 값들은 공백 문자로 인식하고, 32자를 넘어가는 문자를 입력하면 32자 까지만 인식된다.

ex) admin 입력시 : 'admin'의 5자를 제외한 나머지 27자는 공백 문자로 인식

 

회원가입 하는 곳에 가서 소스 코드를 보면 id 최대 길이가 32자로 되어 있는데 33자로 수정해 준다.

소스 코드를 수정한 후 id에 'admin + 공백 27자 + 1' 을 입력한다. 이렇게 되면 33번째 문자인 1은 인식되지 않는다.

ps에는 7자 이상의 값을 넣고 계정을 만들면 성공적으로 계정이 만들어 진다.

 

id:admin, ps:7자 이상 만든 값 으로 로그인 하면 admin으로 로그인 할 수 있고, flag를 얻을 수 있다.

 

알게 된 점 : char자료형은 고정길이 자료형이고, 남은 자리는 공백으로 인식, 고정길이 넘어가면 삭제

                varchar 자료형은 가변길이, 위 취약점을 막으려면 varchar 사용

'Security & Hacking > Wargame' 카테고리의 다른 글

[LoS] gremlin  (0) 2019.11.26
[Wargame.kr] type confusion  (0) 2019.09.10
[Wargame.kr] md5_compare  (0) 2019.09.03
[Wargame.kr] strcmp  (0) 2019.09.02
[Wargame.kr] DB is really GOOD  (0) 2019.09.02

문제 설명을 보면 비교를 하는데 다른 값으로 해야 한다는 것 같다. 

문제 페이지를 보면 두 개의 값을 입력받는다. 

소스 코드를 확인해 보면 v1과 v2의  md5 값이 같으면 문제를 해결할 수 있는데

ctype_alpha() 함수로 v1이 알파벳인지 검사하고, is_numeric() 함수로 v2가 숫자인지 검사한다.

php md5 비교에서 두 md5 해시값의 앞부분이 0e로 같은 값을 가지면 참을 반환하는 취약점이 있다.

이러한 값을 가지는 알파벳과 숫자는 QQNKCDZO 와 240610708 가 있다.

이러한 취약점을 막기 위해서는 === 연산자를 사용하는 방법이 있다.

알파벳 값을 v1(첫번째)에 넣고 숫자 값을 v2(두번째)에 넣으면 flag를 얻을 수 있다.

 

알게된 점 : php md5함수에서 비교 취약점과 보안방안, php ctype_alpha()함수, is_numeric() 함수

'Security & Hacking > Wargame' 카테고리의 다른 글

[Wargame.kr] type confusion  (0) 2019.09.10
[Wargame.kr] tmitter  (0) 2019.09.07
[Wargame.kr] strcmp  (0) 2019.09.02
[Wargame.kr] DB is really GOOD  (0) 2019.09.02
[Wargame.kr] md5 password  (0) 2019.08.29

문제 설명을 읽어보면 strcmp 함수를 우회할 수 있다면 플래그를 얻을수 잇다고 한다.

문제 페이지에 들어가 보면 password 를 입력할 수 있는 창이 있다.

소스코드를 보면 다음과 같이 strcmp 함수를 이용하여 password 값을 확인하고 있다.

strcmp 함수는 strstrcmp($a,$b)를 실행할 때 a가 작으면 음수, a가 크면 양수, a와 b가 같으면 0을 반환하는데,

0이 반환되면 암호 비교 구문이 우회되고 배열을 인자로 가지면 무조건 0을 반환하는 취약점이 있다.

 

따라서 password변수를 배열로 지정해 주면 해당 비교문을 우회할 수 있다.

위와 같이 문제 페이지에서 input password를 배열로 바꿔준 후 값을 입력하면 플래그를 얻을 수 있다.

 

알게된 점: strcmp 함수 취약점

'Security & Hacking > Wargame' 카테고리의 다른 글

[Wargame.kr] tmitter  (0) 2019.09.07
[Wargame.kr] md5_compare  (0) 2019.09.03
[Wargame.kr] DB is really GOOD  (0) 2019.09.02
[Wargame.kr] md5 password  (0) 2019.08.29
[Wargame.kr] fly me to the moon  (0) 2019.08.27

문제 설명을 보면 사용자명과 데이터베이스의 연관성을 찾아야 한다고 한다.

 

문제 페이지에 들어가 보면 사용자를 입력할 수 있는 로그인 창이 있다.

저기에 어떤 값을 입력하고 로그인하면 입력한 값을 사용자명으로 하는 메모창이 있다.

다시 처음 페이지로 돌아와 관리자 계정으로 예측되는 admin을 입력하면 경고창이 뜬다.

USER 입력창에 여러 특수 기호를 입력해 보던 중 / 를 넣었을 때 에러가 발생 했다.

에러 내용을 보면 ./db/wkrm_사용자명.db의 이름으로 db파일이 존재하는 것 같다.

URL에 다음과 같이 입력하였더니 wkrm_admin.db라는 db파일을 다운로드 할 수 있었다.

이 파일을 메모장으로 열어보면 하단에 플래그 위치의 경로를 알려준다

해당 경로로 들어가면 플래그를 얻을 수 있다.

'Security & Hacking > Wargame' 카테고리의 다른 글

[Wargame.kr] md5_compare  (0) 2019.09.03
[Wargame.kr] strcmp  (0) 2019.09.02
[Wargame.kr] md5 password  (0) 2019.08.29
[Wargame.kr] fly me to the moon  (0) 2019.08.27
[Wargame.kr] WTF_CODE  (0) 2019.08.27

문제 설명을 보면 md5 함수가 나와 있다.

 

문제 페이지를 보면 password를 입력하는 입력란이 있고, 페이지 소스 코드를 볼 수 있다.

 

소스 코드를 보면 md5 함수에서 취약점이 발생한다.

md5  함수 옵션의 기본값은 false 인데, true 옵션을 사용하게 되면 해시 값을 바이너리 형식으로 반환하게 된다.

 

또한 sql에서 패스워드의 값이 '=' 의 형태로 들어가게 되면 참 으로 인식하고, php내에서는 md5 해시한 값이 바이너리 형식으로 인식하기 때문에 어떤 값을 md5 해시한 결과가 '=' 인 값을 찾아야 한다.

파이썬으로 코딩해서 찾아보면 1839431 이라는 값을 찾을 수 있다.

 

import hashlib

 

for i in range(0,1000000000):

    if b"'='" in hashlib.md5(str(i).encode()).digest():     # bytes형태로 바꿈

        print('Found: {}'.format(i))

 

찾은 값을 문제 페이지의 password 값을 입력하면 flag를 얻을 수 있다.

 

알게된 점 : php에서 md5함수의 옵션이 true로 설정되게 되면 취약점이 발생한다.

md5함수의 기본값 옵션은 false 이다. 

'Security & Hacking > Wargame' 카테고리의 다른 글

[Wargame.kr] strcmp  (0) 2019.09.02
[Wargame.kr] DB is really GOOD  (0) 2019.09.02
[Wargame.kr] fly me to the moon  (0) 2019.08.27
[Wargame.kr] WTF_CODE  (0) 2019.08.27
[Wargame.kr] login filtering  (0) 2019.08.25

문제 설명을 보면 이 프로그래밍 언어를 읽을 수 있냐고 물어본다.

 

문제에 들어가면 소스코드를 얻을 수 있다.

이 파일 확장자의 ws를 검색해 보았더니 whitespace 라는 프로그래밍 언어의 확장자라고 한다.

whitespace 언어는 2003년 만우절에 발표된 언어로 이 언어에서는 공백, 탭, 개행문자만이 의미를 가진다고 한다.

이 파일을 notepad로 열어보면 공백문자만이 존재하는것을 볼 수 있다.

이 파일의 내용을 복사하여 온라인 Decode 툴을 이용하면 flag를 얻을 수 있다

온라인 디코더는 https://vii5ard.github.io/whitespace/ 사이트를 이용했다.

 

알게된 점: whitespace 언어의 존재와 이 언어가 어떤 언어인지

'Security & Hacking > Wargame' 카테고리의 다른 글

[Wargame.kr] md5 password  (0) 2019.08.29
[Wargame.kr] fly me to the moon  (0) 2019.08.27
[Wargame.kr] login filtering  (0) 2019.08.25
[Wargame.kr] QR CODE PUZZLE  (0) 2019.08.25
[Wargame.kr] flee button  (0) 2019.08.25

문제 설명을 보면 계정을 가지고 있는데 계정이 막혀 있어서 어떻게 필터링을 우회할 수 있는지 묻고 있다.

페이지에 들어가 보면 id와 password를 입력할 수 있는 입력창이 나오고, 페이지의 소스 확인도 할 수 있다.

소스코드의 위 부분에서 아이디가 guest 거나 blueh4g면 계정이 잠겼다고 출력하고, 저 두 계정이 아니라면 login에

성공하고, key를 출력한다.

 

소스코드의 아래 부분을 보면 guest와 blueh4g라는 계정의 password도 확인할 수 있다.

또한 위 소스코드 에서는 로그인을 위해 mysql을 사용한다.

mysql 에서는 대소문자를 구분하지않지만, php에서는 대소문자를 구분하게 되어

mysql 에서는 GUEST == guest 이지만 php 에서는 guest != GUEST이기 때문에 

id : GUEST / pw : guest를 입력하면 flag를 확인할 수 있다.

알게된 점: mysql 에서는 대소문자 구분을 하지 않는다. 이로 인한 인증 관련 취약점이 발생할 수 있다.

'Security & Hacking > Wargame' 카테고리의 다른 글

[Wargame.kr] fly me to the moon  (0) 2019.08.27
[Wargame.kr] WTF_CODE  (0) 2019.08.27
[Wargame.kr] QR CODE PUZZLE  (0) 2019.08.25
[Wargame.kr] flee button  (0) 2019.08.25
[Wargame.kr] already_got  (0) 2019.08.25

문제 설명을 보면 자바스크립트 퍼즐 문제인 것 같다.

페이지에 들어가 보면

QR 코드가 일정하게 쪼개져 섞여 있는 것을 볼 수 있다.

크롬의 개발자 도구에 Sources 탭을 보면 원본 이미지를 확인할 수 있다.

저 이미지를 다운받아서 온라인 QRcode decoder에 넣으면 결과값으로 flag가 있을것 같은 주소를 얻을 수 있다.

https://zxing.org/ 라는 사이트에서 qrcode decode를 할 수 있다.

decode해서 나온 주소에 접속하면 flag를 얻을 수 있다.

'Security & Hacking > Wargame' 카테고리의 다른 글

[Wargame.kr] WTF_CODE  (0) 2019.08.27
[Wargame.kr] login filtering  (0) 2019.08.25
[Wargame.kr] flee button  (0) 2019.08.25
[Wargame.kr] already_got  (0) 2019.08.25
[XSS game] Level 6  (0) 2019.08.14

문제 설명을 보면 

버튼을 클릭해라! 나는 그것을 잡을 수 없다! 라고 써져 있다.

 

페이지에 들어가보면 

key를 얻고 싶으면 click me! 라는 버튼을 클릭해야 하는 것 같은데 마우스 포인터 이동에 따라 click me! 버튼이 계속

움직여서 버튼을 클릭 할 수가 없다.

소스코드를 보면 저 버튼의 html 태그에

다음과 같이 버튼을 클릭하면 저 페이지의 get 방식으로 key=7206이 입력된 페이지로 이동함을 확인할 수 있다.

저 값을 url에 주게 되면 flag를 확인할 수 있다.

'Security & Hacking > Wargame' 카테고리의 다른 글

[Wargame.kr] login filtering  (0) 2019.08.25
[Wargame.kr] QR CODE PUZZLE  (0) 2019.08.25
[Wargame.kr] already_got  (0) 2019.08.25
[XSS game] Level 6  (0) 2019.08.14
[XSS game] Level 5  (0) 2019.08.08

+ Recent posts