본문 바로가기

Wargame/Lord of SQLInjection

Lord of SQLInjection 19번 xavis

 

query에 id='admin'으로 고정되어 있고 코드를 보면 pw를 찾으면 되는 문제인 것 같다.

 

 

length를 이용하여 pw의 길이를 먼저 알아봤다. pw의 길이는 12이다.

라고 생각하고 전에 있던 코드를 돌려봤는데 이상한

 

 

이러한 결과가 나왔다. 혹시 싶어서 쳐봤지만 역시나 아니었고 코드가 문제인가 싶어서 여기저기 바꿔봤지만 절대 나오지 않았다. 그래서 찾아봤더니 역시나 생각 못한 방식이 있었다. 코드만 보고 쉬울 거라 생각했지만 pw는 유니코드로 이루어졌고 한글자당 4byte였다. 그러나 그것도 이것저것 코드를 바꿔봤지만 되지 않아서 아직 모르는 게 많기 때문이라고 생각하고 다른 분의 코드를 참고해보기로 했다.

 

지금 소개할 코드는 https://tutoreducto.tistory.com/60 이 글을 보고 작성한 코드이다.

 

 

 

lpad : 글자 수를 먼저 맞춰주고 모자란 만큼 왼쪽에 특정 문자를 채워 넣는 함수

사용법 : lpad(값, 글자수, 채우는 문자)

bin : 숫자를 2진법 형태로 변환하는 함수

사용법 : bin(숫자)

 

 

답 : pw=우왕굳

 

+ 다른 방법

 

찾아보다가 정말 신기한 injection이자 생각도 못한 union을 이용한 injection을 발견했다.

https://go-top.tistory.com/25

 

 

query : pw=' or (select @a:=pw WHERE id='admin') union select @a%23

 

union sql injection에 대해 아직 잘 모르기 때문에 생각도 못했는데 코드 이해를 먼저 해보려고 노력했다.

@a=pw where id='admin', @a는 id가 admin인 pw와 같다. union을 이용하여 @a을 불러온다.

@는 찾아보니 변수를 사용할 때 쓰는 것이라고 한다.

 

union에 대해 공부할 필요가 있는 것 같다.