본문 바로가기

보안공부/Lord of SQLInjection 풀이

Lord of SQLInjection Goblin 풀이

코드를 보니 이번에는 id가 하드코딩되어있고 우리가 간섭할 수 있는 부분은 no 부분인것 같다.

 

no에 1이라는 값이 들어가면 guest 사용자를 환영해준다.

 

하지만 여기에 1이 아닌 다른값이 나온다면 실행결과가 나오지 않는다.

-> 여기서 우리는 잘못된 SQL 구문이라는것을 추측할 수 있게 된다.

 

얼추 감을 잡았겠지만 OR을 이용하여 잘못 실행된 SQL 구문을 대체할것이다.

 

no에 2 or id='admin'을 시도하였으나 따옴표가 필터링되어 exit되었다.

 

여기서 작은 따옴표(')를 억음 부호(`)로 대체해 보기도 하고..

 

없애보기도 하는등의 여러가지 Testcase로 시도하였으나 실패하였다.

 

나는 여기서 문득 SQL에서 16진수(Hex)를 문자열(String)으로 인식한다는것이 떠올랐다.

그래도 바로 admin을 16진수로 변환해보았다.

admin -> 61646d696e -> 0x61646d696e

 

위 과정을 통해 우리는 admin을 16진수로 변환하면 0x61646d696e라는 사실을 알게 되었다.

그렇게 위 값을 id로 전달해주면 admin으로 인식하며 문제가 풀리게 된다.