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 메시지를 보아, 소켓 연결에 실패한 것을 알 수 있고, 그 이유가 연결이 거부되어 실패했다는 것을 알 수 있다. 즉, 해당 포트가 서버에서 열려있지 않거나, 방화벽등의 이유로 연결이 거부되었을 가능성을 유추해 볼 수 있다. 즉, 이번 문제는 포트포워딩을 해야 하는 문제이다.
우선 포트포워딩 설정을 해준다. ( 공유기 포트포워딩 설정 을 구글에 검색하면 쉽게 따라 할 수 있다. )
두 번째로 방화벽을 내려준다. ( 외부에서 데이터가 들어올 수 있도록 해준다. )
netcat 프로그램을 설치한 후, cmd 창에서 nc -lvp 10000 ( 본인이 설정한 내부 포트 ) 명령을 입력한다. 그 후, 문제 사이트로 이동하여, 새로 고침 시 아래와 같이 flag를 획득할 수 있다.
참고
https://opentutorials.org/course/3265/20038