컴맹에서 컴공 그리고 화이트 해커가 되는 그날까지

Root Me[web-server] : PHP - Command injection Write up 본문

해킹/Web hacking

Root Me[web-server] : PHP - Command injection Write up

공부하는 뚱이 2024. 9. 17. 19:13

슬슬 해킹스러운 문제가 나오는 구만!이라는 생각이 드는 문제였다.

 

문제 사이트에는 이렇게 ip주소를 입력하는 입력창과 제출 버튼이 나와있다.

 

이번 문제도 burp suite를 사용하여 패킷을 받았다.

 

 

이렇게 되어 있었고 ip 입력창에 127.0.0.1을 입력하고 다시 패킷을 받아 보았다... 그랬더니..

 

 

이렇게 ip=127.0.0.1이 생기고 결과 값이 반환되었다.

문제의 이름이 PHP-Command injection 인 만큼 이번 문제의 힌트와 해결할 수 있는 방법은

command injection을 사용하는 것이다.

 

이 문제에서 명령어 주입(command injection)이 발생할 수 있는 이유는 다음과 같다.

  1. 사용자 입력 검증 부족:
    • 이 코드에서 사용자는 ip 필드에 임의의 값을 입력할 수 있으며, 해당 값이 검증되지 않고 직접 시스템 명령어에 삽입됩니다. 예를 들어, 사용자가 127.0.0.1; ls와 같은 입력을 하면, ping 명령어가 실행된 후 추가로 ls 명령어가 실행될 수 있습니다.
  2. 신뢰할 수 없는 데이터 사용:
    • 사용자가 입력한 IP 주소를 그대로 명령어에 사용함으로써, 악의적인 사용자가 시스템 명령어를 주입할 수 있는 기회를 제공합니다.
  3. 입력 필터링 미비:
    • 특수 문자(예: ;, &&, ||)에 대한 필터링이 없으면, 공격자가 여러 명령어를 연속으로 실행할 수 있습니다.
  4. 명령어 실행 환경:
    • shell_exec 함수를 사용하여 입력된 IP 주소를 기반으로 명령어를 실행하는데, 이는 PHP의 쉘 환경에서 명령어를 실행하므로 보안에 취약합니다.
  5. 에러 메시지 노출:
    • 만약 오류가 발생하면, 서버가 상세한 오류 메시지를 반환할 경우 공격자는 시스템의 구조를 파악하고 공격할 수 있는 정보를 얻게 됩니다.

 

 

ip=127.0.0.1;ls --> ip에 127.0.0.1을 주고 파일이 어떤 게 있는지 확인하는 'ls' command를 입력하자

'index.php'가 있다고 알려주었다.

 

 

다음으로 파일을 읽는 'cat' command를 사용하여 index.php의 내용을 읽어 보았다.

우리에게 필요한 파일이 무엇인지 알게 되었다.

이름 앞에 .이 붙어서 나오지 않았던 숨겨진 파일인 .passwd를 flag 변수에 저장한다는 사실을 알게 되었다.

 

 

flag값을 찾았다!!!

 

반응형