1

SQL Injection - Error Based SQLi

SQL Injection - Error Based SQLi

노아의 블로그

    목차
반응형

SQL Injection 공격중에 Error Based SQLi가 있습니다.

간단히 말하자면 고의적으로 오류를 내는겁니다!

 

아니 오류가 나면 DB에서 데이터를 못터는것 아니야? 그렇게 생각하실수도 있습니다.

하지만 오류가 나면 무엇이 나올까요???

바로 "에러메시지" 입니다.

어디어디서 무엇무엇이 에러가 났습니다~ 라고 친절히 설명해주는 에러 메시지죠.

이런 에러메시지가 해커한테까지 친절하면 안되죠! 

그래서 보통은 예외처리를 합니다만, 생각지도 못한 오류거나 처리를 안했거나 한다면 그냥 털리는거죠!

 

에러중에는 두가지 에러를 뽑을 수 있습니다.

바로 문법적 에러 , 논리적 에러이죠. 문법적 에러는 말 그대로 문법 에러입니다.

db에서 s샐랙트 * fro롬 테2블; 극단적인 예시지만 이렇게..ㅋㅋㅋㅋ 하면 당연히 오류가 나겠죠. 

 

이 코드를 실행하기 전에 db에서는 컴파일이라는 과정을 거쳐서 기계어로 바꾸는 과정을 거칩니다! 

하지만 문법이 잘못되었으니까 실행 전에 오류가 뜨겠지요. 결과적으로 코드가 실행전에 뜨는것(입구컷을 당하는) 이 문법에러입니다!

 

하지만 select * from table_hello; 이러한 정상적인 문법을 가진 쿼리문이 있습니다.

그리고 실행도 당연히 됩니다! 하지만 table_hello라는 테이블이 없다고 가정해보겠습니다.

 

그렇다면 실행해서 table을 찾는데 어 ? 너 테이블이 없어 error!

에러메시지: table_hello라는 테이블은 없다.

 

이런식의 오류가 바로 논리적인 에러이지요.

논리적인 에러는 실행중에 발생하니까 실행했을때의 데이터를 가지고 있을수 있다는겁니다.

그럼 이 에러메시지를 이용한다면? 데이터가 털릴수도 있다는거죱.

 

저희는 updatexml이라는 함수를 통해서 고의적으로 에러를 낼것입니다.

updatexml이라는 함수는 xml파일을 업데이트 하는겁니다.

updatexml(수정할 열,경로표현식,수정할 데이터) 형식으로 사용합니다.

 

 

 

이렇게 실행시켜보도록 하겠습니다.

:는 네임스페이스 접두사인데요 ex:ee ex:ss 이런 형식으로 사용되어야 하는데 앞에가 비었죠

그래서 오류가 발생합니다.

 

에러 메시지와 입력한 :ss가 에러메시지로 나오네요..

 

그러면 database이름을 저기다가 넣어버린다면?

 

 

concat는 앞에 문자열과 뒤에 문자열을 합치는 함수입니다.

그니까 :database명 이 되겠네요. 실행시켜볼까요?

 

네...database이름이 나왔습니다. 

만약 웹상에서 에러메시지가 나온다면? database명이 털린거죠!

 

전에 봤던 Union 단계와 똑같이 순차적으로 털리는것을 맞이할수있습니다!

 

이로서 에러메시지도 꽁꽁 숨겨야한다는 사실! 꼭 기억하세요

 

 

반응형

'해킹 > SQL Injection' 카테고리의 다른 글

데이터 추출 두번째 문제  (0) 2023.04.23
새로 만든 로그인 로직 적용  (0) 2023.04.23
로그인 로직 생각2  (0) 2023.04.23