[웹해킹] SQL 인젝션 공격 실습 - 블라인드 SQL 인젝션
- IT/웹해킹
- 2020. 12. 16.
이번에는 블라인드 SQL 인젝션에 대해서 알아보자. DVWA의 블라인드 SQL 인젝션 페이지에 들어가서 1이라는 id를 입력해보자.
사용자 1에 대한 정보가 나오는 대신에 이 페이지에는 ID 1인 사용자가 존재한다는 것만 알려준다.
이번에는 지난번에 SQL 인젝션 공격을 할 때 했던 것 처럼 한 번 작은 따옴표를 입력해본다.
특별한 에러가 발생하는 대신 사용자가 존재하지 않는다는 메시지를 보여준다. 에러가 발생하지 않기 때문에 이 폼 뒤에 SQL 쿼리문이 사용되고 있는지, 또 우리가 조작할 수 있는지 쉽게 알기 어렵다. 만약 조작한다고 하더라도 데이터의 내용을 출력하지 않기 때문에 쉽게 정보를 빼내기도 어렵다.
이번에는 1'AND 1=1# 을 입력해본다.
ID가 존재한다고 나온다.
1' AND 1=2# 을 입력해본다.
이번에는 사용자가 존재하지 않는다고 나온다.
이 사실을 통해 1=1이나 1=2와 같은 조건이 실행되고 있다는 것을 알 수 있다. 만약 백그라운드에서 sql 쿼리문이 실행되고 있다고 한다면 형태는 아래 그림과 같을 것이다.
AND 1=1과 같은 조건을 주게 되면 전체가 참이 되므로 사용자가 있다고 나오고 AND 1=2와 같이 입력을 하면 조건문이 거짓이 되어 사용자가 없다고 나온다. 이렇게 어떤 폼 뒤에 AND 같은 연산이 실행되고 있다는 것은 SQL 쿼리문이 뒤에 있다는 것을 알려주는 중요한 힌트가 된다. 이걸로 무엇을 할 수 있냐하면 일반 sql 인젝션 공격 처럼 비록 결과를 직접적으로 얻어낼 수는 없지만 'admin이라는 사용자가 존재하느냐' 라는 식으로 어떤 명제를 제시하고 뒤에 AND 1=1이나 AND 1=2와 같이 다르게 조건을 줌으로써 그 명제가 참인지, 거짓인지는 알 수 있다. 이를 이용하면 시간은 비록 오래 걸리겠지만 원하는 정보가 있는지 없는지 알아 낼 수 있는 것이다.
이와 같이 결과를 직접적으로는 알 수 없어도 참, 거짓의 차이를 보고 어떤 정보를 알아 내는 기법을 블라인드 인젝션 공격이라고 한다. 한 가지 같이 알아두면 좋은 것은 참, 거짓 조건에 따라 dvwa 처럼 응답 메시지가 달라지는 경우도 있지만 어떨 때에는 표시되는 메시지가 완전히 같은 경우도 있다. 이럴 때에는 응답시간에 차이를 두는 것을 시도해 볼 수 있다.
예를 들면, 참일 경우 sleep 이나 wait for 같은 키워드를 이용하여 응답을 몇 초정도 늦게 오게 만드는 것이다. 응답 시간을 확인하기 위해 브라우저에서 F12를 누른다. F12를 누르면 developer 창이 뜨는데 여기서 network탭을 띄워 둔다. 그러고 나서 user ID에
1' AND sleep(5)#을 입력한다.
만약 존재하지 않는 사용자의 ID 6을 넣고 6'AND sleep(5)# 구문을 입력했을 때 어떻게 되는지 확인해보자.
1730ms로 응답이 바로 되었다. 이것을 통해 ID가 1이라는 사용자는 존재하고 6이라는 사용자는 존재하지 않는다는 것을 알 수 있다.
이러한 방식으로 블라인드 SQL 인젝션 공격을 통해 원하는 정보를 알아 낼 수 있다. 방금 우리는 손수 직접 공격을 했지만 사실 많은 정보를 찾아 내기에는 일일이 쿼리문을 만들어야 하고 또 어떤 경우에는 sleep 함수를 써야 하기 때문에 시간이 많이 걸린다. 따라서 이럴 때에는 프로그램을 사용하는 것이 유용하다.
다음 시간에는 SQL map이라는 자동화 프로그램을 이용하여 블라인드 sql 인젝션 공격을 실습해보겠다.
'IT > 웹해킹' 카테고리의 다른 글
[웹해킹] SQL 인젝션 공격 실습 - Medium 단계 (0) | 2020.12.17 |
---|---|
[웹해킹] SQL 인젝션 공격 실습 - SQL MAP (0) | 2020.12.16 |
[웹해킹] SQL 인젝션 공격 실습 - UNION 공격 (0) | 2020.12.14 |
[웹해킹] SQL 인젝션 공격 실습 - 칼럼 갯수 알아내기 (0) | 2020.12.14 |
[웹해킹] SQL 인젝션 공격 실습 - WHERE 구문 우회 (0) | 2020.12.14 |