웹 애플리케이션 취약점 CVE-2017-5638
CVE-2017-5638 은 jakarta Multipart parser를 기반으로 한 파일 업로드를 할 때 HTTP Request 헤더의 Content-Type을 변조하여 원격 코드 실행이 가능한 취약점이다.
해당 취약점은 Apache Struts 2.3.5~2.3.31, 2.5~ 2.5.10 버전에서 일어난다.
실습을 진행하기 위해 환경을 구성하도록 한다.
칼리리눅스를 vmware에 설치해주고 실행해준다.
이전 칼리 리눅스는 root, toor로 로그인을 했지만
2020년부터의 칼리리눅스는 ID: kali PW: kali 를 이용해 로그인한다.
다음은 도커를 설치해준다.
apt update를 먼저 해준다.
sudo apt update
다음은 도커를 설치한다.
sudo apt install docker.io -y
도커 서비스를 실행해준다.
sudo systemctl start docker
실행중인 서비스 목록을 보기 위해서는 다음 명령어를 실행해준다.
sudo docker ps
이제 톰캣을 설치해주도록 한다.
tomcat 검색을 해준다.
sudo docker search tomcat
목록 중에서 활용할 tomcat을 골라 설치해준다.
consol/tomcat-7.0을 설치해주도록 한다.
docker run 명령어를 사용하면 해당 컨테이너가 없으면 설치 후 실행까지 진행한다.
sudo docker run -d -p 8888:8080 --name tc consol/tomcat-7.0
다시 sudo docker ps 명령어를 사용하면 톰캣 서비스가 실행중인 것을 확인할수 있다.
만약 도커 컨테이너를 중지하고 삭제하기 위해서는 다음 명령어들을 사용한다.
sudo docker ps -a # 모든 컨테이너 확인
sudo docker stop <컨테이너 이름 또는 ID>
sudo docker rm <컨테이너 이름 또는 ID>
이제 서비스가 실행중이므로 접속해본다.
웹 브라우저를 실행하고 url에 자신의 ip인 127.0.0.1:8888로 들어간다.
서비스 실행을 확인할 수 있다.
우측 manager app을 누르고 id, pw : admin/ admin 으로 접속을 할 수 있다.
서비스가 실행중이기 때문에 가상의 칼리 리눅스가 아닌 원래의 운영체제의 웹 브라우저에서도 접속이 가능하다.
이때는 127.0.0.1이 아닌 칼리 리눅스의 ip를 알아내서 접속을 한다.
ifconfig가 되지 않으면 ip addr 명령어를 통해 알 수 있다.
이제 환경 구성이 끝나고 apache struts의 취약점 실습을 하도록 한다.
해당 CVE-2017-5638의 취약한 struts 버전인 2.3.31버전을 사용한다.
manager app에서 아래로 내리면 다음과 같은 부분이 있다 파일을 배포하여 서비스가 가능하게 되어있다.
여기에 struts 2.3.31버전을 올려 배포하도록 한다.
struts 의 app부분을 보면 다음과 같이 5개가 있는데 아무거나 골라서 사용하도록 한다.
struts2-showcase를 사용해보았다.
파일 업로드를 하고 Deploy 버튼을 눌러준다.
그러면 다음과 같이 네번째에 서비스가 실행된 것을 볼 수 있다.
네번때 /struts2-showcase를 누르면 다음과 같은 창이 나온다.
이제 해당 서비스를 공격해보도록 한다.
exploit-db 사이트를 이용한다.
https://www.exploit-db.com/exploits/41570
위 주소에 해당 서비스의 공격코드가 담겨있다.
exploit 옆의 다운로드 표시를 눌러 다운로드를 받거나 명령어를 사용해주도록 한다.
wget https://www.exploit-db.com/download/41570
mv 41570 41570.py
다운로드를 받고 파일의 이름을 변경해주었다.
이제 공격코드를 실행하도록 한다.
그냥 python 41570.py를 실행하면 다음과 같이 나온다.
이는 실행 가이드를 보여주고 있다.
인자로 url과 cmd가 필요함을 알려주고 있다.
이제 제대로 공격을 실행해본다.
url에는 이전의 웹페이지의 url을 넣어주고 cmd에는 실행할 명령어를 입력해준다.
python 41570.py http://192.168.56.128:8888/struts2-showcase/index.action ls
ls 명령어를 사용했지만 다른 명령어들도 사용할 수 있다.
이를 통해 해당 시스템을 자기 마음대로 할 수 있는 것이다.
다운로드 받은 41570.py의 코드를 살펴보면 HTTP Request 헤더의 Content-Type 부분을 매우 긴 payload로 작성하고 그곳에 명령어를 포함하는 코드가 쓰여진 것을 확인할 수 있다.
'Security&Hacking > 시스템 해킹' 카테고리의 다른 글
스택 오버플로우 (0) | 2020.05.03 |
---|---|
취약점 점검 도구 Nessus (0) | 2020.05.03 |
해커스쿨 ftz level20 (macOS) (0) | 2020.01.19 |
해커스쿨 ftz level19 (macOS) (0) | 2020.01.19 |
해커스쿨 ftz level18 (macOS) (0) | 2020.01.19 |