Command Injection
1. Command Injection
- 원격 명령어 실행 취약점
- 공격 시 공격자는 자신이 실행하고자 하는 명령어를 서버에 원격으로 실행 가능
1) 환경
- Unix or Linux 운영체제를 사용하여 명령어를 실행할 수 있도록 만들어 놓은 사이트 및 Application [ex) ping test]
- kali linux 2018.1 운영체제의 공격자 클라이언트
- 공격자 클라이언트에 설치된 Burp Suite[proxy server기능, 값 변조를 위해] 프로그램을 사용
- 서버와 클라이언트 간의 오고가는 패킷을 확인하기 위해 firefox 프록시기능 on
2) 선행지식
- 명령어
; |
앞 명령어 실행 후 뒤 명령어 실행 |
&& |
앞 명령어가 참이면 뒤 명령어 실행 |
|| |
앞 명령어가 거짓이면 뒤 명령어 실행 |
| |
앞 명령어의 결과를 뒤 명령어로 전달 |
echo [message] > [filename] |
파일 생성 |
echo [message] >> [filename] |
기존 파일에 추가작성 |
아래와 같이 연습해 볼 수 있다.
- 생성, 확인, 추가, 확인, 여러 명령어의 순차적인 실행
3) 시연 [ping_test site]
[1] ping test를 할 ip를 작성 후 입력
[2] ip를 적어야 하는 곳에 다른 명령어를 함께 입력
[3] burp suite를 이용하여 프록시 on 후 intruder에서 타겟 주소 확인
[4] 변조할 위치 선택 후 add
[5] payload.txt 파일에 공격스크립트 작성
- 뒤에 명령어가 실행되도록 맨 앞에 ;(세미콜론)을 붙인다.
- 권한은 모든권한을 전부 부여한다.
- <?php ?> 는 php문 작성시에 사용된다.
- phpinfo(); 는 php버전정보를 출력하는 php함수이다.
[6] 페이로드에서 방금 작성한 payload.txt 파일을 첨부한다.
[7] 타겟, 변조위치, 변조리스트 확인 후 공격한다
[8] 실제로 파일이 생성되었는지 확인한다.
[9] URL에 만들어진 ./attackme.php 사이트에 접속한다.
4) 추가지식
- 예를 들기위해 phpinfo(); 같은 함수를 실행시켜 basic site로 접속하였지만,
echo 'shell_exec("rm -rf /*");' >> click.php 와 같이 Fuzzing(퍼징, 예상치 않은 데이터를 입력하여 장애를 발생)할 경우 서버에 문제가 생길 수 있다. [shell_exec() 함수는 php상에서 shell명령어를 사용할 수 있도록 한다.]
5) payload Vs exploit
- 페이로드 : 공격 자체의 코드, 즉 옮겨졌을 때 실행되는 코드[위에서 사용한 attackme.php], 침투가 끝나고 실행되는 코드
- 익스플로잇 = 침투를 하기 위한 코드
6) 대응방안
- Secure coding
- input의 형태가 xxx.xxx.xxx.xxx 가 아니면 차단
- &, |, ; 등의 특수기호 input시 차단
주의사항 : 취약한 사이트의 경우 공격이 통할 수 있으니 실제로 사용하지 마십시오.
'Try Attack > Web Hacking[basic]' 카테고리의 다른 글
Web hacking 이론 (0) | 2019.04.27 |
---|---|
File Upload (0) | 2018.08.12 |
File Inclusion (0) | 2018.08.12 |
프로토콜 분석 (0) | 2018.08.12 |
brute force (0) | 2018.08.11 |
댓글