※ 작년 말 ~ 올해 초에 작성한 라이트업으로 사이트 개편 전의 문제가 섞여있습니다. ※
웹 해킹 26번을 클릭하면 다음과 같은 화면이 뜬다.
if(preg_match("/admin/",$_GET['id'])) { echo"no!"; exit(); }
$_GET['id'] = urldecode($_GET['id']);
if($_GET['id'] == "admin"){
solve(26);
}
View-source를 클릭하여 보면 다음과 같은 코드가 보인다. 코드를 해석해보면, id가 admin일 때 ‘no!’ 를 띄우고, id를 decode 했을 때 admin이 나오면 문제가 풀린다.
일단 ‘?id=admin’으로 id에 admin이라는 값을 보내면 코드에 나온 것처럼 다음과 같이 ‘no!’ 라고 뜬다.
아스키 코드 표이다. 표를 참고해서 admin을 아스키 값으로 바꾼 후 입력해보자.
’?id=%61%64%6D%69%6E’ 라고 입력한 후 엔터를 누르면 값이 자동으로 admin으로 바뀌어서 전송이 된다. 구글링을 해보니 아래와 같은 이유 때문이었다.
웹 서버와 브라우저 사이에서 데이터 교환 시 브라우저는 폼에서 입력 받은 데이터를 자동으로
인코딩한 값을 PHP서버로 보내고 PHP는 받은 인코딩 된 값을 자동으로 디코딩한다.
인코딩이 한 번 자동으로 진행되므로 admin을 인코딩한 값을 한번 더 인코딩해준다.
한번 더 인코딩한 값을 입력해주면 문제가 풀린다.
'CTF > 웹 해킹' 카테고리의 다른 글
webhacking.kr challenge 32 (0) | 2020.06.27 |
---|---|
webhacking.kr challenge 27 (0) | 2020.06.27 |
webhacking.kr challenge 25 (0) | 2020.06.27 |
webhacking.kr challenge 24 (0) | 2020.06.27 |
webhacking.kr challenge 23 (0) | 2020.06.27 |