안녕하세요. 부산 공수니입니다. 오늘은 '커맨드 인젝션'에 대해 알아보겠습니다. 바로 Go.
컨맨드 인젝션은 명령어를 삽입한다는 뜻으로 웹을 통해 시스템 명령어를 실행하는 공격입니다.
만약 웹 내부에서 시스템 명령어를 실행하는 경우 검사를 거치지 않는다면 해커 마음대로 시스템을 조작할 수 있게 됩니다.
-커맨드 인젝션 공격 실습
*ping : IP 주소를 가진 어떤 시스템이 현재 동작하고 있는지 사용하는 명령어입니다.
Security 를 'low'로 설정하고 Comman Injection 으로 갑니다.
'127.0.0.1'을 입력해봅니다.
소스 코드를 확인해 보겠습니다.
shell_exec : 시스템 명령어 내리는 함수
$target -> request : 웹 요청으로 부터 전달된 'ip' 값임을 알 수 있다.
전달된 ip 에 따라서 ping 명령어를 수행한다.
이렇게 한 건 터미널 에서 실행한 거와 같습니다.
여기서 '-c 4'는 ping 으로 보내는 숫자를 의미합니다. 여기선 4번을 보내고 있습니다.
리눅스는 세미콜론을 이용해 명령어를 여러개 사용할 수 있습니다.
참고) ls는 디렉토리를 확인하는 명령어 입니다.
보시는 것과 같이 명령어를 실행한 후 ' ls' 명령어를 실행한 것을 볼 수 있습니다. 여기서 우리 관심은 뒤에 명령어에 관심이 있기 때문에 ip 를 주지 않아도 됩니다.
ip주소가 없기 때문에 ping 은 실패했지만 뒤에 ls 는 그대로 실행됐음을 볼 수 있습니다.
자 그럼 DVWA 로 입력을 해보겠습니다.
다른 명령어를 입력시켜보겠습니다.
시스템 사용자의 리스트가 출력됩니다. 다만 ';id'를 입력하면 현재 권한을 알 수 있습니다.
'daemon'입니다. 이 권한이 웹 애플리케이션을 실행하는 권한입니다. 이 권한은 권리자 권한으로 실행시키는 시스템 명령어는 이용할 수 없습니다. 권리자 권한을 딸 수 있다면 모든 시스템을 마음대로 사용할 수 있게 됩니다. 실제 해커라면 지금처럼 daemon은 자격을 얻은 상태라면 권한상승을 통해 권리자 권한을 얻을려고 할 것 입니다 .
미디엄 단계로 올려보겠습니다.
';' 이 들어오면 지워 주고 있습니다. '&&' 는 윈도우에서 세미콜론과 같은 역할입니다. 이를 통해 커맨드 인젝션을 예방하고 있습니다 .
하지만 이는 충분치 않습니다. 세미콜론 이외에도 특수 문자들이 존재하기 때문입니다. | 나 & 등입니다. | 는 앞 명령어 결과를 뒤에 명령어 결과로 넘겨주는 특수문자인데
보시는 것과 같이 실행이 됩니다.
&는 백그라운드로 명령을 실행하는데 사용하는 명령어입니다 .
&로 앞에 ping 명령을 백그라운드에서 실행되게 만들고 뒤에 명령어는 그대로 실행시켜버립니다.
이제 high 단계로 가보겠습니다!
소스코드를 보면 제한하는 기호가 늘어났습니다. 이렇게 하면 커맨드인젝션을 막을 수 있는 방식이 늘어납니다.
사실 이 소스코드에서 개발자가 실수한 점이 존재합니다.
이와 같이 특수문자를 이어적었을때 막을 수 없다는 점입니다.
또한 '| ' 에 공백이 들어갔습니다. 이렇게 하면 명령어를 붙어서 입력하면 실행이 가능합니다
이렇게 오늘은 커맨드 인젝션 공격을 알아보았습니다! 대응 포스팅도 있으니 봐주세요ㅎㅎ
https://com24everyday.tistory.com/33?category=0
'해킹 > 웹해킹' 카테고리의 다른 글
CSRF 공격대응 (0) | 2020.05.03 |
---|---|
CSRF공격 (0) | 2020.05.03 |
커맨드 인젝션 공격 대응 (0) | 2020.05.02 |
브루트포스 공격대응 (0) | 2020.05.01 |
브루트포스(Bruteforce) (0) | 2020.05.01 |