본문 바로가기

Wargame(hacking)/webhacking.kr

Webhacking.kr : old-31

Write-Up

 

문제 페이지에 접속하자 아래와 같은 코드와 에러 메시지가 출력된다. 

 

$port = rand(10000,10100);
$socket = fsockopen($_GET['server'],$port,$errno,$errstr,3) or die("error : {$errstr}");

Warning: fsockopen(): unable to connect to IP 주소:10080 (Connection refused) in /var/www/html/challenge/web-16/index.php on line 23
error : Connection refused

 

$port = rand( 10000, 10100 ) : 먼저 10000 ~ 10100 사이의 임의 포트 번호를 생성한다. 

 

$socket = fsockopen($_GET['server'],$port,$errno,$errstr,3) or die("error : {$errstr}"); : fsockopen 함수를 사용해, 주어진 IP 주소와 포트로 소켓을 연다. $_GET['server'] 를 통해 사용자 입력 값을 받아오는데, 이것이 서버의 주소로 사용된다. 

 

Warning 메시지를 보아, 소켓 연결에 실패한 것을 알 수 있고, 그 이유가 연결이 거부되어 실패했다는 것을 알 수 있다. 즉, 해당 포트가 서버에서 열려있지 않거나, 방화벽등의 이유로 연결이 거부되었을 가능성을 유추해 볼 수 있다. 즉, 이번 문제는 포트포워딩을 해야 하는 문제이다. 

 

우선 포트포워딩 설정을 해준다.  ( 공유기 포트포워딩 설정 을 구글에 검색하면 쉽게 따라 할 수 있다. )

 

그림 1

 

두 번째로 방화벽을 내려준다. ( 외부에서 데이터가 들어올 수 있도록 해준다. )

 

그림 2

 

netcat 프로그램을 설치한 후, cmd 창에서 nc -lvp 10000 ( 본인이 설정한 내부 포트 ) 명령을 입력한다. 그 후, 문제 사이트로 이동하여, 새로 고침 시 아래와 같이 flag를 획득할 수 있다.

 

 

 

참고

 

https://opentutorials.org/course/3265/20038

 

포트 포워딩(port forwarding) - 생활코딩

수업소개 공유기 외부에서 공유기 내부의 컴퓨터에 접속하기 위해서는 공유기의 몇번 포트에 접속한 정보를 공유기 내의 어떤 아이피의 몇번 포트로 연결해줄 것인지를 공유기에게 알려줘야

opentutorials.org