본문 바로가기

해킹

Blind Sql Injection에 대해 알아보자 ! 웹 해킹 2번 풀이

이번 글에서는 웹해킹.kr 2번 문제를 풀면서 Blind Sql Injection에 대해 알아보려고 합니다.

Blind Sql Injection은 성공한다면 디비명, 테이블 명, 컬럼 명, 컬럼에 들어있는 데이터까지 훔칠 수 있는 취약점인데요

 

그러나 데이터 베이스 전체 데이터를 빼갈 수 있는 강력한 정보노출 취약점입니다만, 이 공격에는 단점이 하나 있습니다.

그것은 바로 지속적으로 sql 쿼리를 전송하여 데이터를 수집해야한다는 단점입니다.

이 웹 해킹 공격을 잘 모르시는 분들은 아마 이렇게 생각하실 겁니다.

 

'무슨 점 때문에 지속적으로 쿼리를 날려야하는 것일까?' 글로 설명드리는 것은 이해가 안될 수 있으니 

웹 해킹 2번 문제를 풀면서 어떤 점이 단점인지 알아보도록 하죠.

 

 

 

웹 해킹 2번 문제에 들어가게 되면, 위와 같은 메세지만 나오게 됩니다.

이전 글인 웹 해킹 1번 문제에서 쿠키가 공격 경로로 사용될 수 있다고 말했었습니다.

이번 문제에서도 쿠키를 사용할 것인데요. 공격 방법은 오늘의 주제와 같이 Blind Sql Injection입니다.

 

 

먼저 일반적인 응답 값을 위와 같습니다. 

어떠한 차이가 있는지 알기 위해 유심히 봐주세요.

 

그리고 쿠키 값 중에 time이라는 값 뒤에 and 1=1을 입력해서 전송해 보았습니다.

그 결과 응답 값은 위와 같습니다. 어떤 점이 바뀌었는지 보이시나요?

 

정답은 주석으로 처리되어 있는 날짜 부분이 변경되었다는 점 입니다.

이러한 결과로 우리는 Sql 쿼리문을 전송해서 결과적으로 데이터 베이스의 정보를 가져올 수 있습니다.

단순히 날짜 값이 바뀐 것으로 어떻게 데이터베이스 전체를 가져올 수 있다는 것 일까요?

 

위의 결과 값은 마지막 time 값에 and 1=2를 입력하여 얻은 값입니다.

두 사진의 차이는 주석 처리된 시간 중 마지막 값이 0이냐, 1이냐의 차이밖에 없는데요.

이 결과로 우리는 서버에게 아래와 같은 질문을 할 수 있습니다. 

 

DB 갯수가 몇개니?, DB의 이름은 무엇이니?, 테이블 명은? 컬럼 갯수는? 컬럼 명은?

 

이러한 것들이 어떻게 가능한걸까요?

SQL 쿼리를 입력하여 DB 갯수가 2개니? 라는 질문에 1 이라는 응답이 온다면 '그렇다' 라는 뜻이니

우리는 이러한 질문들을 계속해서 전송하여 전체 DB 데이터를 알 수 있는 것입니다.

 

너무 글이 길어졌네요. Blind Sql Injection에 대해서는 이것만 기억하세요.

취약점에 노출될 경우 데이터베이스 전체가 노출될 수 있는 심각한 취약점이다.

그러나 지속적으로 SQL쿼리를 요청해야하는 단점이 있다.