Wargame/Lord of SQL Injection

<Lord of SQL Injection> goblin

지우친구 웅이 2021. 11. 11. 00:14

goblin

이 문제는 작은따옴표, 큰 따옴표를 필터링하여 사용할 수 없다.

그리고 'id'의 값이 'admin'이면 문제가 풀리는 것 같다.

 

우선, 'no'의 값으로 1을 주면

guest로 로그인이 되었다.

 

이번엔 'no'의 값으로 0을 주면

아무것도 출력하지 않았다.

'no'의 값이 1이면 guest로 로그인하기 때문에 'no'의 값에 0을 줘야 할 것 같다.

 

이제 or문을 사용하여 앞의 구문은 거짓으로 뒤의 구문은 참으로 하여 우회하면 될 것 같다.

'id'의 값이 'admin'이 되어야 하는데, 이 문제에서는 따옴표를 필터링하기 때문에 사용할 수 없다.

그렇다고 따옴표 없이 admin만 전달하면 문자열 인식을 하지 못한다.

이렇게 싱글쿼터(')가 막혀서 문자열을 입력할 수 없을 때는 0b, 0x를 사용해서 2진법과 16진법으로 치환함으로써 대신할 수 있다. 즉, 'admin'을 16진수로 변환하면 된다.

 

admin을 16진수로 변환하면

'61646d696e'라는 값이 나오게 된다.

이는 16진수이므로 앞에 0x를 붙여줘야 한다.

 

이제 ?no=0 or id=0x61646d696e 를 입력하면

문제를 해결할 수 있다.