무기는 끈기

[Web Hacking / 웹 해킹] SQL Injection 식별/인증 동시 상태에서 ID만 알고 있는 케이스 본문

Hacking/Web Hacking

[Web Hacking / 웹 해킹] SQL Injection 식별/인증 동시 상태에서 ID만 알고 있는 케이스

김유비야 2023. 12. 7. 11:23

웹 해킹 분야엔 다양한 공격 기법이 있다.

세계에서 늘(거의) 1위를 차지하는 공격 기법은 바로 SQL Injection 이다.
이유는 대부분의 곳이 DB를 사용하기도 하고, 가장 쉽게 치명상을 입힐 수 있는 취약점이기 때문이다.

 

출처: AhnLab

식별/인증은 동시로 관리하기도 하고, 분리해서 관리되기도 한다.
(식별/인증 관련 내용 링크 참고: https://yubi323.tistory.com/70)

이번 글에선 식별/인증 동시 쿼리문에서 인증 우회를 하는 경우 중 ID만 알고 있는 케이스에 대해 간단하게 살펴볼 것이다.
(추후 다양한 쿼리문 주입해보는 게시글 따로 업로드 예정)

 

인증 우회(Authentication Bypass)

- 식별/인증 동시 케이스
SELECT * FROM member WHERE id='___' AND pass='___'

해당 케이스는 로그인 하는 경우의 모습은 이런 쿼리문으로 구성되어 있다.

아이디를 해당 빈칸에 넣고, 패스워드를 해당 빈칸에 넣는 방식으로 해당 정보들이 모두 일치해야(DB에 존재하는 것이 확인되어야) 로그인이 성공하는 방식이다.

로그인을 우회하는 데에는 다양한 케이스가 있다.

추상적으로 생각해보면 아이디만 아는 경우 / 비밀번호만 아는 경우 / 둘 다 모르는 경우 / 전체 정보를 출력하고 싶은 경우 등이 있을 것이다.

먼저 아이디만 아는 케이스에서 어떻게 인증 우회를 할 수 있을지 생각해보자.

 

- ID만 알고 있는 case

ID: doldol
PW: dol1234
인 경우, 나는 아이디만 알고 있다고 가정해보자.

ID 입력하는 곳에
doldol' #
을 입력하면 로그인이 된다.
PASS는 아무거나 입력한다.

-> 비밀번호를 입력하는 부분이 하나의 쿼리로 이루어져 있어서, #를 사용해서 아이디 뒷부분을 주석처리 해버리면 doldol로 로그인이 되어버리기 때문이다.
-> 작은 따옴표 '' 를 맞춰줘야 문법 오류가 나지 않기에 doldol' 을 입력해주었다.

적용했을 때의 쿼리 모습
: 빨간 부분이 입력한 내용이다.
SELECT * FROM member WHERE id='doldol' # AND pass='asdfasdf(아무거나 친것)'

 

추후 다른 게시글로 다른 주입 루트도 다양하게 알아보겠다.