webhacking.kr 33번

33번 문제는 꼬리문제가 10개 달린 문제다.

33-1번 부터 차례대로 풀어보겠다.

소스를 살펴보면 if 문이 충족되어야 다음 페이지로 넘어갈 수 있음을 알 수 있다.

GET방식으로 get이라는 파라미터에 hehe라는 값이 전달되면 다음 페이지로 넘어갈 수 있음을 알 수 있다.

url뒤에 ?get=hehe를 입력하여 주면 풀린다.

33-2번

이번엔 코드를 살펴보면 GET방식이 아닌 POST방식으로 값을 전달해야 함을 알 수 있다.

나는 버프스위트(Burp Suite)를 활용해서 문제를 풀었다.

 

33-1에서 33-2로 이동한 후의 패킷을 잡는다.

Params 탭에서 소스에서 요구한 각각의 값을 입력해준다.

Raw탭으로 다시 이동하면 해당하는 값들이 입력되어 있음을 확인할 수 있다.

Foward를 눌러주면 Wrong이 아닌 Next가 뜨면서 문제가 풀렸음을 알 수 있다.

33-3번

GET방식으로 전달된 myip와 $_SERVER['REMOTE_ADDR']이 일치해야한다.

$_SERVER['REMOTE_ADDR']는 사용자의 ip를 불러오는 함수다.

즉 나의 아이피를 get방식으로 myip파라미터에 실어서 보내주면 되는것.

url 뒤에 ?myip=nnn.nnn.nnn.....이런식으로 입력해주면 풀린다.

 

33-4번

이번에는 힌트가 있는 문제다.

get방식으로 전달한 password가 md5(time())과 일치해야한다.

힌트는 time()이다. php에서 time()은 time() 은 1970년 1월 1일 0시 0분 0초부터 지금까지 지나온 초를 정수형태로 리턴해주는 함수라고 한다.

md5()는 php내에서 md5암호화를 해주는 함수다.

즉 1614956791을 md5암호화 한 값을 password에 넣어줘야 하는것.

그런데 입력을 하니 문제가 안풀렸다.

내가 까먹은 한가지 문제를 푸는동안에도 시간은 계속 흐른다는 것이다.

그래서 다시 한번 힌트를 확인하고 몇초를 미리 더한 값을 md5암호화 한 후 기다렸다가 입력을 해주었다.

시간 맞춘다고 엔터를 상당히 눌러서 약간의 노가다를 동반한 문제...

 

33-5번 문제

앞서 나온 문제들과 유사한 문제다.

imget의 파라미터 값이 존재하고 impost의 값이 존재하고 imcookie가 존재하고

각각 따로 전송하는 방법도 있겠지만 버프스위트를 활용하면 간단하게 풀 수 있다.

각 파라미터들의 값은 지정되어 있지 않기 때문에 임의의 값을 넣어주었다.

간단하게 끝

 

33-6번

긴 힌트가 먼저 보인다.

소스코드를 살펴보면 test라는 쿠키값이 md5화 한 나의 ip주소와 같아야 하고

POST방식으로 전달되는 kk의 값이 md5화한 $_SERVER['HTTP_USER_AGENT']와 같아야 한다.

$_SERVER['HTTP_USER_AGENT']는 사용자 웹접속정보를 담고 있는 변수라고 한다. 힌트의 내용이 참고로 같은 내용이다.

또 다시 버프스위트를 사용해서 풀었다.

 

33-7번

소스를 살펴보면 

$_SERVER['REMOTE_ADDR']에는 $_SERVER['REMOTE_ADDR']의 .이 지워져 대체된 값이 들어간다.

변수이름과 값이 같은 값이 get방식으로 전달되면 완료

 

33-8번

get으로 전달된 addr값이 없다면 addr에는 내아이피 주소가 들어가게 된다.

addr이 127.0.0.1일때 문제가 풀린다.

get방식으로 전달해주면 끝.

 

33-9번

ans가 answer와 같다면 풀리는 문제

ans는 무엇일까? 위의 for문을 살펴보자.

chr()함수는 해당 숫자에 해당하는 아스키코드에 해당하는 문자를 반환한다.

for문이 계속 반복되면 121에 도달하고 끝난다.

아스키코드가 121인 문자는 y

라고 생각했으나 이게 문자 하나가 저장되는게 아니고 answer에 계속해서 97, 99,,,,, 이런식으로 합쳐지는 것이었다.

이렇게 해결.

알다가도 모르겠는 php문법... 왜 대체되는게 아니고 하나씩 추가되는지 나중에 찾아보고 알게되면 추가하겠다.

개인적으로 하나 더 신경쓰이는건 $answer.하고 이 점이 대체 뭔가...?

 

아무튼

33-10번

ip는 내 아이피

ord()함수는 chr()과 반대로 해당 문자의 아스키코드값을 추출하는 함수다.

다음 줄은 .을 없애고

다음 줄의 substr( string, start [length ] )함수

string : 추출의 대상이 되는 문자열

start : 추출을 시작하는 위치입니다.

length : 추출할 문자의 개수 값이 없으면 문자열의 끝까지 추출 합니다 음수일 때는 위치를 뜻하고 그 위치 앞까지의 문자를 추출

 

최종적으로 answerip/{$answer}_{$ip}.php를 알아내야하는데

... 문득 이걸 하나하나 내가 다 고쳐야 하나 하는 생각이 들었다.

 

그래서 나의 스승 구글의 힘을 빌려 검색해보니

phptester.net/

 

PHPTESTER - Test PHP code online

This application is free so please don't break it! Contact :phptester.net@gmail.com Dear Hacker you don't need to hack this free website to prove that you are very good!!!! Updates: I'm trying a new approche, PHP 7.1 to 7.4 version added but still in test

phptester.net

php코드를 테스트해서 값을 추출해주는 사이트가 있다고 한다.

하지만 지금 카페에서 이 문제를 풀고있는데 뭔가 카페 인터넷상의 문제인지 사이트에 접근이 되지 않았다...ㅠㅠ

 

대신 찾은 사이트는

ideone.com/

 

Ideone.com

Ideone is something more than a pastebin; it's an online compiler and debugging tool which allows to compile and run code online in more than 40 programming languages.

ideone.com

php외에도 여러가지 언어를 사용할 수 있고 좌측하단에서 언어 설정을 바꿀 수 있다.

이렇게 값을 구해준다.

드디어 풀었다!!!!!ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

아 6번 푸는 중간에 한번 10번 푸는 중간에 한번 로그인이 풀려서 계속 1번으로 돌아가는 바람에 3번이나 다시 풀었던 미친 문제..... 너무너무 힘들었다.

하지만 그만큼 확실하게 프록시랑 get, post, cookie 등 여러가지를 빡시게 공부할 수 있는 시간이었던거 같다.

'문제풀이 > 보안 writeup' 카테고리의 다른 글

webhacking.kr 18번  (0) 2021.03.18
webhacking.kr 35번  (0) 2021.03.18
webhacking.kr 16번  (0) 2021.01.21
webhacking.kr 12번  (0) 2021.01.21
webhacking.kr 14번  (0) 2021.01.20
myoskin