일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Masonic Cipher
- BASE64
- Python
- Qrcode
- 카이사르 암호
- Web Hacking
- php_extract
- Fortran 90
- aslr
- overthewire
- webhacking
- assembly
- base16
- sql injection
- 시저 암호
- vigenere cipher
- Javscript
- Navajo alphabet
- base32
- reversing
- Pigpen Cipher
- JavaScript
- 비즈네르 암호
- sha1
- burpsuit
- Mail Header injection
- AVR
- Linux
- Caesar Cipher
- cookie
- Today
- Total
My Drive
webhacking #33 본문
webhacking #33.
이번 문제는 단계별로 문제가 나눠져 있어 좀 길다
#33 - 1
GET방식으로 get변수에 "hehe"값을 넣어 보내주면 된다.
GET방식은 url을 통해 넘겨줄 수 있으므로 간단하다.
#33 - 2
이번에는 POST방식으로 post변수는 "hehe", post2변수는 "hehe2"를 넘겨주면 된다.
post는 변수를 body에 넣어 보내므로 버프수트를 이용하였다.
Body 변수를 2개 추가해주고
방식을 POST로 바꿔준다.
#33 - 3
이번에는 GET 방식으로 myip를 $_SERVER[REMOTE_ADDR]로 바꿔주어야 한다.
전에 $_SERVER는 아래와 같은 정보가 담겨있는 배열이었다.
$_SERVER['DOCUMENT_ROOT'] = 현재 사이트가 위치한 서버상의 위치 (ex. webappinclude)
$_SERVER['HTTP_ACCEPT_ENCODING'] = 인코딩 방식 (ex. gzip, deflate)
$_SERVER['HTTP_ACCEPT_LANGUAGE'] = 언어 (ex. ko)
$_SERVER['HTTP_USER_AGENT'] = 사이트 접속한 사용자 환경 (ex. Mozilla4.0(compatible; MSIE 6.0; Windows NT 5.1; Q312461; .NET CLR 1.0.3705)
$_SERVER['REMOTE_ADDR'] = 사이트 접속한 사용자 IP (ex. 123.123.123.123)
$_SERVER['SCRIPT_FILENAME'] = 실행되고 있는 위치와 파일명 (ex. webappincludeindex.php)
$_SERVER['SERVER_NAME'] = 사이트 도메인 (ex. WWW.X2CHI.COM)
$_SERVER['SERVER_PORT'] = 사이트가 사용하는 포트 (ex. 80)
$_SERVER['SERVER_SOFTWARE'] = 서버의 소프트웨어 환경 (ex. Apache1.3.23 (Unix) PHP4.1.2 mod_fastcgi2.2.10 mod_throttle3.1.2 mod_ssl2.8.6 OpenSSL0.9.6c)
$_SERVER['GATEWAY_INTERFACE'] = cGI 정보 (ex. CGI1.1)
$_SERVER['SERVER_PROTOCOL'] = 사용된 서버 프로토콜 (ex. HTTP1.1)
$_SERVER['REQUEST_URI'] = 현재페이지의 주소에서 도메인 제외 (ex. index.phpuser=&name=)
$_SERVER['PHP_SELF'] = 현재페이지의 주소에서 도메인과 넘겨지는 값 제외 (ex. index.php)
$_SERVER['APPL_PHYSICAL_PATH'] = 현재페이지의 실제 파일 주소 (ex. Dwebapp)
따라서 내 ip를 넣어 GET 방식으로 넘겨주면 된다.
#33 - 4
이번에는 GET 방식으로 password를 현재시간을 md5 해쉬한 값을 넘겨주어야 한다.
문제의 hint에 보면 time()함수의 반환값이 나와있는데 시간이 지날수록 증가한다.
따라서 미리 더 큰 시간을 md5해쉬화해놓고 넘겨주며 새로 고침을 하면 해당 시간이 되었을 때 다음페이지로 넘어갈 수 있다.
#33 - 5
이번에는 GET, POST, Cookie를 모두 이용해야 한다.
버프수트를 이용해 cookie를 생성해 주고, GET방식은 url로 POST방식은 body로 넘겨준다.
전체적인 방식은 POST이다.
(GET방식은 body가 없다.)
#33 - 6
이번에는 Cookie와 POST방식만 넘겨주면 된다.
$_SERVER[REMOTE_ADDR]은 위에서와 같이 내 ip주소를 의미하며
$_SERVER[HTTP_USER_AGENT]는 사이트 접속한 사용자의 환경을 나타낸다. 앞의 Hint에 보면 나와있으므로 그대로 md5해쉬화 하면 된다.
#33 - 7
str_replace는 세번째 인자 문자열에서 첫번째 인자를 찾아 두번째 인자로 바꿔주는 함수이다.
따라서 내 ip주소에서 .을 없애주면된다.
이를 GET방식으로 넘겨준다.
#33 - 8
extract함수는 이전에 살펴본적이 있다.
extract($array) 함수는 인자로 배열타입의 변수를 받는다.
그리고 배열속의 키값들을 변수화시켜주는 역할을 하는 함수이다.
예를 들어, a라는 배열이
$a[i] = 100;
$a[j] = 200;
위와 같으면,
extract($a);
를 했을 경우,
$i = 100;
$j = 200;
과 같은 결과가 나타난다.
addr이라는 이름으로 넘어온 GET방식이 없으면 내 ip를 비교하고,
있으면 넘겨준 값을 비교하게 된다.
127.0.0.1이 되어야 하므로 GET 방식으로 addr을 넘겨준다.
#33 - 9
97부터 122까지 2씩 증가하면 해당 아스키값을 모두 더한 문자열을 만들어 GET방식으로 넘겨주면 된다.
간단하게 파이썬으로 코드를 짤 수 있고,
ans = acegikmoqsuwy
#33 - 10
마지막 문제!
첫부분을 보면 ip길이만큼 replace를 반복하고 있다.
ord는 인자의 아스키값을 의미한다.
그리고 .을 모두 없앤후 앞에서 10글자를 자른다. 이 값이 $ip이다.
다음은 $ip를 2곱하고 2나누고 다시 .을 없애는 과정을 거쳐 $answer을 만든다.
복잡하므로 php코드를 직접짜서 해봤다.
나온 결과 값으로 /answerip/$ip/$answer.$ip 로 들어가보니 아래와 같이 password가 나온다.
'writeup' 카테고리의 다른 글
webhacking #36 (0) | 2014.11.13 |
---|---|
webhacking #23 (0) | 2014.11.13 |
webhacking #32 (0) | 2014.11.12 |
webhacking #31 (0) | 2014.11.12 |
webhacking #20 (0) | 2014.11.12 |