SQL injection/lord of SQL

Lord Of SQL injection 39단계-banshee

ys.k 2022. 2. 14. 02:13

LOS 포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.

39단계 소스코드이다.

이제는 그냥 mysql서버가 아닌 sqlite에서 푸는 게 기본이다.

아마 mysql과는 다른 문법을 익히라는 의도 같다.

pw에서는 sqlite, member, _를 대소문자 구분 없이 필터링 처리했다.

sqlite에서 저 단어들이 어떻게 사용되는지 모르겠지만, 일단 이번 문제를 해결하는 데는 필요 없다.

pw파라미터에 인증 우회 구문을 넣어본다.

인증 우회에 성공했다.

blind sql을 사용할 수 있게 되었다.

하지만 sqlite문법에 맞지 않으면 아무런 소스코드를 출력하지 않는다.

바로 pw의 길이를 추출한다.

여러 번 시도를 했지만 편의상 첨부 자료는 하나만 올리겠다.

pw의 길이는 8이다.

이제 이전 문제들에서 사용했던 방식대로만 하면 된다.

하지만 mysql과는 달리 sqlite에서는 ascii함수가 없다.

chr(), ord(), hex(), unicode()는 사용이 가능하다.

이번 문제에서는 unicode() 함수를 사용하는 게 적합하다.

정상적으로 작동한다.

인젝터를 수정하여 비밀번호를 추출하자.

0313091b

(유니코드의 범위는 1,114,111로 매우 크지만 이번 문제는 어차피 아스키 범위 내의 문자만 다루기에 33~127 까지만 주었다.)

문제 해결

시행착오

1. sqlite에서는 ascii() 함수가 없으니 ord(), hex(), unicode(), chr() 등을 사용한다.

2. sqlite는 #주석은 사용할 수 없고 --+-로 사용해야 한다.

3. 첫 인젝터 시도 시엔 pw값이 guest91b로 나왔다. 하지만 정답이 아니었고 id='admin' 조건을 추가했더니 admin의 pw값이 나왔다. 필요한 값을 잘 추출하자...