-
[Lord of SQLInjection] #15 assassin[+] Security [+]/Lord of SQLInjection 2020. 5. 4. 03:54
15번째 몬스터 어쌔신!
pw는 '가 필터링 되어있어 추가적으로 쿼리를 끊거나 생성하는 것이 안되고,
like연산자를 이용해 레코드를 조회하고 조회된 레코드의 id값을 출력 받아서 해당 레코드가 admin인지 아닌지 알 수 있다.
간단한 부르트포싱 문제다!
(브루트 포싱: 무차별 대입 공격)
여기서 like 연산자를 잠깐 살펴보고 가자.
like 는 기본적으로 = 과 똑같이 동작한다.
하지만!
like 연산자는 특별히 % 나 _ 같은 기호를 사용할 수 있다.
%: 0개 이상의 모든 글자를 대체 가능
_: 1개의 모든 글자를 대체 가능
예를 들어 보자
'admin' like '%' => True
'admin' like 'admi%' => True
'admin' like 'a%n' => True
'admin' like 'abd%' => False
'admin' like 'admin%' => True!
'admin' like '_ _ _ _ _' => True
'admin' like '_ _ _' => False
'admin' like 'a_mi_' => True
'admin' like '_%' => True
자 이제 풀이를 들어가 보면!
우선 비밀번호의 길이를 알아내보자.
Guest의 비밀번호가 8자리 임을 알 수 있다.
그리고 _를 50개 입력해도 admin의 비밀번호를 찾을 수 없다.
아마 Guest와 마찬가지로 admin의 비밀번호도 8자리 일 것이다. 아마도 그렇다.
ㅇㅋ!!!
이제 비밀번호를 알아내보자!
이렇게 코드를 작성해 보았는데 픽! 하고
클리어 해버렸다.
??
admin의 첫번째 비밀번호는 9다
그리고 guest의 첫번째 비밀번호 또한 9라서
if "Hello admin' in bod 로 캐치를 못하다.
if "Hello " in bod로 코드를 바꾸었다.
그러니
guest의 비밀번호가 앞부분에 채워지며 비밀번호가 이어져 나가는데 중간에 픽! 하고 클리어 됬다.
아마 guest비밀번호와 admin비밀번호의 앞부분은 동일하고 뒷부분에 차이가 있는데,
'%' 때문에 admin 비밀번호의 일부분 만으로도 풀 수 있었는듯 하다!
여튼!
어쌔신 처치!1
'[+] Security [+] > Lord of SQLInjection' 카테고리의 다른 글
[Lord of SQLInjection] #17 zombie_assassin (0) 2020.05.04 [Lord of SQLInjection] #16 succubus (0) 2020.05.04 [Lord of SQLInjection] #14 giant (0) 2020.05.04 [Lord of SQLInjection] #13 bugbear (0) 2020.05.04 [Lord of SQLInjection] #12 darkknight (0) 2020.05.03