본문 바로가기

웹 해킹 (Web)/webhacking.kr

[webhacking.kr] 웹해킹.kr old-33번 (200)

728x90
반응형

이번에는 webhacking.kr의 old-33번 문제입니다. php를 이용하는 문제고 200점이 배점되어 있습니다.

 

처음 들어가면 33-1 이라고 나옵니다. 단계별로 푸는 문제인가 봅니다. 소스 코드를 보겠습니다.

 

php문에서 GET 방식으로 전달되는 get이 hehe이면 Next로 넘어갈 수 있는 것 같습니다.

 

GET 방식으로 전달되므로 URL을 조작해 보겠습니다.

 

위와 같이 입력하니 Next 버튼이 활성화되었습니다.

 

Next 버튼을 누르면 URL이 lv2.php로 바뀌면서 33-2로 이동합니다.

 

33-2의 소스 코드를 보겠습니다.

 

33-2 문제는 POST방식으로 전달된 post에는 hehe를, post2에는 hehe2를 전달하면 풀리는 문제입니다.

 

저는 burpsuite를 이용해서 풀어보겠습니다. 우선 method를 POST형식으로 바꿔줍니다.

 

 

그리고 마지막 줄에 post에는 hehe를, post2에는 hehe2를 전달해줍니다.

 

33-2번이 해결된 모습을 볼 수 있습니다. Next를 누르면 33-3번으로 넘어갑니다.

 

33-3번의 소스 코드를 보겠습니다.

 

GET 형식으로 전달되는 myip에 사용자의 ip가 들어가면 됩니다.

 

ip를 확인하는 방법은 구글에 'ip 확인하기'로 검색하면 됩니다.

 

GET 방식으로 전달되므로 URL을 통하여 풀어보겠습니다.

 

위와 같이 URL을 조작해주면 33-3번 문제를 풀 수 있습니다.

 

다음은 33-4번 문제입니다. hint와 어떤 숫자가 적혀 있습니다. 

 

소스 코드를 확인해 보겠습니다.

 

GET 방식으로 전달되는 password에 time() 함수로 구해진 값을 md5 방식으로 hash를 생성해 전달해주어야 합니다.

 

php의 time() 함수는 1970년 1월 1일 0시 0분 0초부터 지금까지 지나온 초를 정수로 반환하는 함수입니다.

 

구글에 'md5 hash'로 검색하여서 hash를 생성해 주겠습니다.

 

hint값은 시간이 지나면서 증가하므로, hint값을 예측하여 hash 값을 생성하고, hash로 변환한 값을 URL에서 password에 전달해줍니다.

 

새로고침 (F5)를 하며 hint의 상승값을 보며, 타이밍에 맞게 새로고침을 해주면 33-4번 문제를 해결할 수 있습니다.

 

Next를 누르면 33-5번 문제로 넘어갑니다. 소스 코드를 보겠습니다.

 

이번에는 GET 방식, POST 방식, COOKIE까지 조작해야 합니다. burpsuite로 패킷을 보겠습니다.

 

method를 POST 형식을 바꾼 뒤, URL 뒤에 위와 같은 형식으로 전달해주면, GET 방식으로 전달됩니다.

 

imcookie라는 쿠키에도 true 값을 보내줘야하므로, cookie도 생성해줍니다.

 

마지막으로 POST 형식으로 전달되는 impost의 값도 설정해줍니다. 

 

패킷을 전달하면 33-5번 문제를 해결할 수 있습니다. Next로 넘어가 보겠습니다.

 

33-6번 문제는 hint에 웹 브라우저 정보가 적혀있습니다. 소스코드를 보겠습니다.

 

test라는 cookie에는 사용자의 ip를 md5 방식으로 해싱한 값을, POST 방식으로 전달되는 kk에는 사용자의 웹 브라우저 정보를 md5 방식으로 해싱한 값을 전달해주면 됩니다.

 

위와 같이 md5 방식으로 해싱한 값을 구한 뒤, burpsuite로 패킷을 변경해줍니다.

 

test라는 cookie의 값을 설정해줍니다.

 

method를 post 방식으로 변경하고, kk에도 값을 전달해줍니다. 

 

패킷을 전송하면 33-6번 문제가 해결됩니다.

 

Next를 눌러 33-7번 문제로 넘어가고, 소스 코드를 보겠습니다.

 

REMOTE_ADDR을 str_replace() 함수를 이용하여서 ip를 구분하는 .을 공백으로 처리합니다.

 

즉 $_SERVER['REMOTE_ADDR']=127001 과 같이 나타냅니다.

 

이를 GET 방식으로 똑같이 받아주면 되므로, URL에 127001=127001 과 같은 형식으로 적어줍니다.

 

Next를 눌러 33-8번 문제로 넘어가고, 소스 코드를 보겠습니다.

 

 

GET 방식으로 addr을 전달하는데, addr이 127.0.0.1일 때 문제가 풀립니다. URL을 조작하면 됩니다.

 

Next를 눌러 33-9번 문제로 넘어갑니다. 소스 코드를 보겠습니다.

 

for 반복문으로 i에 여러 값을 저장하는 모양입니다. $i = $i + 2이므로 아스키 코드가 2씩 증가합니다.

 

97일 때 a, 99일 때 c, 101일 때 e, ... 121일 때 y 로 저장됩니다.

 

i에 입력된 문자열들을 GET 방식으로 ans가 전달받습니다.

 

Next를 눌러 33-10번 문제로 넘어가고, 소스 코드를 확인해 보겠습니다.

 

33-10번 문제는 사용자의 ip를 이래저래 변환하는 문제입니다.

 

str_replace() 함수로 치환하고, 곱하기, 더하기 등 여러 연산을 해줍니다.

 

직접 계산하려다가 너무 복잡해서 php 웹 컴파일러를 사용하겠습니다.

 

$_SERVER['REMOTE_ADDR'] 자리에 사용자의 넣어서 ip 변수에 대입해줍니다. 

 

이후에 계산 과정을 거치고, 마지막에 echo로 결과값을 출력합니다. 그럼 결과값으로 php 파일 경로가 나옵니다.

 

이를 URL에 넣어보겠습니다.

 

드디어 끝났습니다.

728x90
반응형