-
<Root-me> PHP - Command injectionWargame/Root-me = Web - Server 2022. 1. 2. 14:13
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의 값을 얻을 수 있다.
'Wargame > Root-me = Web - Server' 카테고리의 다른 글
<Root-me> Open redirect (0) 2022.01.03 <Root-me> SQL injection - Authentication - GBK (0) 2022.01.02 <Root-me> SQL injection - Authentication (0) 2022.01.01 <Root-me> HTTP - Cookies (0) 2022.01.01 <Root-me> File upload - Double extensions (0) 2021.12.31