음.. FILE 업로드의 상위 공격이라고 보시면 돼요
-LFI(Local File Inclusion) ?
저희가 웹 사이트를 만들 때 가끔 include을 쓰는 경우가 있습니다.
중복되는 함수 코드를 따로 만들고 include 이용해서 포함시키는 경우가 많잖아요.
이 include 성질을 이용하는 겁니다. include는 단순히 코드에 포함시킨다 보단
실행시킨다라고 생각하시면 됩니다.
만약 웹 사이트 측에서 include을 하는데 페이지 경로가 적절히 필터링이 되어 있지 않으면
디렉터리 변경 명령어 입력을 허용하게 되어서 문제점이 발생하게 됩니다.
간단하게 실습을 해볼게요
페이지는 이러하고요 버프 스위트 통해 봐 보시면
page에 file1.php을 가져오는 겁니다. 여기서 include을 이용해서 php문을 포함한 거죠.
그럼 저희는 이 file1.php 말고 ../../../../../../etc/passwd 가져오라고 해보겠습니다.
이렇게../은 상위 폴더로 가라는 명령어입니다.
계속 상위 폴더로 가서 최상위에 etc/passwd 파일을 가져올 수 있죠.
-이걸 통해 php이 담긴 소스 코드를 가져올 수 있겠네요!
할 수 있어요. 그런데 include은 php문을 실행하다 보니 웹 사이트가 나오기만 하지
php문 코드는 안 보여줍니다.
그래서 파일 업로드를 이용하겠습니다.
대충 아무 이미지 파일을 올리고 intercept로 막아서 yoya 빼고 나머지 지운 뒤 코드 작성하겠습니다.
get 방식으로 명령어를 넣을 수 있는 코드입니다.
그러고 나면
저 파일 위치 복사 하고 방금 include 한 페이지에 실행해보겠습니다.
&로 cmd=ls 까지 붙여서 실행하겠습니다.
그럼 코드 보기 위해 cat문을 섞어서 해보겠습니다.
이렇게 php문 까지 있는 소스코드를 볼 수 있습니다.
이게 LFI의 대표적인 공격입니다. 이미지 업로드 취약점이 바로 이 공격을 뜻합니다!
이론적으로 이미지 실행하는 공격은 없습니다.
또 LFI 공격을 이용해서 파일을 업로드 안 해도 공격할 수 있습니다.
이미지 파일도 올릴 필요 없습니다. include가 파일을 실행하는 거잖아요?
그러니 서버의 error.log 또는 access.log 이용해 서버에 무슨 일이 벌어졌는지 적어두는 log을 보는 겁니다.
이 서버에 링크 다 지우고 명령어를 간단하게 적어보겠습니다.
서버 log 기록에 저 명령어가 실행 됐다는 글이 작성되겠죠. 당연히 저 링크는 없으니 400 에러코드가 나고요
그리고 난 뒤에 저희가 이 서버의 log의 위치 찾아서 확인해보겠습니다.
../../../../../../../var/log/apache2/access_log&cmd=ls
이렇게 하면 나와야 합니다.
지금 제 서버가 맛 가서.. 일단 대체 사진으로 해드릴게요
그러니깐 log에 저 한 줄 웹 쉘 코드가 작성이 되고 이제 그 로그 파일을 불러오면서 get 방식으로 cmd 명령을 내리면
그 웹 쉘 코드 덕분에 실행하게 됩니다
access_log 파일은 각각 운영체제 또는 서버마다 기본 위치가 다릅니다. 그런 건 검색하면 찾을 수 있고요
아니면 정보 누출로 알아내는 방법 있습니다!
다음으로 RFI 설명드릴게요
이 공격은 진짜 간단해요
만약 페이지 내에 include로 다른 사이트를 가져로는 경우가 있습니다.
그럼 그 include 할 때 그 사이트 말고 제 서버에 있는 악성 코드 또는 웹 쉘 코드를 실행시키면 되겠죠!
이게 바로 RFL(Remote File Inclusion) 공격입니다.
* 대응 방법
파일 업로드랑 같아요! 파일을 DB로 저장을 하게 합니다.
또는 include 받을 때 필터링을 하거나 강제적으로 idx=2처럼 값을 붙여서 본래 값에서 벗어나지 못하게 합니다.
가장 좋은 것은 파일을 DB에 저장을 하는 게 좋습니다.
힘들면 NFS 즉 파일 전용 서버를 만드는 것이 좋습니다
'보안지식' 카테고리의 다른 글
LFI 실습 문제 (0) | 2023.06.11 |
---|---|
[노말틱 모의 해킹 취업반 2주차 해킹과제 (1)] 인증 우회 가능 공격 방법 정리 (0) | 2023.04.08 |
[노말틱 취업반 2주차 정리] 로그인 인증 (0) | 2023.04.07 |