Remote code execution via web shell upload 문제 풀이

burp suit에는 문제와 풀이가 같은 페이지에 존재해서 쉽게 답안지를 볼 수 있다. 하지만 최대한 끝까지 보지 않고 문제 푸는걸 권장한다. 첫 문제풀이의 경우 어렵지 않지만 방향성을 모를 수 있으니 보더라도 첫 쉬운 문제만 보고 나머지는 응용하는 것이기 때문에 응용해서 풀면 되겠다.

 

첫 문제는 /home/carlos/secret 이라는 경로에 파일이 있고 올리는 파일은 php 를 사용하라 했다. 이를 종합적으로 이용해서 문제를 풀어보자 첫 번째로 접근해야할 점은 저 경로에 무슨 파일이 있는지 알아내는 것이다.

이를 위해서는 서버와 소통해서 데이터를 가져오는 <?php ?> 문을 사용해야하고 그 안에 들어가야하는 코드는 해당 경로의 파일을 알아내는 명령어 혹인 웹셀 명령어가 들어가야할 것이다.

 

아래는 해당 문제 사이트에서 파일을 업로드 할 때 어떠한 방법으로 서버에 올리는지 burp suit를 이용하여 파악한 것으로

나는 

poo.php 라는 파일에 

<?php system($_GET['cmd']);?> 를 작성해 올렸다.

해당 코드는 쉘 코드를 작성하는 것으로 get 방식으로 cmd 에 원하는 명령어를 넣으면 작동하게 된다.

이 페이지 정보를 Repeater로 보내고 이름을 File upload로 정한다.

그렇게 되면 Reapeater에서 파일명과 파일 내 데이터를 원하는 걸로 바꿔서 올릴 수 있게 된다. 

 

이제 업로드한 파일을 테스트하기 위해서는 어느 경로로 실행되어야하는지 알아야한다.

이를 알기 위해서는 마이페이지에 이미지를 어디서 불러오는지 알아내야한다 예를들면 image 태그로 불러올 경우  src라는 경로를 지정해줘야하기 때문에 이점을 참고해서 경로를 파악해주거나 다른 이미지 파일들은 어디서 데이터를 불러오는지 확인할 수 있다면 경로를 찾을 수 있다.(무조건 다른 이미지 파일이 불러오는 경로와 내가 업로드한 파일 경로가 같을 수 없으니 이점도 유의해야한다.

위에 대한 자세한 내용은 2에 적어놓을 테니 그것을 보고 참고할 것!

 

이때 코드일 경우 php 서버에서 실행하게 되는데 이 때 파일을 따로 읽어주는 코드를 작성하게 되면 아래와 같이 읽어주기만 하면 된다.

하지만 이 경우 조금 다른 경우가 존재했다. 읽기는 읽히는데 system 코드가 들어갈 경우 해당 결과가 echo를 써도 나오지 않았다.

그래서  다른 방법으로 접근하였다.

(올린 파일을 작동시키는 방법은 해당 경로의 파일을 실행시키기만 하면 되기 때문에 아래와 같이 해당 경로의 파일명만 바꿔주고 실행하면 바로 실행이 되어 결과가 나오게 된다.)

system 명령어가 작동하지 않거나 block했을경우를 생각하여 다른 명령어 코드인 file_get_contents()를 집어넣었다.

아래와 같이 말이다.

<?php echo file_get_contents('/home/carlos/secret');?>

그랬더니 아래와 같이 결과가 출력되었다.

이런 문제를 풀때는 해당 서버가 어떤식으로 파일을 작동시키는지를 잘 생각해봐야한다.

+ Recent posts