wargame.kr 12번 type confusioin 라는 문제다.

점수는 550point.!

읽어보니 뭔가 비교를 하라는거 같은데 type confusion 이라는 것과 관련이 있는 것 같다.

일단 시작해보자.


긴말없이 소스부터 확인해보자.

흠.. 보아하니 json 타입으로 입력받은 값을 디코딩한 후 json의 키 값과 genykey()라는 함수를 통해 sha1 방식을 통한 hash 값이 같아야 플래그 값이 얻어지는 것 같다.

따로 플래그 값을 출력해 주는 부분이 보이지 않는다.

./util.js 라는 파일이 실행되는 걸로 봐서 뭔가 있을 것 같다. 확인해보자. 


데이터를 넘길때 json 방식으로 값을 넘기고 code부분이 true가 되면 플래그 값이 출력하는 것 같다.

즉,  if ($json->key == $key) 이 부분이 참이되서 code==>true가 성립되면 플래그 값이 정상적으로 출력 되는 것 같다.

그럼 이제 저 구문을 참으로 만들어야 하는데 sha1 방식의 hash 값이랑 같은 키 값을 만드는 건 힘들어 보인다. sleep 함수로 brute force까지 차단시켜 놓았다.

type confusion라는 걸 참고하라 했으니 일단 이게 뭔지부터 찾아보자.

찾아보니 type confusion 취약점이라고 객체의 타입(type)을 혼동하여 나는 오류 및 취약점. 이란다.

그럼 ==가 php에서 느슨한 비교를 하기 때문에 json의 key값을 문자열과 ==로 비교했을때 반드시
TRUE 값이 나오는 값으로 변조해서 보내면 될 것 같다.


참고해본결과 문자열은 TRUE라는 값과 비교하면 반드시 TRUE가 된다.

자 그러면 json의 값을 변조해서 보내는 일만 남았다.

burp suite 를 키고 아무 값이나 넣어서 일단 보내보자.

..? url 인코딩된 값이 보인다. 아 소스에서 디코딩해서 썻었지.ㅎ

url 디코딩 후 보내는 키 값을 "test"에서 true로 바꿔 보냈다. 이렇게 보내게 되면 type confusion 취약

점으로 인해 ==가 느슨한 비교를 하게 되어 결과 값이 true가 되어 플래그가 얻어진다. 

성공! 


'Wargame > wargame.kr' 카테고리의 다른 글

wargame.kr SimpleBoard  (0) 2018.01.04
wargame.kr tmitter  (0) 2018.01.04
wargame.kr strcmp  (0) 2018.01.04
wargame.kr EASY_Crackme  (0) 2018.01.04
wargame.kr md5 password  (0) 2018.01.04
블로그 이미지

JeonYoungSin

메모 기록용 공간

,