Lord Of SQL injection 15단계-assassin
LOS 포스팅에 앞서 내용이 틀릴 수도 있으며, 해당 부분 지적은 감사히 받겠습니다.
15단계 소스코드이다.
이번엔 pw 뒤에 등호가 아닌 like 로 쿼리가 이루어져 있다.
id 가 admin인 pw값을 입력하면 문제가 해결된다.
하지만 like는 =와 달리 pw의 모든값을 입력할 필요가 없다.
LIKE 응용(대소문자 구분안함)
1. a% //a로 시작하는 문자열 검색 ex) asd
2. %a% //a가 포함되어있는 문자열 검색 ex) sad
3. %a //a로 끝나는 문자열 검색 ex) fgdfga
4. a_ //a로 시작하며 _갯수만큼의 문자열 검색 ex) a4
5. a-c //a와c 사이에 한글자가 들어가있는 문자열 검색 ex) agc
6. ^a //첫번째 글자가 a가 아닌 문자열 검색 ex) bac
7. [] //지정된 범위[a-f] , 집합[abc]에 있는 문자열 검색 ex) [j-l]orea
8.[^] //지정된 범위와 집합에 있지않은 문자열 검색 ex)[^a-c]name abc가 처음에 오지않는 ?name을 검색
만약 특수문자가 있는지 찾고싶다면
1. like %@___ ESCAPE '@' // 조건뒤에 escape '@' 를 추가해주면 조건에서 @뒤에오는 문자는 기능을 상실하고 문 자로 인식된다.
admin 에만 해당하는 pw의 특징을 찾아 맞추어 넣어주기만 하면된다.
수동으로 찾은결과
0~9, a~z, A~Z 모두 입력 해봤지만 첫번째 값이 9일때만 Hello guest가 나왔다.
이를통해 유추할 수 있는 건 admin 과 guest의 비밀번호 첫자리가 9이며 guest가 우선순위임을 알 수 있다.
바로 인젝터를 만들어서 공격해보겠다. 기존 수동적인 방법을 더 자동화 시켰다.
생각보다 답이 금방나왔다.
guest 와 admin 의 비밀번호가 앞자리가 90으로 두번째 자리까지 같았지만 3번째 자리에서 차이를 보였다.
사실 이 방법은 정답일 때 사이트에서 어떤 문자열이 나오는지 안다는 전제가 있어야 가능한 공격이기에 실전에서는 어떻게 해야할지 더 생각해봐야겠다.
문제 해결!!!
느낀점
1. 처음에 ?% 다 대입해보았는데 guest 하나밖에 나오지 않아 당황하여 조금오래 방황했고, 원인을 빨리 추측해내지 못
2. 전보다 인젝터를 다루는데 능숙해진 것 같아 뿌듯하다.
3. 그리고 인젝터를 돌리다가 다시 웹페이지로 돌아왔는데 정답을 입력한적 없는 assassin이 풀려있어서 조금 당황했다.
내가 작성한 코드가 실행되다가 정답인 값을 입력해서 일어난 결과 같은데 기억이 안난다... 조금더 봐야겠다.