wonder
정보보안 스터디 - 10주차 3일 - 파일 인클루드, 파일 업로드 공격과정 본문
☞ File include 취약점
cmd.jpg처럼 이미지 파일인 웹쉘은 특정 조건에서 실행가능합니다.
이미지 파일이건 다른 파일확장자이건 상관없이 file include가 되는 조건입니다.
바로 File include가 되야합니다.
File include에는 LFI(local file include), RFI(remote file include) 가 있습니다.
둘다 파일을 가져오는 것이지만 지정되는 파일이 서버에 있다면 LFI이고 외부에서 가져온다면 RFI입니다.
☞ 개발자들이 include를 하는 이유
한국, 영어, 일본어, 독일어 페이지가 메세지 부분만 빼고 같다고 했을 때
원래는 일일이 3개의 페이지를 복사를 해서 메세지 부분만 수정해야할 것입니다.
개발자는 너무 번거로우니 과정을 단축시킵니다.
달라지는 메세지 부분만 ko.php, en.php, .. 로 만들어 include를 시키는 방법을 사용합니다.
기존 메인페이지에서 언어를 클릭하면 GET방식으로 받아와 언어가 일본어 였을 때 레이아웃은 고정하고 jp.php만 실행시킵니다.
그럼 해커는 서버에 저장되어있는 php나 파일을 아무거나 가져와도 출력시킬 것이니까
여기에 jp.php말고 다른 것을 불러와야겠다고 생각합니다. 웹쉘을 서버에 업로드하고 출력시키는 겁니다.
상위 디렉토리 이동
include방식으로 인하여 서버의 파일에 접근이 가능하기 때문에 서버에있는 원하는 파일을 확인 가능합니다.
include "../../../etc/passwd" 와 같이 웹서버 디렉토리를 넘어서 그 서버의 파일을 모두 들어갈 수 있습니다.
(디렉토리 트레버져, 즉 이동을 마음대로 할 수 있습니다.)
ex) 윈도우 환경 : C:\Windows\System32\drivers\etc\hosts
이 취약점으로 인해 예상되는 시나리오는
1. /etc/passwd로 파악한 계정 정보로 비밀번호를 맞추는 brute force가 가능할 것입니다.
2. /etc/sysconfig/network-scripts/ifcfg-ens33, /etc/hosts, /etc/resolv.conf 등 네트워크 설정을 확인할 수 있으니 네트워크 해킹이 가능할 것입니다.
3. 파일업로드로 jpg에 php웹쉘 코드를 숨겨 웹쉘을 실행한 뒤 웹쉘획득 > 서버장악이 가능합니다.
☞ 여기서, include가 아닌 일반 파일업로드에서는 왜 jpg 웹쉘이 실행이 안됐을까요?
웹에서 cmd.jpg(php코드 삽입) 를 실행하는경우
파일 확장자가 jpg라면 이미지형식으로, php파일이라면 php형식으로 실행시킵니다.
그래서 아무리 코드를 넣어도 php 실행은 시키지 않고 웹에서는 이미지로만 보입니다.
(burp suite에서는 php코드가 txt로만 보입니다.)
include에서 cmd.jpg(php코드 삽입)을 실행하는경우
사실 php파일안에서 php파일을 인클루드하는 경우이기 때문에
txt나 php만 받아들입니다. 이미지 실행은 안받아들이고 코드만 나옵니다.
☞ 파일을 안올려도 include 취약점이 가능합니다.
access.log 에는 웹서버에 접근하는 로그가 기록되는데
보통 GET /lfi_1/files/wonder/image.jpg 이런식으로 기록됩니다.
하지만 GET /<?php echo system($_GET['cmd']) ?>/ burp suite로 변조하여 요청한다면
url상에서는 띄어쓰기 때문에 404 에러가 뜨겠지만 access log에서는 띄어쓰기해서 남습니다.
결국은 access.log를 호출 하면 php 코드로 웹쉘 사용이 가능합니다.
LFI는 파일업로드가 가능하다면(안해도 웹로그를 통해 가능하지만) RCE 쉘 획득을 할 수 있기 때문에 아주 위험한 등급이라고 할 수 있습니다. RCE란 쉘과 같은 코드를 직접 서버에 입력하는 것이 아니라 인터넷 네트워크와 같은 원격으로 실행해서 명령어를 입력하는 방법을 말합니다.
☞ 공격과정
1. 업로드 경로 확인
테스트로 사진을 올려 업로드 문제없이 됐는지, 이름은 어떻게 저장됐는지 경로 확인합니다.
2. php 검증우회
서버측 검증인지 클라측 검증인지 확인을 해주고,
파일확장자 검증에 실수가 없는지 php 올려봅니다.
안된다면 다음 단계로 넘어갑니다.
4. LFI 취약점 페이지 찾기
?lang=ko.php 같이 include 하고 있는 페이지가 있는지 찾습니다.
5. 내부 서버 정보 확인
../../../etc/passwd 로 상위 디렉토리로 넘어가 계정 정보 등이 출력되는지 확인합니다.
6. 웹쉘 올리기
이미지 파일 확장자로 변경하여 그 안에는 php코드를 삽입합니다.
7. 쉘 획득 후 공격
웹쉘에 명령어를 입력합니다.
RFI는http://192.168.2.10/files/cmd.php 와 같이 외부에 웹쉘을 두고 삽입하는건데 어짜피 file include라는 취약점이 생겨야 사용할 수 있고, lfi로도 파일 업로드 없이 사용할 수 있기 때문에 많이 쓰는 편이 아닙니다.
사실 이 취약점은 흔할 수가 없습니다. 변수를 파일확장자로 받아와 include하는 경우가 많이 없기 때문입니다. lang의 변수값을 GET방식으로 받되 요청한 변수값 그대로 응답하지 않도록 설정했을 것입니다.
lang=ko.php > ko.php 파일 요청이 아니라, lang=ko 일 때만 include('ko.php') 하도록 제한해 놨을 겁니다.
즉, 사용자가 입력한 변수값이 그대로 include된다면 위험합니다.
☞ 파일 다운로드 취약점
서버에 있는 임의의 파일을 모두 다운로드 받을 수 있습니다.
다운로드가 뭐든 가능하다면 여러 시나리오가 있겠지만 가장 영향력있는건
1. php소스코드 를 가져와 DB연결 계정정보를 확인하겠죠. > 포트번호를 안다면 DB사이트에 접속해 데이터를 모두 볼 수 있습니다.
2. 그리고 주석을 통해 개발이 어떻게 되어있는지 세부적으로 이해할 수 있습니다.
파일 업로드 VS 파일 다운로드
파일 다운로드가 php를 다운받아 소스코드를 볼 수 있기 때문에 더 위험한 취약점 아니냐고 생각할 수 있지만
파일 업로드는 php를 다운받을 순 없지만 php가 실행되기 때문에 더 높은 등급입니다.
include를 포함한 <?php ?> 코드는 WAS서버에서 이미 실행되서 html에 넣고 웹서버로 응답하기 때문에 우리가 php코드를 볼 수 없고 바로 실행됩니다.
☞ 공격 과정
1. 파일 다운로드 경로를 확인합니다.
파일 다운로드를 하여 burp suite으로 확인하거나, 링크 복사를 하여 경로 확인합니다.
이 경로를 다르게 설정해서 ../../ 디렉토리 트레버져을 통해 etc/passwd는 물론
login.php 소스코드를 받을 수 있습니다.
2. /../../../../etc/passwd 상위 디렉토리로 가서 서버 계정정보 파일을 확인합니다.
(burp suite로 다운로드 응답을 확인합니다.)
참고로 download.php에서 작업하는 게 아니니까 ../ 한번 올라가 줘야됩니다. 그리고 / 막아줍니다.
3. DB 정보 파일을 확인합니다.
글읽기 페이지만해도 db의 계정을 불러오는 페이지 이기 때문에 확인 가능합니다.
아이디, 비밀번호, 해당 데이터베이스를 알아냅니다.
그 외에 다른 php소스코드를 받아 서버 개발코드 확인도 가능합니다.
4. DB 아이디, 비밀번호를 확인해서 기본mysql포트로 DB사이트에 로그인해 데이터를 탈취합니다.
웹쉘을 업로드 시키는 파일업로드와 다르게 파일 다운로드는 웹 소스코드를 확인해서 DB 정보를 탈취할 수 있습니다. 그리고 취약점을 너무 잘 확인할 수 있기 때문에 2차적인 피해를 입힐 수 있습니다. SQL injection부터 시작해서 랜섬웨어 감염시킬 방법들이 있습니다.
한 예시로, 화이트 박스방식 취약점 검사는 고개사가 소스코드를 보안기업에게 모두 제공하는 방식입니다.
모두 제공하게 되면 소스코드가 오픈되서 안좋을 수도 있겠지만 그만큼 어떤 부분이 취약점이고 공격 당했는지 확인이 빠르게 가능합니다.
'hacking study > File Upload' 카테고리의 다른 글
정보보안 스터디 - 11주차 3일 - SUID 권한상승(+파일업로드 시나리오) (0) | 2022.12.25 |
---|---|
정보보안 스터디 - 10주차 4일 - LFI, 파일 다운로드 시나리오 (0) | 2022.12.19 |
정보보안 스터디 - 10주차 1일 - 파일 include, 파일 다운로드 취약점 (0) | 2022.12.16 |
정보보안 스터디 - 9주차 6일 - 파일 업로드 공격 시나리오와 사례 (0) | 2022.12.13 |
정보보안 스터디 - 9주차 4일 - gobuster, Setuid 툴소개 (0) | 2022.12.12 |