본문 바로가기
IT Security/Lord of SQL Injection

Lord of SQL Injection(LOS) goblin 문제풀이 정리

by 바닐라이코노미 2024. 11. 10.
반응형

Lord of SQL Injection goblin 문제 풀이 후 정리

 

문제를 보면 쿼리에 id값 까지는 고정이 되어있고, 뒤에 no 칼럼뒤를 통해 결과를 뽑아야 한다

 

 

no=1 값을 넣으니 and 조건이 성립되어 Hello guest가 출력됨을 확인

 

 

 

||(OR)조건을 통해 앞을 거짓을 만들고 뒤를 참으로 만들어 결과가 출력 될 수 있도록 수정

→ no=0||id=admin 이렇게 입력시에는 아무것도 출력 되지 않음 (admin을 문자로 만들 ' ' 사용이 불가함)

 

admin을 16진수로 바꿔 삽입 하면 결과 확인 가능

admin →  0x61645D696E (16진수)

 

문제는 비교적 간단하게 풀렸지만

 

여기서 궁금한 부분이 생겼다

id=admin은 안되는데 id= 0x61645D696E는 되는이유

궁금한 부분은 ' '로 감싸지지 않은 16진수도 문자열로 인식이 되서 정상적으로 쿼리가 수행되는 부분

 

id=admin과의 차이점

일반적으로 SQL 구문에서는 id=admin이라고 작성하면 admin을 컬럼명이나 키워드로 인식하려 하기 때문에 구문 오류가 발생할 수 있다.

 

따라서 id='admin'처럼 문자열을 감싸야 하지만, 16진수 리터럴은 따옴표 없이도 MySQL에서 문자열처럼 취급되기 때문에 id=0x61646D696E라는 표현이 가능

 

MySQL에서 16진수 리터럴이 문자열로 자동 변환되는 동작 방식은 MySQL 공식 문서의 **"Numeric Literals"**와 "String Literals" 섹션에서 확인

  1. MySQL 8.0 Reference Manual - Literal Values (Constants)
  2. MySQL 8.0 Reference Manual - Hexadecimal Literals

 

 

 

 

 

 

 

 

 

반응형