Today I Learned …
[수업] 10주차 정리 본문
* 해당 주차의 수업 내용을 정리합니다.
* 해킹 대회 유형
CTF
취약점 찾는 대회(버그바운티)
1개 - 1주일
* 해킹 실력을 빠르게 올리는 마인드(마음가짐)
→ 겸손/무시X
모의해킹 → 자존심 : 모르는 것을 두려워 함! (모른다고 말하는 것을)
아는 척 → 헛소리 → 문제 발생
→ 모르면 모른다는 것을 인정하고 배우기
* File Upload
- 웹 서버 측 실행 코드 업로드
webshell.php.jpg
<?php
system($_GET['cmd']);
?>
* LFI, RFI
RFI(Remote File Include) : 외부 서버 코드 불러와서 인클루드
LFI(Local File Include) : 서버에서 코드 업로드 인클루드 (업로드되어있는 파일을 이용해서 공격)
FI (File Inclusion)
> Include (네비바, 프레임 등 웹에서 공통적으로 띄워야하는 부분을 따로 관리하기 위함)
사용자 입력을 받아서 Include → 매우 위험한 발상
include($_GET['url']);
- 서버 측 파일 접근 가능
: 개인 정보
: 소스 코드
→ 브라우저에서 php를 안보여줘서?
→ 파일을 참조만해서?
→ ...
include();
1. 특정 파일을 가져와서 붙여넣어주고
2. 서버 측 코드를 실행해준다. → 그래서 소스 코드가 그대로 보이지 않음!
→ 그럼 어떻게 .php를 볼 수 있을까?
* LFI
<?php system($_GET['cmd']); ?>
~.jpg&cmd=ls
LFI 취약점이 있다면, 파일 업로드를 하지 않고도 log를 이용해 쉘을 획득하는 것이 가능하다.
/opt/lampp/logs/access_log
인터넷에 아파치 로그 경로 검색해보거나 phpinfo.php에서 error_log 찾아보면 됨 (같은 경로에 있음)
* RFI
위에 다 필요없고 개인서버에 웹쉘.txt 만들어서 normaltic.com/webshell.txt 로드만 시키면 됨...
VPS
* 차이점 (발생원인)
파일 업로드 취약점 : file_upload.php
파일 인클루드 취약점 : include()
* File Upload의 대응 방안
- 파라미터 난수화
- Include X
- 사용자 파라미터 검증
- 확장자를 강제로 고정 → 실행 차단
* 근본적인 대응 방안
1. DB 내 File ID → 파일 업로드 경로 숨겨서 막자!
File ID path realName
1 /upload/ test.jpg
2 test.php
fileDownload.php?FileID=1
너무 믿어서 이것저것 다 검증안했다가 SQLi로 경로 노출되면 끝임..
근본적 대응 방안 아님.
2. DB File ID 관리 & 실제 저장되는 곳을 웹 경로에서 분리
웹 루트 경로 : /var/www/html
파일 업로드 경로 : /upload/
webshell.php
/upload/webshell.php
normaltic.com/webshell.php
fileName : ../../../var/www/html/webshell.php
/var/www/html/webshell.php
3. File을 웹서버에 저장하지말자!
: DB
: NAS
Q. RFI, LFI 어떻게 실습?
File Inclusion → 사용자로부터 입력을 받아서 include
lang=../../../../../../../../etc/passwd%00
관련 기능 안만들었다면 취약점 없음
dvwa에서 실습 가능
'Study > 수업' 카테고리의 다른 글
[수업] 12주차 정리 (0) | 2021.12.30 |
---|---|
[수업] 11주차 정리 (0) | 2021.12.23 |
[수업] 9주차 정리 (0) | 2021.12.09 |
[수업] 8주차 정리 (0) | 2021.12.02 |
[수업] 7주차 정리 (0) | 2021.11.25 |