일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- overthewire bandit 문제
- 정보보안
- AWS
- 혼자공부하는네트워크
- 객체지향
- bandit level
- 네트워크이론정리
- sk루키즈
- sk shieldus rookies 23기
- bandit 문제풀이
- 티스토리챌린지
- 데이터와 로직
- 네트워크문제
- 오블완
- bandit level 11 -> level 12 문제풀이
- 취약점진단
- 포인터와 배열
- bandit 비밀번호
- 혼공네트
- 함수와 디버깅
- 보안
- 공부기록
- overthewire 문제
- 네트워크정리
- overthewire bandit 문제풀이
- 해킹
- Dreamhack
- overthewire bandit level 0
- kbdinteractiveauthentication
- web hacking
- Today
- Total
아임노드
실무 환경에서의 주요 취약점_File Upload 본문
File Upload
크게 두 가지 방법으로 진행
- 게시판을 통해 악성파일(웹셸)이 업로드 되는 형태
- Method를 통해 업로드 (PUT)
악성파일 기준
- 악성파일 업로드까지만 (실행안됨) 취약하지 않음(민간기준) > 실행되면 무조건 취약
- 악성파일 업로드만 되도 취약(공공기준)
- 악성파일 : asp, jsp, php, html, sh, exe, py, go, svg 등 프로그래밍 언어 확장자
업로드 취약점에 따른 운영체제
- 진단하는 웹서버의 운영체제 식별에 따라 점검 시간 단축
- ex) 윈도우 서버인데, 내용은 웹셸, 파일 확장자는 jpg로 올리면 실행안됨(시간낭비)
- 운영체제 식별 : ping IP 해보면 됨(보통 유닉스 계열은 ping 허용)
- 유닉스 계열은 확장자 기반이 아닌 권한 기반으로 동작(+x만 있으면 실행된다.)
- 윈도우 계열은 확장자 기반으로 동작
진단 단계
- 운영체제 식별
- 운영체제에 따른 파일 업로드 선택
ㄴ 윈도우 : 확장자 변경 불가 -> 확장자 막혀 있으면 우회 불가
ㄴ 유닉스 : 확장자 변경 가능 -> 실행 가능한지 확인(권한 체크)
- 유닉스 계열일 경우 아래와 같은 우회 방법 사용
ㄴ 확장자 변경 : jsp->jpg로 변경하여 업로드(실행체크)
ㄴ Content Type 변경 > Body 구조에 ContentType(MIME Type)이 나옴(File Upload시)
ㄴ 파일 Header를 추가 (파일은 16진수로 확인 가능, 파일 16진수로 볼때, 보통 8바이트 이내를 Header라고 부름)
보통, 확장자를 가지는 파일은 모두 Header구조를 가짐
* txt는 header 구조가 없음
>> 악성파일 실행 조건 : 1) 업로드 경로(폴더)의 실행권한 필요
2) 업로드 된 파일의 경로 노출
ㄴ 둘 중 하나만 안되도 실행이 안됨
1. 운영체제 식별
> 대상 주소
[nslookup + 도메인 주소]
> 운영체제 확인
ping 날려보가 [ping + ip]
ping 반환시 유닉스
ping 반환되지 않으면 윈도우 서버
물론 방화벽이나 보안장비에 의해 차단되는 걸 수도 있음!
* ping이 되었을 때 ttl 값을 가지고 식별도 가능
ttl값 128 -> 윈도우 계열
64 -> 유닉스 계열
이렇듯 ping을 막는 이유는 운영체제에 대한 정보를 주지 않기 위해서 막기도 한다.
1. 운영체제에 따른 실행권한 (유닉스의 경우)
> 임의의 파일 하나 만들기
내용은 echo 'test'
입력 잘 됬는지 cat으로 확인
> 파일 권한 확인
x라는 문자가 없으므로 실행권한이 빠져있다.
> chmod로 실행권한 주기
2. 확장자 변경하고 실행되는지 확인
실행 가능
* 윈도우의 경우에는 확장자를 변경하면 실행이 안됨
(확장자 기반으로 움직이기 때문)
따라서 윈도우 시스템이라면 판명이 되면,
뒤에 널문자를 넣었을 때 실행이 되는지
또는 이중확장자로 했을 때 인식이 되는지
테스트 해보면 된다.
=> file upload의 경우 유닉스보다 윈도우가 훨씬 보안성이 높다.
본격 실습
1. dvwa에서 실습
file upload(low) 탭
2. 명령어 입력
cp /usr/share/webshells/php/php-reverse-shell.php ./php.php
3. 사용하고 있는 칼리 ip 확인
4. 방금 cp로 복사한 php 파일 오픈
> 오픈된 파일에 해당 ip 부분을 자신의 칼리 ip로 변경
-- 여기까지 웹셸(악성파일) 준비 완료
* 우리가 사용할 ReverseShell : 타겟 시스템 >> 공격자(진단원) 시스템으로 셸 연결(아웃바운드 형태)
ㄴ 악성파일이 업로드 되면 칼리로 셸 연결 가능
5. 다시 dvwa로 돌아와서..
> Browse...버튼 클릭
> Desktop에 있는 php.php 클릭 > 오픈
> Upload 버튼 클릭
> 경로 노출 확인 (악성 파일 실행 조건 2_충족)
> 주소 복사
> 홈페이지 주소 복사 (http:// 반드시 붙여주기)
> 실행권한 확인(악성 파일 실행 조건 1_충족)
실행 권한이 있기 때문에 Connection refused가 뜬 것!
(보통 실행이 안되면 빈 화면만 뜬다)
6. 터미널로 들어오기
>
> 포트 1234 연 상태에서 주소 다시 enter 접속
셸 연결 확인
> bash 셸이라 명령어 입력 가능
웹 서버 설치 경로 확인 (cd /var/www/html)
> 실질적으로 웹 서버가 설치된 곳이 이곳(vulnerabilities) 이므로 이곳으로 이동해 ls 확인
> 리스트 중 upload 폴더 확인
> cd upload
> ls
> source 코드 파일 확인
등
> dvwa 디렉토리도 확인해보자
우리가 올린 php.php 파일이 어딘가에 있을듯!
=> 이렇게 도커 시스템 내부에 들어왔기 때문에 여러가지 것들을 확인할 수 있다.
dvwa
medium 레벨도 확인!
(burpsuite content type 변경)
high 레벨 ( 모두 안됨 )
(여러가지 조합_
+header 추가_GIF89a or png
--> 헤더를 더 길게도 해보기 GIF89aGIF89aGIF89aGIF89a
+content type 변경
+확장자에 널문자 추가(&00) or 이중확장자(;php))
*php 확장자의 경우 숫자를 붙여 사용 가능
ex) test.php1~7와 같이 사용 가능
--> 따라서 다시 filename="php.php7" 이외 숫자도 테스트
=> 소스코드를 보면 jpg,jpeg,png 확장자가 아니면 안되게끔 해놨음
따라서 터미널에서 mv php.php php.jpg로 변경
그 상태에서 burp에서 filename을 php.php로 변경해보면 업로드가 될 가능성이 있음
(이렇게 해도 업로드 안되긴 함)
'[SK shieldus Rookies 23기] 공부 노트 > 취약점 진단 도구 및 활용법' 카테고리의 다른 글
취약점 진단 도구_SQLMAP (1) | 2025.01.03 |
---|---|
실무 환경에서의 주요 취약점_SQL Injection (1) | 2024.12.17 |
실무 환경에서의 주요 취약점_File Inclusion (1) | 2024.12.12 |
실무 환경에서의 주요 취약점_Command Injection (0) | 2024.12.12 |
실무 환경에서의 주요 취약점_Brute-Force 공격 (1) | 2024.12.07 |