[LOS] 5번 wolfman 풀이

2019. 7. 29. 20:01문제풀이/los.rubiya.kr

pw의 금지 문자열은 prob _ . () 그리고 공백!

Goblin 문제와 매우 유사하다. Goblin 문제와의 차이점은 금지 문자열과 '의 필요 유무인데

Goblin의 경우는

  if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~"); 
  $query = "select id from prob_goblin where id='guest' and no={$_GET[no]}"; 

라고 적혀있던게 wolfman의 경우

  if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~"); 
  $query = "select id from prob_wolfman where id='guest' and pw='{$_GET[pw]}'"; 

이렇게 적혀있다는거 정도?

 

wolfman은 공백을 쓸 수 없는대신 '을 쓸 수 있다. 아니 써야한다. pw가 쿼터로 둘러쌓여있으니까.

먼저 쿼터를 닫아주고, Goblin과 같이 0 and 0 or 1 꼴로 만들어주면 된다.

하지만 우린 원래 or 뒤에 띄어쓰기를 해주었는데(꼭 해야만 한다) 이번엔 띄어쓰기가 필터링 되어있다.

 

문제를 풀 수 있는 방법이 여러가지 있는데, 지금 생각나는것들을 정리하면

  1. or 대신에 || 이용하기
  2. 괄호 이용
  3. 띄어쓰기 대신에 다른 문자 이용하기

가 있다.

 

1번의 경우, 말 그대로 or 대신에 ||를 쓰면 되고 (||는 or의 논리연산자)

2번은 or(id)='admin' 이런식으로 이용하면 되고

3번의 경우는 아래와 같이 아스키코드 표를 보면

%00~%1f랑 %7f은 제어문자라고 해서, 출력할 수 없는 문자들이다.

이 중 띄어쓰기를 우회하는데 사용되는 문자는

%09 :Horizontal Tab
%0a :Line Feed
%0b :Vertical Tab
%0c :Form Feed
%0d :Carriage Return

이 있고, 이 외에도 여러줄 주석인 /**/를 이용할 수도 있다.

'문제풀이 > los.rubiya.kr' 카테고리의 다른 글

[LOS] 7번 orge 문제 풀이  (0) 2019.07.29
[LOS] 6번 darkelf 풀이  (0) 2019.07.29
[LOS] 4번 orc 풀이  (0) 2019.07.29
[LOS] 3번 goblin 풀이  (0) 2019.07.29
[LOS] 2번 cobolt 풀이  (0) 2019.07.29