8월 11일 저녁부터 지금 이 글을 작성하는 8월 12일 새벽까지 webhacking.kr이 열리지 않는 관계로 풀만한 워게임을 찾다가 발견한 LOS.. 해커스쿨에서 BOF와 비슷한 시리즈로 만든 웹해킹, 특히 SQL Injection에 대한 워게임이 있는 사이트다.
https://los.rubiya.kr/gate.php
gremlin 문제의 php 코드다. php 코드에서는 우리가 GET 방식으로 전달한 id값과 pw값이 어떻게 처리되는지 보여준다. 대충 한 번 훑어보면 $_GET['id']와 $_GET['pw']에서 특정 문자의 필터링을 거쳐서 만약 있다면! exit하게 한다.
만약 이 필터링을 넘긴다면 DB에 id와 pw를 만족하는 계정의 id를 요청한다. DB로부터 id가 제대로 왔을때 이 단계는 해결이 되는 것으로 보인다. id 값만 존재하면 된다는 것을 명심해야하나? 암튼 명심하고 넘어가자!
어! 그럼 id와 pw 값은 어떻게 넣을까? 위 php 파일을 보면 알 수 있듯이 GET방식으로 주면 된다. 만약 id와 pw 모두 1이라는 값을 줄려고 할 때 아래의 모습일 것이다.
위와 같이 작성하고 엔터치면!?
밑에 이렇게 php문 내에서 작성되는 query문의 모습을 보여준다. id는 '1'인 계정을 노려보자. 내가 노린 쿼리는 다음과 같다.
select id from prob_gremlin where id='1' and pw='1'or '1'='1'
위와 같이 mysql에 명령하면 id는 '1'인 모든 계정을 요청한다. 그 이유는 pw에 있다. pw는 '1'이거나 '1'='1', 즉 무조건 참임을 의미한다.
굳이 id와 pw까지 맞추지 않아도 '1'이라는 id를 가진 계정만 존재한다면 이는 성공이다..
위처럼 입력하고 엔터를 땅! 누르면!?