Kali Linux - DVWA실습 (Command Injection)

Kim Dae Hyun·2021년 5월 11일
1

Security

목록 보기
2/7

Command Injection (CI) ?

  • CI는 입력 값의 취약점을 이용하여 임의 OS명령어를 수행시키는 공격 기법이다.
  • 라눅스의 경우 대표적인 CI기법으로 입력 값의 뒤에 ;(세미콜론)과 함께 OS명령어를 삽입하는 방식이 있다.
    • 리눅스는 ;로 구분되는 경우 ;를 기준으로 명령어를 순차적으로 수행한다.

DVWA를 이용한 Command Injection 공격

  • 공격 대상 웹 애플리케이션
    • 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명령어를 통해 모든 계정정보를 확인할 수 있다.

DVWA의 Medium Level Security

  • ;(세미콜론)을 공백으로 치환하는 방법
    • Windows의 경우 ';'가 '&&'이므로 '&&'를 공백으로 치환
    • 127.0.0.1; cat /etc/passwd 와 같은 입력값은 걸러낼 수 있다.
  • but, ';' 외에 리눅스에는 여러 방식의 CI공격 방법이 존재한다.
    • 파이프('|'), 백그라운드('&') 등 ..
  • 방어하지 못하는 입력값1 (파이프)
    • ls -al 명령어가 수행되었다.
  • 방어하지 못하는 입력값2 (백그라운드)
    • &를 이용하여 Ping명령어를 백그라운드로 돌리고 cat /etc/passwd명령어를 수행시켰다.

DVWA의 High Level Security

  • 더 많은 공격 가능한 문자를 공백으로 치환시켰다.
    • 애플리케이션의 입력값이 예제 애플리케이션처럼 고정적인 경우 효과적으로 CI공격에 대응 가능하다.

DVWA의 Impossible Level Security

  • 공격 가능한 문자를 공백으로 치환하는 방식이 아닌, 입력값 자체를 올바른 입력값인지 검사하는 방식이다.
    • 입력값이 IP의 형태를 하는 지 확인한다.
    • '.'를 구분자로 하여 입력값을 slice한다.
    • slice된 각 값이 숫자인지 확인하고 총 4개로 slice되었는지 확인한다.
    • 즉, '.'를 구분자로 했을 때 4개 숫자가 나오는 경우만 정상적인 입력 값으로 판단한다.
profile
좀 더 천천히 까먹기 위해 기록합니다. 🧐

1개의 댓글

comment-user-thumbnail
2021년 5월 15일

고마워요! 잘봤어요~

답글 달기