본문 바로가기
웹 취약점 분석

SQL Injection(취약한 컬럼수 찾기)

by 웹하는빡통 2019. 10. 2.

이번 시간에는 SQL Injection 공격을 하기 전 가장 먼저 하는 일이 컬러수 찾기이다.

지난 시간에 컬럼수를 파악하기 위해 사용하는 방법으로 2가지가 있다고 하였다

바로 orderby 와 union select이다. 

 

※연구 목적이 아닌 악의적인 목적으로 이용할 시 발생할 수 있는

법적인 책임은 모두 본인에게 있습니다.

" 정보통신망 이용촉진 및 정보보호 등에 관한 법률"

정당한 접근권한이 없거나 허용된 접근 권한의 범위를 초과하여 정보통신망에 침하는 행위는 금지한다.(48조 1항)

위반시 2년 이하의 징역 또는 3,000만원 이하의 벌금에 처한다(64조 1항 1조)

 

order by로 취약한 컬럼수 파악하기.

먼저 취약한 컬럼수를 파악해보자 URL경로에 id=180라는 파라미터 변수 값 뒤에 order by 100--을 넣어보자.

"100을 넣은 이유는 정확한 컬럼수를 모르기 때문에 사이트에 에러가 뜨는지 정상적으로 작동을 하지는지 확인하기 위해서이다."

 

쉽게 생각하면 서버에다가 " 너 컬럼수가 100개니???라고 물어본다고 생각하면 된다"

 

그 결과 서버에서 에러메시지가 뜨는 것을 확인하였다. 즉 "아까 컬럼수가 100개니?라고 하였을때 서버에선 아니 나의 컬럼개수는 100개가 아니야!! 라고 아주 친절하게 말해준다고 생각하자."

 

SQL Injection을 처음 공부하는 사람들은 궁금해 할 것이다.

아니왜 이런 메시지로 뭘?? 한다는 거지??? 답을 주자면 이런 에러메시지로 컬럼수를 파악 할 수 있기 때문이다. 자 바로 다음으로 진행해보자!!

 

이렇게 order by 100--, 50--, 25--점점 줄여가면서 order by 15--를 넣어보았다.

 

이게 무슨일인가!! 계속해서 에러메시지가 떴던게 order by 15--를 넣은 순간 정상페이지를 띄어주었다.

즉 " 너 컬럼수가 15개니?라고 물어봤을때 서버:응!! 나 컬럼수가 15개야!!라고 답한것과 똑같다"

확실한 컬럼수를 확인하고 싶으면 order by 16이나 14를 넣어보아라 그러면 에러메시지가 뜰것이다. 

결론 해당 사이트의 컬럼수는 15개라는 것이다. 

 

 

UNION SELECT를 이용한 취약한 컬럼수 노출하기.

order by로 취약한 컬럼수를 파악하였다 이젠 union select로 이용해서 취약한 컬럼수를 노출시키겠다. URL창에 union select 1,2,3,4,5,6~~,15--를 넣은 결과 해당 창에 숫자들이 뜨는것을

확인 할 수 있었다. 이 숫자가 뭐냐고?? 바로 취약한 컬럼의 숫자이다.

 

 

UNION을 이용한 서버 버전  노출하기. 

노출된 컬럼수로 이용하여 @@version(MSSQL)을 넣고 입력한 결과 해당 사이트의 버전이 노출 되었다.

 

TABLE_TYPE을 이용한 DB(DATABASE)테이블 노출하기.

TABLE_TYPE='BASE TABLE'을 사용하여 해당 사이트의 테이블이름 "ADMIN"이라는 것을 파악 하였다. 

 

COLUMN 이름 노출하기.

union select 1,2,3,4,column_name~~ from information_schema.columns where table_name='ADMIN'--을 입력하여 칼럼 이름을 뽑아보자.

 

그 결과 컬럼 이름이 EMP_NAME이라는 것을 알 수 있다.

 

 

테이블 이름,컬럼 이름을 파악하였다. 이제 최종 적으로 EMP_NAME안에 어떤 데이터가 있는지 확인해본 결과

Alekha Ray라는 사람이름이 나왔다.

 

그냥 사람이름이다... ㅅㅂ....

 

하지만 만약 우리가 흔히 이용하는 쇼핑몰이나,금융권같은 사이트에 이런 취약점이 발생한다면?

당연히 얘기는 달라진다. 아마 이를 이용하여 해커는 수백~수천만 건에 달하는 고객 정보를

탈취 할 것이다.

 

 

 

 

 

댓글