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

난 정말 최고야 멋있어

CTFLearn - Inj3ction Time 본문

카테고리 없음

CTFLearn - Inj3ction Time

n00bh4cker 2019. 12. 16. 07:23

HINT :  UNION 을 이용하기!

 

일단 UNION 문에 대해서 알아보자...

 

SELECT ....

UNION

SELECT ....

 

이 있으면 UNION 의 역할은 앞의 SELECT 한 결과와 뒤의 SELECT 한 결과를 합쳐주는 역할을 한다

하지만 이때 주의사항이 있는데 앞 뒤의 칼럼수가 같아야 한다는 점이다!

 

1 UNION SELECT 1

1 UNION SELECT 1,2

1 UNION SELECT 1,2,3

1 UNION SELECT 1,2,3,4

...

쭉쭉 해주다 보면

결국에는 무엇인가 출력되는 시기가 온다!

(기본적인 상태라면 에러 메시지가 떴겠지만... 에러메시지를 안나게 해두었다!)

 

 

여기서 첫번째 칼럼에는 Breed 의 값이

두번째 칼럼에는 Name의 값이

세번째 칼럼에는 Color의 값이

네번째 칼럼에는 또 다른 무언가가 있다는 것을 알 수 있다.

 

이때 SQL 에는 INFORMATION_SCHEMA 라는 것이 존재하는데 SQL Server에서 메타데이터를 가져오기 위한 하나의 수단... 이라고 한다!

이곳의 INFORMATION_SCHEMA.COLUMNS 에 TABLE_NAME 과 COLUMN_NAME 이 존재하는데

이것을 통해서 데이터 베이스에 존재하는 TABLE들의 이름들과 테이블들에 존재하는 칼럼의 이름들을 얻어올 수 있다.

https://dev.mysql.com/doc/refman/8.0/en/columns-table.html

 

MySQL :: MySQL 8.0 Reference Manual :: 25.8 The INFORMATION_SCHEMA COLUMNS Table

25.8 The INFORMATION_SCHEMA COLUMNS Table The COLUMNS table provides information about columns in tables. The related ST_GEOMETRY_COLUMNS table provides information about table columns that store spatial data. See Section 25.33, “The INFORMATION_SCHEMA ST_

dev.mysql.com

 

그럼 쿼리를 다시 짜보자

1 UNION SELECT 1,2,3,4 쿼리를 넣었을 때 sql injection 공격이 성공했으므로..

1 UNION SELECT TABLE_NAME,COLUMN_NAME,3,4 FROM INFORMATION_SCHEMA.COLUMNS 로

쿼리를 다시 짜주고 공격을 다시 시도해보자

얻고자 하는건 DB에 존재하는 테이블들의 이름과 쿼리..

*공격에 성공했다면 Breed 에 TABLE_NAME이 Name에 COLUMN_NAME이 들어간다!

 

 

정상적으로 SQL Injection 공격이 성공했고...

쭉쭉 내리다 보면... 

칼럼이름(Breed) 에 특이한 친구 (f0und_m3)와

테이블이름(Name)에 특이한 친구 (w0w_y0u_f0und_m3)가 있는 것을 알 수있다

 

우리가 이제 해볼것은 가장 수상한 친구들인 이 두 녀석이 조합된 필드의 값을 구하는 것이다

그러기 위해서 쿼리를 다시 한번 짜보도록 하자

 

1 UNION SELECT f0und_m3,2,3,4 FROM w0w_y0u_f0und_m3

 

 

abctf{uni0n_1s_4_gr34t_c0mm4nd}