[File Upload]
취약점 이유
> 업로드 되는 파일을 검증X
공격 시나리오
1. 웹 쉘 (리버스 쉘을 업로드하기 전 poc같은 느낌)
2. 도스 공격
3. 디페이스공격 index.html
4. 페이지 변조. 피싱 공격.
5. 악성코드 유포.
* 대응 방법!
1. 업로드 되는 파일 DB에 저장.
-> CLOB / BLOB
으로 설정하면 파일을 DB에 저장할 수 있음
(결국 웹서버가 아닌 다른 곳에 저장할 수 있게 만들면 어디든 가능)
> 이미지 파일도 바이너리 형식으로 저장시킴
2. NAS (Network Attatched Storage : 파일 서버)
: LAN으로 연결하는 외장 하드디스크
-> 업로드 파일이 저장되는 서버를 웹서버와 분리.
3. 파일 검증.
- 확장자 검증
- 파일 시그니쳐 검증
- MIME TYPE 검증
- DB로 저장되지 않도록 코드로 우회할 수 있을까?
> 없음.
insert
DB서버에 파일을 저장하는 SQL 구문은 존재
** 이미지 웹 쉘.
.jpg 파일을 올려서 웹서버를 장악한다!!!
1. .htaccess
2. LFI
> Local File Inclusion
-> Include 라는 기능
하지만 include.php의 소스코드를 얻고 싶다고 그냥 LFI 취약점을 이용하면
이미 클라이언트에 건네지기 전에 실행되기 때문에 소스코드를 탈취할 수 없다.
** LFI는 파일 업로드 공격의 상위공격 **
-- 파일을 업로드 하지 않고도 쉘을 딸 수 있다.
> log.
access_log : 침투에 있어 굉장히 자주 사용되는 트릭
<?php echo system($_GET['cmd']); ?>
이상한 요청을 날려도 결국 웹 서버에 access_log라는 형태로 저장되는데,
LFI 취약점을 이용해 이 log를 include하게 끌어와서 실행시키는 방법
GET방식에 <?php ?> 로 한줄 웹쉘을 날린 후, 이 오류 로그를 include시키면
cmd=ls 명령어가 실행된다.
RFI
만약, 원격으로 다른 페이지에서 정보를 가져오는 기능이 활성화되어 있다면
업로드할 필요도, LFI 할 필요도 없음
* File Download 취약점
> 공격자가 원하는 임의의 파일을 다운로드 할 수 있다.
해당 예시에서는 파라미터를 통해 다운로드 될 파일을 요청하고 있는데,
원하는 파일 경로를 입력해주면 해당 파일이 아닌 수많은 다른 파일을 다운로드할 수 있음.
특히 웹 소스 코드를 다운로드받을 수도 있음
or 소스코드 안에 포함된 DB계정 탈취
-- File Download
<?php
fileDownload('./files/userName/'.$_GET['path']);
?>
<?php
fileDownload('./files/userName'.$_GET['path']);
?>
일 수 있기 때문에 /를 먼저 쓸지, .. 을 먼저 쓸지
시도해보아야 함.
** 다운로드 취약점 찾는 팁
1. download 스크립트 있는.
download.php
down.php
2. 파라미터로 파일 이름을 받는가?
or 파일 경로를 받는가?
download.php?idx=2
idx=0 union select '/etc/passwd
** 파일 다운로드 취약점
대응방안
1. DB에다가 파일을 올리게 하는 것
down.php
select *~~~
2. 디렉토리 트레버져.
../../../
'해킹 > Web Hacking' 카테고리의 다른 글
[12주차] 스터디 정리 - 인증/인가 취약점 (0) | 2023.06.15 |
---|---|
File Upload 취약점 대응 방안 - BLOB / CLOB 구현 (0) | 2023.06.14 |
[10주차] 해킹 스터디 정리 - File Upload 공격 (0) | 2023.06.01 |
[9주차] 해킹 스터디 정리 - CSRF Token, SSRF, File Upload 공격 (0) | 2023.05.25 |
[8주차] 해킹 스터디 정리 - XSS Bypass, 대응 방안, CSRF 공격 (0) | 2023.05.18 |