luvit

Webhacking.kr 26번 본문

Wargame/Webhacking.kr

Webhacking.kr 26번

HongJun Choi 2017.07.26 16:42

[그림 1] 26번 문제


26번 문제에 접근하게 되면 그림 1과 같이 index.phps에 링크가 걸려 있는 것을 볼 수 있다.


[그림 2] 소스 코드


index.phps 소스 코드의 흐름도를 보겠다.


① eregi 함수를 통해 id 변수 값에 admin이라는 문자열이 있으면 'no!'라는 문구를 출력 후 종료시킨다.

② id 변수에 있는 값을 디코딩한다.

③ id 변수 값이 admin이면 문제를 푼다.



따라서, id 변수에 admin 값을 잘 우회하여 만들면 되는 문제이다.


[그림 3] 단순 admin 넣기


소스 코드대로 동작하는지 확인하기 위해 단순하게 admin을 id 변수에 넣고 전달해 보니 'no!'라는 문구가 출력되는 것을 볼 수 있다.


invalid-file

[그림 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 26번  (0) 2017.07.26
Webhacking.kr 24번  (0) 2017.07.12
Webhacking.kr 18번  (0) 2017.07.11
Webhacking.kr 14번  (0) 2017.07.10
0 Comments
댓글쓰기 폼