파일업로드 공격
: 공격자가 임의의 파일을 업로드 할 수 있는 공격
파일 업로드공격 시나리오
파일 업로드 취약점이 발생할 경우 명령 실행, 파일 탐핵과 같은 서버측의 공겨에 더불어서 다른 취약점의 유발 및 바이러스 배포, 쉘 스크립트 삽이 ㅂ등 그 시스템으로 가능한 모든것을 할 수가 있음.
다만 공격자들이 일반적으로 가장 선호하는 공격은 웹쉘을 업로드 하는 것임.
웹쉘 공격 방법
1. 서버에서 실행이 가능한 파일 확인
2. 실행이 가능한지를 확인.
-> 업로드 된 파일의 위치를 알아야 함.
3. 웹 쉘의 업로드 및 실행.
업로드 된 파일의 위치 탐색 방법
1. 파일을 다운로드 가능한 경우
다운로드를 받아보기.
이미지의 src속성을 확인하기.(우클릭의 이미지 주소 복사, 개발자도구, 웹 요청 확인 등)
2. 파일을 다운로드 불가능한경우
SQL Injection
HTML 소스코드의 주석 확인
웹 쉘을 통한 공격 시나리오
일반적으로 공격자들이 선호하는 웹 쉘 공격 시나리오는 다음과 같음
1. 소스코드 탈취
: DB계정 및 주소 탈취
소스코드 탈취는 다른 취약점을 찾는데 도움이 되는 등 다른 이점도 있지만 주 목적은 DB계쩡정보를 탈취하는것임
일반적으로 소스코드 내에는 DB에 접속하기 위하여 DB의 계정정보가 존재함. 이 외에도 웹 쉘을 통해 ip주소등을 함께 탈취할 경우 원격으로 DB에 접속하여 내용의 확인 및 탈취가 가능해짐.
DB탈취를 위해서 SQL문이 있을많한 곳을 주로 살펴봄. 즉, 데이터를저장하거나 조회, 수정하는곳.
2. Revers Shell 연결
연결방법은 NC(Netcat)명령어를 통해 포트를 열고 서버에 이 포트를 통해 쉘을 전송하라는 명령을 입력하여 연결이 가능하다.
리버스쉘을 연결하는 이유는 두가지가 있다. 첫번째로 웹쉘의 경우 이전 명령이 적용이 되지 않는다. 만약 cd ../ 명령을 통해 상위 디렉토리로 이동을 했다고 가정해보자. 다음에 touch a.txt.명령어를 치게 되면 이동한 상위 디렉토리가 아닌 웹쉘의 현제 디렉토리에 파일이 생성될 것이다. 마찬가지로 루트권한을 획득하여도 다음 명령은 루트권한이 사라질것이다.
이를 막기 위해서는 쉘을 직접 연결하는 방법이 필요하다. 그 방법이 바인드 쉘과 리버스 쉘이다.
바인드 쉘과 리버스 수ㅐㄹ의ㅏ 차이점은 포트를 여는곳과 들어가는곳이 서로 바뀌게 된다. 바인드 쉘의경우 포트를 서버가 열게된다. 그리고 공격자의 서버가 그 포트를 통해 들어가 쉘과 연결이 된다. 반면 리버스 쉘은 포트를 공격자의 서버가 열게 된다. 그리고 피 공격서버는 공격자 서버의 포트를 통해 들어오게 되어 쉘이 연결이 된다.
그렇다면 바인드 뒐이 아닌 리버스쉘을 사용하는 이유는 뭘까?
Firewall의 존재 때문이다. Firewall의 보안정책은 포트를 통해 들어오는 inbound에 대한 정책이 굉장히 까다롭다 이에 더해서 포트가 갑자기 열리게 된다면 이에대한 탐지 또한 쉬울 것이다.
반면에 outbound에 대한 Fierwall의 정책은 굉장히 널널하다. 요새는 특히 더 그런데 이유는 API와 같이 다른 포트로 들어갈 일이 많은것에 더해 API가 어떠한 포트를 쓰는지도 몰라 웬만한 포트의 경우 열어두기 때문이다.
추가적으로 outbound정책중에 443포트는 무조건 열어야 한다. 이 포트는 HTTPS가 사용하기에 웹서비스를 하는경우 전부 열어두어야 하기 때문이다.
* NC명령어
: TCP/UDP 프로토콜을 사용하여 네트워크 연결을 통해 데이터를 RW하는 명령줄 유틸리티.
Bypass 방법
1. Content-type 변경
text/php, image/jpeg 등으로 표기되며 어떠한 파일인지를 알려주는 역할을 함. 기능에는 영향이 없음
프록시 툴과 같이 요청을 중간에 가로채서 변경하면 됨.
2. 파일의 저장 위치 변경
업로드 되는 저장위치에 실행권한이 없을 수 있음. 이경우 파일명에 ../등을 삽입하여 경롤르 변경
필터링 등이 있는경우 URL 인코딩, askii 인코딩, 이중 인코딩 등으로 우회
3. 파일 확장자 변경
블랙리스트 기반 필터링이 존재 할 경우 그 코드를 실행 가능한 다른 확장자 사용.
php를 필터링 할 경우 phtml과 같은 다른 확장자명의 사용이 가능함.
4. 확장자 우회
화이트리스트 기반 필터링의 경우 이중확장자나 null 바이트 사용이 가능
text.jpg.php
text.php%00.jpg
5. File시그니쳐 삽입
File 시그니쳐를 확인하는 경우가 있음. 이경우 파일 내용에 시그니쳐를 삽입하거나 그 파일 하단에 코드를 작성.
6.설정파일 변경
.htaccess와 같은 설정파일의 내용을 변경하여 원하는 확장자명이 특정 코드를 실행가능하게 설정
AddType application/x-httpd-php .원하는 확장자.
'모의해킹 및 보안' 카테고리의 다른 글
Commend Injection (0) | 2023.06.03 |
---|---|
Netcat (0) | 2023.06.02 |
NoSQL Injection (0) | 2023.05.31 |
파일 업로드 취약점 (0) | 2023.05.30 |
CSRF attack scenario (0) | 2023.05.28 |