ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <Root-me> PHP - Command injection
    Wargame/Root-me = Web - Server 2022. 1. 2. 14:13

    PHP - Command injection

    IP를 입력하라는 것 같다.

    특정 IP 주소를 제출해보면

    ping 명령어의 결과를 출력한다.

    ping 명령어는 다양한 원격 호스트와 네트워크 상태를 판별하고, 하드웨어 및 소프트웨어 문제점을 추적 및 격리하며, 네트워크를 테스트, 측정 및 관리하는데 사용한다.

    패킷이 3개만 출력되는 것으로 보아 "ping -c 3 {IP 주소}"를 실행하는 것 같다.

     

    문제 설명을 보면

    FLAG는 index.php 파일 안에 있다고 한다.

     

    Commad Injection 공격을 수행할 때 "&&"와 "||"을 사용할 수 있다.

    && 명령어 연속 실행
    한 줄에 여러 명령어를 사용하려 할 때 사용
    앞 명령어에서 에러가 발생하지 않아야 뒷 명령어 실행
    $ echo hi && echo woong
    hi
    woong
    || 명령어 연속 실행
    한 줄에 여러 명령어를 사용하려 할 때 사용
    앞 명령어에서 에러가 발생해야 뒷 명령어 실행
    $ cat / || echo woong
    /: Is a directory
    woong

     

    따라서, "|| cat index.php"를 입력하면

    input 박스가 하나 더 생긴다.

    페이지 소스 코드를 보면

    두 번째 input 박스에 주석으로 php 코드가 담겨있다.

    변수 flag는 ".passwd" 파일을 읽어온다.

    그리고 shell_exec() 함수를 통해 뒤의 명령어에 대한 결과값을 출력한다.

    POST 방식으로 전달받은 ip의 값을 이용해 "ping -c 3 {ip 값}" 명령을 수행한다.

     

    두 번째 input 박스에 "|| cat .passwd"를 입력하면

    "ping -c 3 || cat .passwd"가 되어 "||" 앞은 IP 주소가 없어 오류가 생겨 뒷 명령이 수행되게 된다.

    변수 flag의 값을 얻을 수 있다.

Designed by Tistory.