- 공격 대상 웹 애플리케이션
- IP를 입력받아 해당 IP로 Ping명령어를 수행하는 간단한 웹 애플리케이션이다.
- (ping 127.0.0.1 -c 4)
-c : ping요청 횟수
- 공격 대상 웹 애플리케이션 소스코드
- 공격1
- 입력 값으로 IP(127.0.0.1)뒤에 ; ls -al를 수행
- Ping 128.0.0.1 -c 4 와 ls -al 명령어가 모두 수행되었다.
- 공격2
- 입력값으로 IP(127.0.0.1)뒤에 ; cat /etc/passwd 수행
- /etc/passwd 파일은 계정관리를 위한 파일로 cat명령어를 통해 모든 계정정보를 확인할 수 있다.
- ;(세미콜론)을 공백으로 치환하는 방법
- Windows의 경우 ';'가 '&&'이므로 '&&'를 공백으로 치환
- 127.0.0.1; cat /etc/passwd 와 같은 입력값은 걸러낼 수 있다.
- but, ';' 외에 리눅스에는 여러 방식의 CI공격 방법이 존재한다.
- 파이프('|'), 백그라운드('&') 등 ..
- 방어하지 못하는 입력값1 (파이프)
- ls -al 명령어가 수행되었다.
- 방어하지 못하는 입력값2 (백그라운드)
- &를 이용하여 Ping명령어를 백그라운드로 돌리고 cat /etc/passwd명령어를 수행시켰다.
- 더 많은 공격 가능한 문자를 공백으로 치환시켰다.
- 애플리케이션의 입력값이 예제 애플리케이션처럼 고정적인 경우 효과적으로 CI공격에 대응 가능하다.
- 공격 가능한 문자를 공백으로 치환하는 방식이 아닌, 입력값 자체를 올바른 입력값인지 검사하는 방식이다.
- 입력값이 IP의 형태를 하는 지 확인한다.
- '.'를 구분자로 하여 입력값을 slice한다.
- slice된 각 값이 숫자인지 확인하고 총 4개로 slice되었는지 확인한다.
- 즉, '.'를 구분자로 했을 때 4개 숫자가 나오는 경우만 정상적인 입력 값으로 판단한다.
고마워요! 잘봤어요~