My Drive

webhacking #24 본문

writeup

webhacking #24

sunnyeo.park 2014. 10. 15. 18:17

webhacking #24.

페이지 소스를 보니 index.phps에 소스가 있다고 하여 

index.phps를 들어갔다.


php부분을 보면,

우선 php의 extract함수가 사용된다.

extract($array) 함수는 인자로 배열타입의 변수를 받는다.

그리고 배열속의 키값들을 변수화시켜주는 역할을 하는 함수이다.

예를 들어, a라는 배열이

$a[i] = 100;

$a[j] = 200;

위와 같으면,

extract($a);

를 했을 경우,

$i = 100;

$j = 200;

과 같은 결과가 나타난다.

extract함수는 $_GET, $_POST, $_SERVER 같은 전역변수에 사용하게 되면 보안상의 문제가 있다.

(이 문제에서 볼 수 있다.)


위에서는 $_SERVER와 $_COOKIE를 extract의 인자로 넣어주고 있는데,

$_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)

 $_COOKIE는 페이지에 존재하는 쿠키가 담벼있는 배열이다.


$_SERVER['REMOTE_ADDR'] = 사이트 접속한 사용자 IP (ex. 123.123.123.123)

$_SERVER['HTTP_USER_AGENT'] = 사이트 접속한 사용자 환경 (ex. Mozilla4.0(compatible; MSIE 6.0; Windows NT 5.1; Q312461; .NET CLR 1.0.3705)

이 문제에서는 위의 두 가지가 사용된다.


우리가 해 줘야 하는 것은 $ip를 127.0.0.1로 바꿔주는 것이다.

extract($_SERVER)에서 

$REMOTE_ADDR = 내 IP

$ip = $REMOTE_ADDR

결국 $ip에는 내 IP주소가 들어간다. 하지만 그 전에 extract($_COOKIE)를 할때,

만약 REMOTE_ADDR이라는 이름을 가진 쿠키가 있다면, 

$REMOTE_ADDR = REMOTE_ADDR 쿠키의 값이 되고,

$ip 에는 REMOTE_ADDR 쿠키의 값이 들어가게 된다.

REMOTE_ADDR 라는 이름의 쿠키를 만들 수 있다면 $ip를 조작할 수 있게 되는 것이다.

쿠키값을 127.0.0.7로 바꾸면 위에서 str_replace함수를 이용해 12,7.,0.을 빈칸으로 바꾸고 있으므로 1밖에 남지 않는다.

이를 우회하기 위해 약간 머리를 쓰면

112277..00..00..1 이런 방식으로 우회한 글자를 없앴을 때 원하는 글자가 나오도록 해준다.










'writeup' 카테고리의 다른 글

webhacking #47  (0) 2014.10.19
webhacking #54  (0) 2014.10.16
webhacking #16  (0) 2014.10.13
webhacking #17  (0) 2014.09.29
webhacking #15  (0) 2014.09.29
Comments