PortSwigger

[PortSwigger] SQL injection vulnerability allowing login bypass

Challenge programmers 2024. 2. 11. 00:21

목표


로그인 기능에 포함된 SQL Injection을 이용하여

관리자 계정(administrator)으로 로그인

 

분석


 

메인 페이지

 

메인화면 우측 상단에 

메인 화면으로 가는 기능과

로그인 기능이 존재

 

 

로그인 화면

 

 

ID로는 Username을 사용하고

Password를 입력하여 로그인

 

 

로그인 실패 화면

 

잘못된 Username 또는 Password 입력 시

로그인 불가 메시지 출력

 

과정


 

SQL Injection

 

관리자 계정(administrator)와 

로그인을 위한 SQL Injection 쿼리(' or 1=1--) 입력

 

[ 'or 1=1-- ]

Username 뒤에 항상 참인 값(1=1)을 지정하고

주석처리(--)을 통해 Password의 SQL 처리를 제외

 

 

SQL Injection

 

SQL Injection으로 인해

관리자 계정으로 로그인 성공

 

 

취약점


해당 웹 페이지에는 SQL Injection 취약점이 존재하며

로그인 시 입력갑에 대한 필터링 검증이 부재하여

로그인 기능 이용/사용 시 SQL 쿼리 삽입 및 실행이 가능하며

이로 인해 공격자는 관리자의 인증정보 획득 및 계정 탈취 가능

 

 

대응 방법


SQL Injetcion 취약점은

외부 입력이나 외부 변수로부터 받은 값이 직접 SQL 함수의 인자로 전달되거나,

문자열 복사를 통하여 전달되는 것은 위험하므로 인자화된 질의문을 사용해야 함

 

소스코드에 SQL 쿼리를 입력 값으로 받는 함수나 코드를 사용할 경우,

임의의 SQL 쿼리 입력에 대한 검증 로직을 구현하여

서버에 검증되지 않는 SQL 쿼리 요청 시

에러 페이지가 아닌 정상 페이지가 반환되도록 필터링 처리하고 

웹 방화벽에 SQL 인젝션 관련 룰셋을 적용하여 SQL 인젝션 공격을 차단 

 

아래와 같은 특수문자를 사용자 입력 값으로 지정 금지

(사용 DB에 따라 변동 가능)

 

문자 설명
' 문자 데이터 구분기호
; 쿼리 구분 기호
--, # 해당 라인 주석 구분 기호
/* */ *와 */ 사이 구문 주석

 

※ 검증 로직 구현 시 웹 서비스에서 사용하고 있는 명령어 및 특수문자가

필터링 되어 장애가 발생할 수 있음