본문 바로가기

해킹/해킹 기법

File Upload CTF 풀이 #2

이제 File Upload 두번째 문제를 풀어보겠습니다.

 

회원가입을 다시 진행해주고 게시판에 들어갑니다

 

 

1편에서 사용했던 webshell.php파일을 그대로 올리려고 하니 

 

php를 업로드할 수 없다고 뜬다.

 

확장자를 webshell.png.php로 바꿔보았는데도 업로드 되지 않았다.

일단 파일이 어디에 저장되고 다운로드 되는지를 알기 위해서 일반 이미지 파일을 하나 첨부했다

 

일반 이미지 파일은 잘 올라갔다

 

파일이 올라갔을 때 

 

png 파일을 올렸으므로 File 시그니쳐가 뭍게 되는데,

 

이 파일 시그니쳐 맨 끝에 웹 쉘 코드를 그대로 붙여준다.

 

다운로드를 눌러도 버프 스위트에 반응이 없어서

 

F12를 눌러 개발자 도구를 살펴봤더니 a 태그에 다운로드 주소가 나와있었다

 

일단은, 이 위치를 기억해두고

 

아까 한 줄 웹쉘을 추가해서 보냈던 패킷에서

 

Repeater로 보내준 다음,

 

파일의 확장자를 php로 바꿔준다.

 

그럼 컴퓨터는 파일 시그니쳐를 보면서 php 코드를 실행시키게 될 것이다.

 

 

Send를 눌러보니 업로드 될 수 없지만 글 작성에 성공했다는 모순적인 상태창이 뜬다...

 

일단 이걸 Show response in browser를 눌러 링크를 복사해준다.

 

 

아까 기억해뒀던 파일 저장 위치를 복사하고 파일 확장자는 php로 바꿔서 GET 방식으로 cmd=ls 명령어를 날려준다.

 

그럼 파일의 대부분은 php 코드가 아니므로 웹 페이지가 이상한 글자로 읽어내려주지만,

 

맨 하단에 php 실행결과가 나오는 것을 볼 수 있다.

 

그럼 cmd 명령어가 먹히는 것을 확인했으니 cmd=find / -name "flag*"를 날려준다.

 

그랬더니 아주 결과가 잘 나왔다.

 

flag.txt의 파일 저장 위치를 획득했다!

 

그럼 cat 명령어를 통해 flag.txt의 내용을 읽어보자

 

맨 하단에 flag 값이 나왔고 (정확한 값은 가렸음) 이를 복사해서 넣어주면 CTF를 해결할 수 있다 끝!