문제를 들어가보면 달랑 이거밖에 나온다....ㅎ
그래서 바로 view-source를 클릭해서 소스를 확인해봤다.
소스코드를 확인해보면 다음과 같다.
if($_GET['id'] == "admin"){
solve(26);
}
이 부분을 통해서 id 값이 admin이면 문제가 해결되는 것을 볼 수 있었다.
이 문제를 해결하기 위해 그 윗부분 코드를 살펴봤다.
if(preg_match("/admin/", $_GET['id'])) { echo"no!"; exit(); }
$_GET['id'] = urldecode($_GET['id']);
해당 부분을 분석하면 문제를 해결할 수 있을 것 같아 살펴보았다.
preg_match() 함수
- 정의 : 해당 문자열에서 전달받은 정규 표현식과 일치하는 패턴을 검색
- 문법 : preg_match($pattern, $subject [,$matches]);
- 함수 문법 구성
: 첫 번째 인수로 전달받은 정규 표현식에 해당하는 패턴을 두 번째 인수로 전달받은 문자열에서 검색한다. 이렇게 검색된 결과는 배열로 반환되며, 세 번째 인수로 반환값이 저장될 배열을 직접 전달할 수도 있다.
[참고자료] http://www.tcpschool.com/php/php_regularExpression_concept
GET 방식
- 정의 : 웹페이지에서 변수를 전달하는 방식
- 특징 : GET 방식은 URL을 통해 변수를 전달한다.
- GET 변수는 $_GET[변수이름]으로 받아온다.
[참고자료] https://code1018.tistory.com/88
이 코드를 통해 preg_match 함수로 admin을 필터링하고 있는 모습을 볼 수 있다.
이후 GET 변수인 id 변수 값을 urldecode해서 admin과 비교하고 있다.
따라서 admin 값을 url encode를 한 후, id에 전달하면 된다.
위 URL encode 표를 보고 admin을 인코딩한 값인 %61%64%6D%69%6E 값을 넣어주었다.
하지만 결과는 no가 나왔다.
다시한번 알아보니 url을 통해 값을 넘길 때 자동으로 decoding 하는 것 같다.
따라서 인코딩을 총 두번 해주어야 문제가 해결될 것 같다.
https://meyerweb.com/eric/tools/dencoder/
위 사이트에서 %61%64%6D%69%6E 값에 대한 인코딩을 한번 더 해주었더니
%2561%2564%256D%2569%256E 값이 나왔고, 이를 id값에 넣어보니
문제 해결!!
'CTF' 카테고리의 다른 글
[Dreamhack] devtools-sources (0) | 2023.04.01 |
---|---|
[Dreamhack] Carve Party (0) | 2023.03.31 |
[Webhacking.kr] old-20 write-up (0) | 2023.03.29 |
[Webhacking.kr] old-16 write-up (0) | 2023.03.25 |
[Webhacking.kr] old-01 write-up (0) | 2023.03.25 |