whois
Webhacking.kr 26번 본문
[그림 1] 26번 문제
26번 문제에 접근하게 되면 그림 1과 같이 index.phps에 링크가 걸려 있는 것을 볼 수 있다.
[그림 2] 소스 코드
index.phps 소스 코드의 흐름도를 보겠다.
① eregi 함수를 통해 id 변수 값에 admin이라는 문자열이 있으면 'no!'라는 문구를 출력 후 종료시킨다.
② id 변수에 있는 값을 디코딩한다.
③ id 변수 값이 admin이면 문제를 푼다.
따라서, id 변수에 admin 값을 잘 우회하여 만들면 되는 문제이다.
[그림 3] 단순 admin 넣기
소스 코드대로 동작하는지 확인하기 위해 단순하게 admin을 id 변수에 넣고 전달해 보니 'no!'라는 문구가 출력되는 것을 볼 수 있다.
[그림 4] eregi 함수 우회
저번에 풀었던 문제 중에 eregi 함수 우회하는 방법이 있어 적용시켜 보니 그림 3과 동일하게 'no!'라는 문구가 출력되는 것을 볼 수 있다. eregi 함수를 우회할 수 있는 버전이 아니거나 PCRE Regex 함수들을 사용하고 있나 보다.
[그림 5] admin 값 URL 인코딩
URL 디코딩을 한 후에 id 값을 비교하기에 그림 5와 같이 URL 인코딩 한 값을 제출하면 소스 코드 흐름 1번에서 안 걸리지 않을까 했는데 똑같이 'no!'라는 문자열을 뱉어내는 것이 아닌가. 알아보니, 브라우저에서 자동으로 한 번 디코딩 한 값을 보내는 듯 하였다. 실제로 그림 5에 보이는 URL 인코딩 값을 보내면 admin으로 빠르게 바뀌는 현상을 볼 수 있다.
[그림 6] admin URL 인코딩 두 번
그림 6의 상단은 admin을 한 번 URL 인코딩 한 결과 값이고 하단은 두 번 URL 인코딩 한 값이다. 해당 툴은 Burp Suite의 Decoder 기능을 이용하였다.
[그림 7] 성공
그림 6 하단의 값을 id 변수에 넣어 제출하게 되면 문제 풀이에 성공한다!
'Wargame > Webhacking.kr' 카테고리의 다른 글
Webhacking.kr 27번 (0) | 2017.09.07 |
---|---|
Webhacking.kr 25번 (0) | 2017.09.01 |
Webhacking.kr 24번 (0) | 2017.07.12 |
Webhacking.kr 18번 (0) | 2017.07.11 |
Webhacking.kr 14번 (0) | 2017.07.10 |