php에서 코드를 작성할 때, 긴 코드일 경우 다른 파일을 불러오는 Include 를 사용하기도 해요.
예를들어 login.php 에서는 다음과 같이 db접속 코드를 삽입할 수 있어요.
<?php
include('dbConfig.php');
?>
include
include_once
require
이 비슷한 역할을 해요.
File Include 취약점 (LFI 취약점 : Local File Include)
위와 같은 코드였을 때, include로 불러온 파일은 php 코드 안쪽에 그대로 텍스트가 적히기 때문에
php 코드인 경우에는 실행이 될거고, 그냥 txt 라면 그 텍스트가 출력될 거에요.
webshell.jpg 의 내용이
<?php echo system($_GET['cmd']); ?>
인 경우, 해당 코드가 바로 실행되어 버리죠.
그럼 ?cmd=
저 영역에 명령어를 넣어서, 서버에 존재하는 임의의 파일을 모두 가져올 수 있게 됩니다. (단, 소스코드 빼고!)
소스코드는 php로 되어 있기 때문에, 가져올 수 없습니다. (가져오지 않고 실행 됩니다.)
파일 업로드는 막혀있지만, LFI 취약점이 존재하는 경우
업로드를 하지 않더라도 웹 로그로 간접적인 영향을 줄 수 있어요.
../../../../../../opt/lampp/logs/access_log
실행가능한 파라미터를 입력하면, 해당 웹로그에서 실행된 결과를 바로 확인할 수 있어요.
핵심은 서버에서 실행되는 파일을 실행하지 못하게끔 하는 것이에요.
1. 파일 이름 난독화 (파일 경로를 감추는 전략) 😥
조건부 대응 방안으로 언제든지 뚫릴 수 있어요.
특히 SQLi가 있다면 의미가 없어요.
2. 확장자 화이트 리스트 기반 필터링 😥
역시 미흡해요.
3. DB에 파일을 저장하는 방법 ❤
BLOB / CLOB (파일 저장 형식)
데이터 테이블 안에 바이너리 형태로 저장하면, 실행할 여지가 전혀 없어요.
4. NAS Server 이용 ❤
DB에 파일을 넣는것이 부담스러울 때, DB외에 별도의 서버를 이용해서 저장해요.
파일 저장 서버를 별도로 이용하는 것으로서, 해당 NAS에는 PHP가 설치되어 있으면 안 돼요.
웹서버와 분리해서 관리해야 합니다!
LFI와 RFI
LFI는 공격자가 웹 서버 내부에 있는 파일을 포함시키는 공격이고,
RFI의 경우 Remote File Include로 외부 원격 서버에 있는 파일을 포함 시키는 공격이에요.
(해당 파일이 원격지에 위치함)
'모의해킹 공부하기 > 모의해킹 수업 복습' 카테고리의 다른 글
| [7주차-2] Blind SQL Injection (0) | 2024.02.20 |
|---|---|
| [15주차-3] File download 취약점 (0) | 2024.02.14 |
| [15주차-1] File Upload 공격 (이중확장자) (0) | 2024.02.14 |
| [7주차-1] Error Based SQL Injection (0) | 2024.02.08 |
| [14주차] File Upload 공격 및 대응 방안 (0) | 2024.02.07 |