본문 바로가기
작업/Webhacking.kr

webhacking.kr old-33 이해하기

 

 

old-33 페이지는 생각보다 많은 문제들이 내포되어 있었습니다.

까도 까도 계속 나오는... 하다가 한 번 지쳤습니다.

시작하겠습니다.


33-1 페이지

 

첫 페이지 화면입니다. view-source를 제공하고 있으니 열어보았습니다.

 

 

33-1 source

$_GET['get']=="hehe"

 

$_GET을 통해서 get 입력 전달 방식을 사용하는 것을 알 수 있습니다.

get 이름을 가지는 곳에 hehe값을 입력시키면 됩니다.

get 입력 방식이기 때문에 url에 직접 입력해서 시도했습니다.

 

33-1 clear

 

Wrong이 출력돼있던 곳에 Next가 나타나고 다음 문제로 진입할 수 있었습니다.

 

 

각 문제의 페이지들이 구성이 똑같고 코드만 다릅니다.

그래서 코드만 올리면서 진행하겠습니다.

 


33-2 페이지

33-2 source

$_POST['post']=="hehe" && $_POST['post2']=="hehe2"'

이번에는 $_POST를 통해 post 입력 전달 방식을 사용한다는 것을 알 수 있습니다.

 

 

POST 입력 방식은 페이지 자체에서 값이 입력되어 넘어가야 하기 때문에

URL에 입력해서 넘어가는 방법으로는 힘들었습니다.

 

 

그래서 33-2 페이지의 HTML 소스 코드에 접근해서 값을 집어넣었습니다.

값을 입력하는 방법에는 HTML input 태그를 사용하는 것이 있습니다.

 

 

그리고 입력된 값을 서버로 전달하기 위한 방법으로 form 태그를 사용합니다.

 

HTML input 태그 타입 종류

 

 

input type 중에 hidden을 사용하겠습니다.

 

 

hidden은 사용자 입력 후 값이 서버로 전달될 때,

사용자에게 보이지 않는 숨겨진 전달 형태입니다.

 

<form method="post" action="lv2.php">
<input type="hidden" name="post" value="hehe">
<input type="hidden" name="post2" value="hehe2">
<input type="submit" value="Submit">
</form>

 

form method를 post로 지정하여 post 입력을 수행하도록 합니다.

action은 작업이 진행될 위치이기 때문에 현재 페이지 경로를 지정합니다.

 

 

hidden 타입을 통해서 post와 post에 각각 hehe, hehe2 값을 전달합니다.

그리고 사용자가 서버로 전달할 수 있는 수단인 submit 기능을 추가합니다.

 

 

33-2 clear

 

 

페이지 소스 코드(f12)에서 마우스 우클릭 후 edit as HTML을 통해 작업을 진행합니다.

작업이 완료되면 Submit 버튼이 형성되며, 클릭 시 해결되는 것을 확인할 수 있습니다.


33-3 페이지

33-3 source

$_GET['myip'] == $_SERVER['REMOTE_ADDR']

 

이번에도 get 입력 방식입니다.

myip $_SERVER['REMOTE_ADDR'] 값을 집어넣습니다.

 

 

$_SERVER['REMOTE_ADDR']는 서버에 전달되는 자신의 ip값입니다.

주의해야 할 부분은 서버로 전달되는 ip값은 자신의 내부 ip값이 아니라는 것입니다.

 

 

외부에 있는 서버로 값을 전달할 때 자신의 내부 네트워크(ex. 공유기)에서 밖으로 나가야 합니다.

그때 자신과 연결된 외부 네트워크 ip로 값이 옮겨지고,

자신이 값을 보낼 외부의 서버에 값을 전달하게 되는 것입니다.

 

 

자신의 외부 ip를 알기 위해서 구글에서 "내 ip 확인"을 검색합니다.

 

 

 

 

ip값을 알아내었다면 get 입력 방식으로 ip 값을 집어넣습니다.

 

 

33-3 clear


33-4 페이지

33-4 source

 

33-4 페이지는 hint가 주어져 있습니다.

 

 

코드를 확인해보니 password에 md5(time()) 값이 들어가야 한다는 것을 알 수 있습니다.

hint로 주어진 것은 time()을 통해 생성된 값입니다.

 

 

time()은 현재 시간을 데이터로 만들어내는 함수입니다.

즉, 가변적이기 때문에 현재 시간에 대한 데이터와 값이 정확히 일치해야 한다는 것입니다.

 

 

상당히 까다롭게 되었습니다.

먼저 time() 값을 md5 hash로 암호화하기 위해 암호화 사이트를 이용하겠습니다.

 

 

codepad.org/

 

codepad

codepad was created by Steven Hazel, one of the founders of Sauce Labs.

codepad.org

 

코드를 만들어서 값을 생성해 보겠습니다.

 

 

 

먼저 실행이 제대로 되는지 확인해 보았습니다.

 

 

md5 해쉬로 암호화되어 Output으로 출력되는 것을 볼 수 있습니다.

이제 time()에 값을 집어넣어 문제를 해결하겠습니다.

 

 

페이지에서 hint로 제시된 tim()의 값은 새로고침 하시면 1초에 1씩 증가하는 것을 알 수 있습니다.

그것을 응용하여 미래의 시간을 미리 md5로 암호화하여 값을 집어넣을 준비를 합니다.

 

 

현재 페이지에서 time() 값으로 1234가 나왔다고 한다면

md5(1250) 같이 앞으로 다가올 시간을 md5로 암호화 한 뒤

password에 get 입력으로 값을 집어넣을 준비를 하는 것입니다.

 

 

 

33-4 clear

 

URL에 값을 입력 후 계속 엔터 눌러서 그 시간에 값이 들어갈 수 있도록 합니다.

 


33-5 페이지

33-5 source

 

 

이번에는 입력되는 값이 3개가 필요합니다.

imget은 get 입력 방식, impost는 post 입력 방식, imcookie는 쿠키 값으로 넣어야 합니다.

 

 

get 입력은 HTML form 태그에서 action에 들어갈 URL에 추가하여 적용합니다.

post 입력은 input 태그를 통해 값을 전송할 수 있도록 합니다.

 

 

쿠키 입력은 크롬의 editthiscookie 확장 프로그램을 사용하도록 합니다.

 

33-5 clear

 

값들은 정해진 것이 없기 때문에 True를 얻어낼 수 있는 1을 집어넣습니다.

직접 True를 집어넣으셔도 가능합니다!

 

 

URL에 get 입력을 하였는지, 쿠키 값을 정확히 저장하였는지 확인하시면서 진행하세요.


33-6 페이지

 

33-6 source

 

이번에는 test 쿠키 값으로 자신의 ip값을 md5로 암호화한 값을 가집니다.

 

 

그리고 kk에 {$_SERVER['HTTP_USER_AGENT']} 값을 md5로 암호화한 값을 가집니다.

{$_SERVER['HTTP_USER_AGENT']} 값은 hint로 주어진 것을 확인할 수 있습니다.

 

 

이번에는 md5 암호화 사이트를 활용하겠습니다.

 

www.convertstring.com/ko/Hash/MD5

 

MD5 해시 - 온라인 MD5 해시 생성기

 

www.convertstring.com

 

 

 

 

 

이전 페이지의 해결 방법처럼 코드를 작성하여 해결합니다.

 

 

33-6 clear


33-7 페이지

33-7 source

 

 

이번에도 자신의 ip 주소를 사용합니다.

 

 

str_replace(".", "", $_SERVER['REMOTE_ADDR']) 함수에 의해

XXX.XXX.XX.X 형태의 ip주소 형태가 XXXXXXXXX 형태로 .이 없어지고 숫자만 남습니다.

 

 

그 형태의 값을 이름으로 가지는 곳에 get으로 입력을 받습니다.

'=' 기준으로 데칼코마니가 나타나는 문제였습니다.

ip가 192.168.0.1이라면 ?19216801=19216801이 결과인 것입니다!

 


33-8 페이지

 

33-8 source

 

 

extract() 함수는 변수화 시켜주는 함수입니다.

조건 중 하나로 !$_GET['addr']이 있는데, addr에 값이 없을 경우 진행되는 것입니다.

 

 

addr 값으로 127.0.0.1을 가지면 문제가 해결되는 것을 알 수 있습니다.

get 입력 방식을 통해서 해결하였습니다.

 

33-8 clear


33-9 페이지

33-9 source

 

 

for 반복문을 통해서 answer 값을 만들어내는 구조입니다.

직접 알아내는 것은 귀찮기 때문에 직접 코드로 따와서 작업을 진행했습니다.

 

 

 

 

get 방식을 통해서 ans에 값을 집어넣겠습니다.

 

 

33-9 clear


33-10 페이지

드디어 마지막입니다...!

 

33-10 source

 

이번에도 반복문이 포함되어 있는 코드입니다. 빨간 묶음 표시를 코드로 뽑아와 결과를 보겠습니다.

 

 

$_SERVER['REMOTE_ADDR']에는 위에서부터 계속 사용하던 자신의 ip값을 적용하면 됩니다.

 

 

$f=fopen("answerip/{$answer}_{$ip}.php","w");

 

fopen() 함수는 해당 파일을 여는 함수입니다.

$answer와 $ip에 코드를 통해 얻어낸 값을 집어넣습니다.

 

 

그러면 그다음 fwirte에 의해 파일 경로가 전달되어 추가적으로 값이 들어가

결국에 해결되는 구조를 가집니다.

 

33-10 clear

 

 

길고 긴 여정이 끝났습니다... 수고하셨습니다.

 

 

 

 

 

'작업 > Webhacking.kr' 카테고리의 다른 글

webhacking.kr old-32 이해하기  (0) 2020.09.12
webhacking.kr old-23 이해하기  (0) 2020.09.10
webhacking.kr old-31 이해하기  (0) 2020.09.06
webhacking.kr old-20 이해하기  (0) 2020.09.06
webhacking.kr old-39 이해하기  (0) 2020.09.06