목차
- File Upload 공격 개요
- 다양한 공격 시나리오
- Web Shell
- 파일 업로드 취약점 진단 시 주의점
File Upload
공격자가 원하는 임의의 파일을 서버에 업로드할 수 있는 공격
1) 발생 원인
- 파일 업로드 시 검증을 제대로 거치지 않음
- 예를 들어 프로필 사진을 업로드하는 곳이라면 이미지 파일만 올릴 수 있게 해야하는데 그런 과정이 없음
2) 발생 위치
- 파일을 업로드할 수 있는 곳
- 게시판, 프로필 사진, 서류 제출, 파일 업로드를 통한 신분증 인증 등
- 파일을 파라미터로 보내고 있는지 버프 스위트로 확인
File Upload 공격 시나리오
서버에 파일 저장해서 할 수 있는 모든 공격
- 서버측 실행 파일
- Phishing
- Deface 공격
- Stored XSS
- DoS 등등..
▷ 서버측 실행 파일
웹쉘, 악성코드, 백도어, 악성 프로그램 등
1) 원리
- 서버에서 사용 중인 스크립트(서버측 스크립트)로 악성 실행 파일을 작성하여 서버에 업로드
- 업로드한 파일을 url로 요청하면 동적 페이지 처리를 담당하는 WAS가 해당 파일을 실행시키면서 공격자의 의도대로 공격이 진행됨
2) 예시
- 아래와 같은 실행 파일을 만듦
//test.php
<?php
echo "hello";
?>
- 이걸 naver.com 서버에 업로드함 (네이버 서버가 php를 사용한다고 가정)
- https://naver.com/어쩌구/uploads/test.php 요청 -> 서버는 php를 보고 WAS에 토스
- 코드 실행한 후 서버에 전달
- hello가 출력되는 페이지 응답받음
3) 영향
- 서버에게 우리가 원하는 코드를 실행시킬 수 있음
- 원하는 명령도 내리게 될 수 있음
- 이 서버는 이제 내꺼임 (서버 장악까지 갈 수 있음)
▷ Phishing : HTML 파일
1) 예시
- login.php 파일을 네이버 서버에 업로드
- naver.com/login.php 링크를 피해자에게 공유
- 링크를 타고 들어간 피해자가 계정 정보를 입력하고 폼을 제출하면 그 정보가 공격자 웹 서버로 전송
2) 영향
- 믿을만한 도메인이면 피싱인 줄도 모르고 공격당할 위험이 있음
▷ Deface 공격
1) 원리
- index 파일 덮어써서 메인 페이지 바꾸기
- https://m.boannews.com/html/detail.html?idx=55936
2) 영향
- 화들짝 놀람
- 보통 핵티비즘* 공격에서 일어남
*핵티비즘 공격이란?
해킹 + 액티비즘 => 해킹으로 "시민운동"할 때 그 "운동"하는 느낌
정치/사회적인 동기를 기반으로 시작되는 해킹
근데 Deface 공격은 저 위에 보안뉴스 링크에서 말하듯이 과시용으로 쓰이는 경우도 많은 듯.
(조선일보 전광판 중딩한테 다 털렸쥬?ㅋㅋ)
▷ XSS
그 중에서 Stored XSS
1) 원리
- 원하는 스크립트가 포함된 파일을 기존 파일에 덮어씀
2) 예시
- 기존 mypage.php를 악성 스크립트가 포함된 mypage.php로 덮어쓰는데 이 파일에 마이페이지의 모든 데이터를 공격자 서버로 보내는 스크립트가 포함된 경우
3) 영향
- 자바스크립트로 할 수 있는 모든 공격 가능
- XSS 공격을 할 수도 있지만 만약 CSRF 포인트가 발견될 경우 공격을 확장시킬 수도 있음
▷ DoS
서비스 거부 공격
1) 원리
- 파일 업로드를 통해 서버 시스템을 마비시켜 사용자가 서비스를 이용하지 못하게 함
2) 예시
- 겁나 큰 대용량 파일을 업로드해서 서버 메모리 꽉 차게 해서 사이트 이용을 못하게 함
- 파일 요청 시 어떤 프로세스를 끊임없이 반복시켜 CPU 소진 등등
3) 영향
- 공격자가 업로드한 파일을 삭제하지 않으면 전체 서비스에 문제가 지속될 수 있음
- 이런 방법을 여러 컴퓨터에서 동시에 진행시키면 DDoS가 됨
이 중에서 서버측 실행 파일 에 초점 맞춰서 실습
서버측 실행 파일 중에서도 Web Shell !
Web Shell
- 인터넷 상에서 OS 명령을 내릴 수 있게 하는 파일
- 인터넷 OS 명령 인터프리터
목차:
1) php 웹쉘 코드
2) 웹쉘 공격의 핵심
3) 간단한 실습
▷ PHP 버전 Web Shell
<?php
echo system($_GET['cmd']);
?>
- cmd 파라미터를 GET 방식으로 받아서 system 함수에 넣어 실행
- echo로 화면에 결과 출력
- 리눅스라면 ls (파일 목록), id (사용자 정보) 등의 명령어를 실행하여 원하는 정보 출력 가능
▷ 웹쉘 공격의 핵심 포인트!
- 서버측 스크립트로 무엇을 사용 중인가
- 업로드된 파일이 서버의 어디에 저장되는가 (이게 어렵다고 함)
☞ 인터프리터를 알아야 실행될 코드를 짤 수 있고, 파일의 저장 경로를 알아야 url로 요청할 수 있음
☞ 이 두 정보를 찾아야 서버측 실행 파일을 업로드하여 공격할 수 있음
▷ 실습해보기
- 이미지 업로드 기능에 취약점 있음
- 웹쉘을 이용하여 /home/carlos/secret 파일의 내용 추출
- 주어진 계정은 wiener / peter
ACCESS THE LAB 버튼을 눌러 문제 사이트 접속 My account 페이지로 들어감 |
My account 페이지로 접속하기 위해 주어진 계정으로 로그인 |
마이페이지의 프로필 사진 업로드 기능 확인 |
업로드한 파일이 저장되는 경로를 확인하기 위해 임의의 이미지 파일 업로드 |
프로필 사진으로 해커처럼 생긴 무언가를 업로드함 |
- 파일 저장 경로를 알아야 웹쉘 파일을 실행시킬 수 있음
- 저장경로를 알아내는 방법은 출력되는 이미지 소스, 주소를 통해 알 수 있음
- 업로드한 파일이 출력되는 곳을 찾아야 함
업로드한 파일이 출력되는 곳을 찾았다면 그 페이지의 html로도 파일 저장 경로를 알 수도 있음 |
혹은 이미지 파일에 마우스 커서를 대고 우클릭 이미지 주소를 복사함 |
복사한 주소를 새 탭의 주소창에 붙여넣고 들어감 |
내가 업로드한 그림이 출력되는 것을 확인하므로써 저장 경로를 알 수 있음 업로드할 웹쉘이 실행될 경로는 /files/avatars/webshell.php |
웹쉘 파일을 올리기 위해 다시 마이페이지로 돌아감 |
- Windows 보안 시스템에 걸리지 않는 웹쉘 파일을 만듦
<?php
$ws = $_GET['cmd'];
echo system($ws);
?>
만든 웹쉘 파일을 업로드함 |
이미지 출력하던 탭에서 이미지 이름 대신 웹쉘 파일 이름을 쓰고 엔터 쳐서 웹쉘 파일 요청 |
서버는 웹쉘 코드를 실행시키려고 할 것이지만 필요로 하는 GET 파라미터가 누락되어 아무것도 출력되지 않음 |
버프 스위트로 가서 웹쉘 요청 데이터를 리피터로 전송 GET 요청 파라미터로 ls (현재 디렉토리 파일 목록 출력) 명령어를 전달함 |
응답에서 ls 명령어에 대한 서버의 응답을 볼 수 있음 |
cat /home/carlos/secret 명령어를 이용해 문제에서 요구했던 파일 내용을 출력할 수도 있음 |
이 방법 말고 file_get_contents 함수를 이용해 파일 내용을 출력시킬 수도 있음 >> echo file_get_contents('/home/carlos/secret'); << |
- 사이트에서 요구하는 형식의 일반 파일 업로드 후 저장 경로 확인
- 웹쉘 파일을 업로드한 후 위에서 확인한 url을 이용해 웹쉘 파일 요청
- 응답을 보내기 위해 서버는 공격자가 원하는 동작을 하게 됨 (코드 실행)
* 서버측 스크립트 종류 알아내는 다양한 방법
위에선 파일 저장 경로를 알아내는 법 위주로 설명했지만 서버측 실행 코드를 짜려면 서버측에서 사용하는 스크립트의 종류 또한 알아야 함.
1) 페이지 확장자 확인
.php / .jsp / .asp / 혹은 .nid나 .co 같은 건 스프링 프레임워크 / ms의 IIS는 보통 asp 사용 / .do는 전자정부 프레임워크(스프링)
2) 서버 응답 헤더 분석
Server 헤더나 X-Powered-By 헤더, 또 쿠키의 세션 아이디를 통해서도 언어나 프레임워크를 유추할 수 있음
3) 소스코드에서 단서 찾기
프레임워크 이름이 언급된 코드나 특정 스크립트(나 프레임워크)만 사용하는 경로가 표시되어 있을 수 있음
4) 서버에서 사용 중인 기술 유추해주는 툴이나 서비스 활용
서비스 예시: Netcraft, BuiltWith
이건 잘 알아보고 사용해야할 듯함 (특히 툴)
무엇보다 경험을 쌓는 게 중요할 듯함
파일 업로드 취약점 진단 시 주의점
▷ 웹쉘은 올리면 안됨!!!!!!!
- 파일 업로드 취약점 진단 목표: 업로드한 파일을 실행할 수 있는지 체크
- POC 코드
<?php
echo "hello";
?>
- 위와 같은 의미없는 코드가 포함된 파일을 업로드하여 진단
▷ 취약점 발견되면??
- 보안 담당자에게 웹쉘 올려서 다른 취약점 찾아도 되는지 질문하는 게 먼저임
- 괜찮다는 대답이 돌아오면 그때 일케일케..
▷ 웹쉘을 사용한 뒤
- 테스트 후 뭐시기 디렉토리에 있는 웹쉘 파일 삭제 요청
- 다음날 웹쉘 삭제됐나 체크해보고 삭제되지 않았다면 재요청
~ 이것이 이 구역 매너 ~
+ 파일 업로드 취약점 점검 시 웹 모의해킹 테스트 범위
웹 모의해킹: 허가했다면 웹쉘 획득 후 웹 상에서만 활용
허가 못 받았다면 POC로 증명까지
'모의해킹 스터디 복습' 카테고리의 다른 글
모의해킹 스터디 14주차(2): 파일 업로드 - 우회 가능 케이스 (0) | 2025.02.05 |
---|---|
모의해킹 스터디 13주차(2): CSRF - 보안 정책, 대응 방안 (0) | 2025.01.22 |
모의해킹 스터디 13주차(1): CSRF vs XSS (0) | 2025.01.17 |
모의해킹 스터디 12주차: CSRF (사이트 간 요청 위조) (0) | 2025.01.14 |
모의해킹 스터디 11주차: XSS - 데이터 추출, 대응 방안 (0) | 2024.12.30 |