728x90

los 3번

쿼리랑 필터링 부분을 보면 no라는 변수값을 받아온다. 문제해결 조건은 id 라는 변수의 값을 admin으로 만들어야 한다.

그리고 필터링을 보면, prob, _, ., (), ', ", `를 필터링 한다. 즉, 쿼리를 정상적으로 작성할 수 없다. 

왜냐? 

예를 들어서 id라는 변수의 값을 admin으로 설정하고 싶으면, id='admin' 이런식으로 작성해야 하지만, '가 필터링되므로 변수값을 설정할 수 없다.

 

이 문제에서 이용할 함수는, char이라는 함수이다.

예를 들어서 char(99, 98)이렇게 작성하면 '기호가 포함되면서, 아스키값 99번과 98번의 값이 '기호로 감싸지면서 들어간다.

 

추가적으로, preg_match함수를 알아보자.

https://www.w3schools.com/php/func_regex_preg_match.asp

 

PHP preg_match() Function

PHP preg_match() Function ❮ PHP RegExp Reference Example Use a regular expression to do a case-insensitive search for "w3schools" in a string: Try it Yourself

www.w3schools.com

국내에서 쓴 글들은 대부분 3개의 인자로 preg_match를 설명하는데, 위 링크에 들어가보면 필수인자와 선택인자가 자세해게 구분되있어서, 위 글을 꼭 읽어보길 바란다.

 

preg_match함수를 해석해보면, no라는 변수의 값에 필터링을 적용시키고, 우린 no값부터 쿼리를 넣기 때문에 우리가 사용하는 쿼리가 전체필터링된다고 보면 될것같다.

일단 초기의 id는 guest이고, 그에 해당하는 no의 값은 뭔지 모른다. 또한, 우리가 들어가야 하는 id의 값은 admin이고, guest의 no의 값과는 달라야 id를 새로 지정하는 쿼리가 인식될 수 있다. 

쿼리를 작성해보면, 

[?no=1325 or id=char(97,100,109,105,110)]

char의 값은 admin의 아스키값을 넣은것이다.

los 3번 답

728x90

'web > LOS' 카테고리의 다른 글

LOS 6번  (0) 2020.11.11
LOS 5번  (0) 2020.11.11
LOS 4번  (0) 2020.07.19
LOS 2번  (0) 2020.07.19
LOS 1번  (0) 2020.07.19

+ Recent posts