본문 바로가기

Los

[LOS] 3번 goblin 이번 문제는 goblin이다. GET 방식으로 no를 받아오는데 $result['id']의 값이 admin이어야 문제가 풀린다. 쿼리문에서 id='guest'가 거짓이 될 수 있도록 해주어야 한다. 이번 문제에서는 싱글 쿼터(')가 필터링된다. 따라서 no를 이용해서 풀어야 한다. 먼저 주소창에 ?no=1을 입력해주어 guest의 no가 몇 번인지 알아보았다. no에 0을 입력했을 때 아무것도 뜨지 않았다. 0이 아니라는 사실을 알 수 있다. no에 1을 넣어주었더니 Hello guest 라는 문구가 떴다. guest의 no는 1이란 사실을 알게 되었다. 이제 no에 1을 제외한 숫자를 넣어주고 admin의 no를 입력해 줄것이다. guest의 no가 1이었으니까 2부터 넣어주었다. 주소창에 ?no=0 .. 더보기
[LOS] 2번 cobolt 이번에는 cobolt 사진을 클릭하면 코드가 나온다. 2번 문제는 GET 방식으로 받아온 id와 pw가 일치할 때의 테이블 칼럼 id에 있는 값이 admin이면 문제가 해결된다. 이번에는 괄호가 필터링되기 때문에 pw 뒤에 뭘 입력할 수는 없다. 그래서 나는 ?id=admin' or id='admin&pw= 라고 입력해주었다. 이렇게 입력해주면 쿼리문은 다음과 같이 바뀐다. select id from prob_cobolt where (id='admin') or (id='admin' and pw=md5('')) 쿼리문에서 오른쪽 조건이 거짓이 되고 왼쪽 조건이 id='admin'일 경우를 찾아내기 때문에 $result['id']에 'admin이 존재한다. 뒤에 pw를 주석처리해서 문제를 해결할 수도 있다... 더보기
[LOS] 1번 gremlin 이 캐릭터의 사진을 누르면 아래와 같은 코드가 나온다. 우선 GET 방식으로 id와 pw를 받아온다. 쿼리문을 보면 받아온 id와 pw가 일치할 때의 칼럼 id에 있는 값을 찾으라는 명령문이다. 만약 칼럼 id에 있는 어떤 값이든 찾게 된다면 문제는 해결된다. GET 방식으로 받아온 id와 pw는 필터링된다. 하지만 지금은 크게 중요하지 않다. 주소창에 ?id=1&pw=1' or '1=1 라고 입력해주면 쿼리문은 다음과 같이 바뀌면서 문제가 풀린다. mysql에서 and 연산자가 or 연산자보다 우선순위가 더 높기 때문에 select id from prob_gremlin where (id='1' and pw='1') or ('1=1')위와 같이 된다. 왼쪽 조건이 거짓이 되고 오른쪽 조건이 참이 되므로 .. 더보기