Webhacking.kr 33번
33번은 문제가 꽤 많다. 풀다가 힘들어 죽는줄...
GET 메소드로 전송되는 "get" 파라미터의 값이 "hehe"면 다음으로 넘어갈 수 있다.
33-1 클리어
=============================================================================================
33-1과 비슷하지만 이번에는 POST 메소드로 전송 되는 "post, post2" 파라미터의 값들이 각각
"hehe, hehe2" 일때만 다음으로 넘어갈 수 있다.
(사진 안 보이면 클릭)
33-2 문제 페이지에는 POST로 전송하는 별 다른 form이 없으니 크롬 콘솔에서 위와 같이 입력해서
입력 form을 만들어야 한다.
생성된 form 입력 부분에 문제에서 요구하는 값들을 입력한다.
33-2 클리어
=============================================================================================
GET 메소드로 전송되는 "myip" 파라미터의 값을 $_SERVER[REMOTE_ADDR] 값과 비교한다.
해당 값은 PHP 내부 함수로써 클라이언트의 공인 IP를 의미한다.
33-3 클리어
=============================================================================================
GET 메소드로 전송되는 "password"의 값이 "md5(time())" 값과 일치해야 다음으로 넘어간다.
time() 함수는 1970년 1월 1일 0시 0분 0초를 기준으로 현재까지 몇초가 지났는지 알려준다.
2015-08-16 13:52:32 == 1439700597
md5(x) 함수는 인자값으로 들어온 x의 해쉬 값을 출력하니 현재 시간부터 약 10초 뒤를 기준으로 잡고 md5 해쉬 결과를 얻은 다음 password 파라미터에 입력하고 새로고침을 몇 번 해주면 된다.
md5(+10초) 해쉬 결과
33-4 클리어
=============================================================================================
총 3가지 값을 요구한다.
- GET 메소드 : "imget" 파라미터
- POST 메소드 : "impost" 파라미터
- COOKIE : "imcookie"
우선 COOKIE 값을 세팅한다.
(사진 안 보이면 클릭)
POST 메소드로 전송되는 값을 세팅한다.
마지막으로 GET 메소드로 전송되는 값을 세팅한다.
33-5 클리어
=============================================================================================
COOKIE "test" 값은 클라이언트 공인 IP의 md5 해쉬 결과를 요구한다.
POST로 전송되는 "kk" 값은 "HTTP_UESR_AGENT"의 md5 해쉬 결과를 요구한다.
md5(공인 IP) 결과
md5 해쉬 값 쿠키로 세팅
md5(HTTP_USER_AGENT) 결과
(사진 안 보이면 클릭)
해쉬 값을 POST로 전송한다.
33-6 클리어
=============================================================================================
가변 변수를 사용하는 문제이다.
클라이언트 공인 IP를 알아내고, '.' 문자를 '' 으로 치환한다.
그리고 GET 메소드로 전송되는 치환 결과가 치환 결과와 동일해야 한다.
말이 조금 이상한데 이게 바로 가변 변수의 개념이다. (변수 값을 변수로 사용할 수 있음)
33-7 클리어
=============================================================================================
extract 함수 때문에 GET 메소드로 입력 받는 값이 전역 변수로 세팅된다.
그리고 addr 파라미터 값을 입력하지 않으면 자동으로 해당 값을 클라이언트 공인 IP 값으로 세팅한다.
값이 입력되지 않으면 초기화가 되는 부분이니 그냥 값을 입력하면 된다.
33-8 클리어
=============================================================================================
$i 변수 값이 97 ~ 122 일 때 2씩 증가하면서 chr(i) 함수의 인자값으로 들어간다.
chr 함수는 정수값으로 들어온 파라미터를 문자로 변환한다.
chr(97) = 'a'
크롬 콘솔에 해당 코드를 복붙하면 된다.
(String.fromCharCode() 함수는 chr() 함수와 동일한 역활이다)
33-9 클리어
=============================================================================================
$ip 변수에 클라이언트 공인 IP 값이 대입된다.
공인 IP 길이만큼 반복문이 돌면서 ord(i) 함수의 인자 값으로 들어가는데 ord 함수는 입력된 문자의 ASCII 값을 반환한다.
그리고 str_replace를 통해 치환하고, substr 함수를 통해 몇 글자를 자른다.
자른 뒤에는 2를 곱하고 나누고 또 다시 치환이 일어난다.
코드를 복사해서 필요한 부분을 약간 변경한다.
실행 결과이다.
실행 결과 URL에 들어가보면 flag를 얻을 수 있다.