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

 

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

소스코드를 보면 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

+ Recent posts