일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- los succubus
- lord of sql injcetion
- los 9번
- los 17번
- los goblin
- los 14번
- los 10번
- los 3번
- los darkknight
- los orc
- los 18번
- los 1번
- los 12번
- los 8번
- los 16번
- los_troll
- los nightmare
- los skeleton
- los_15번
- los bugbear
- los gremlin
- los dragon
- los 20번
- los zombie_assassin
- lord of sql injection
- los_vampire
- los 4번
- los 13번
- los_assassin
- los_giant
- Today
- Total
paperHun
LOS 1번 본문
los 1번을 풀어보겠다.
먼저 코드를 보자면, 가장 먼저 위에 있는 query문이 눈에 띈다. query 문이란 데이터 베이스에 있는 정보를 요청하는 것인데, select id from prob_gremlin에서 id는 쿼리문이 요청하는 정보이고, prob_gremlin은 id가 담겨있는 데이터 베이스를 의미한다. 뒤에 있는 where id='' and pw=''는 쿼리문이 가져오려는 id의 조건문이다.
이제 query문이 무엇인지 알았으니 los_gremlin의 해결조건을 보자, solve("gremlin")이라는 함수가 보이니 result['id']가 참이되면 해결 되는거 같다.
보통 id값에 admin이 있기 때문에 id='admin'을 해주면 풀리긴 한다. 여기서 #은 뒤에 있는 ' and pw=''를 주석처리해주는 문자이다. 만약 주석 처리를 하여주지 않는다면, id가 'admin'이면서 pw가 공백인 id 값을 찾을텐데, 보통 pw가 공백이진 않을테니 pro_gremlin에서 어떠한 id 값도 찾아내질 못해 풀어지지 않을꺼기 때문에 그런 불상사를 막기 위해 주석 처리를 하여준다. 이렇게 되면 id='admin'인 id값을 찾아 준다.

이렇게 admin을 찾아 주어도 되지만prob_gremlin안에 어떤 id 값이 있는지를 모르니 id가 admin인거를 찾지말고, 원래 조건문이 참이면 된다는것을 이용하여 보자.
위에서는 id값이 admin인 친구를 데려와서 참으로 만들어주었다면 여기서는 where문을 그냥 참으로 만들어주었다. 이렇게 되면 쿼리문이 참이 되면서 gremlin이 풀리게 된다.