워게임/Root Me

[Root Me] PHP - Command injection - 웹해킹 / 명령어삽입

SecurityMan 2022. 4. 5. 15:30

 

10점짜리 웹해킹 문제이다.

 

문제 제목으로 유추해 보건데, PHP로 만들어진 웹페이지인것 같다.

 

문제 설명을 읽어보면 이 서비스의 취약점을 찾아서 exploit을 하라고 한다.

 

플래그는 index.php 파일안에서 찾을 수 있다고 적혀있다.

 

 

문제페이지에 들어가면 입력창이 하나있고, 제출 버튼이 나온다.

 

입력창에는 기본으로 127.0.0.1이 들어가 있다.

 

일단 제출버튼을 눌러본다.

 

반응형

 

 

127.0.0.1을 입력하고 제출을 누르면

 

ping 명령어 수행결과가 출력된다.

 

웹 페이지를 통해서 운영체제 명령어를 실행하고, 그 결과를 가져와서 보여주는 서비스인듯 하다.

 

 

참고로 실제 리눅스 환경에서 ping 명령어를 실행시키면 이렇게 뜬다.

 

출력 내용을 보면 완전 똑같은것을 볼 수 있다.

 

문제는 이렇게 웹서비스를 통해서 운영체제 명령어를 실행시킬 경우 

 

사용자의 입력값을 적절하게 필터링 해줘야 한다는 것이다.

 

그렇지 않으면 불필요한 정보까지 노출될 수 있다.

 

 

리눅스 쉘스크립트는 명령어 뒤에 ; (세미콜론)을 쓰면

 

이어서 다른 명령어를 실행시킬 수가 있다.

 

ping 뒤에 ; 를 입력하고 ls를 입력하면

 

명령어 수행결과가 이렇게 같이 연달아서 출력되게 된다.

 

 

이 문제에서도 마찬가지이다.

 

127.0.0.1;ls 라고 입력하면 ping 뒤에 ls가 수행되어서

 

index.php가 출력된 것을 확인할 수 있다.

 

flag는 index.php 안에 있다고 했으니, 내용을 확인해본다.

 

 

127.0.0.1;cat index.php 라고 입력했더니

 

밑에 입력창과 제출버튼이 하나 더 생겼다.

 

이게 생긴 이유는 cat 명령어로 index.php를 출력해

 

브라우저가 웹페이지의 일부로 인식하고 해석했기 때문이다.

 

 

이 상태에서 f12를 눌러 개발자도구로 웹 소스를 본다.

 

그러면 이전에 없던 주석으로 처리된 내용이 보인다.

 

php 코드로 $flag 변수를 선언해서 해당 변수에 .passwd 파일의 내용을 대입하고 있다.

 

 

마지막으로 127.0.0.1;cat .passwd 라고 입력해주면

 

ping 명령어 수행결과 밑에 패스워드(플래그)가 출력되게 된다.

반응형