HLS를 이용한 라이브 라디오 방송 웹 앱 개발기 (2) 를 작성한지 꽤 오랜 시간만에 3편을 작성해본다.

 

나중에 써야지 써야지 하다가 귀찮아서 작성하지 않고 있었는데, 더이상 까먹기 전에 이어서 작성을 해보려고 한다.

 

2편까지에서는 브라우저단에서 마이크 API를 이용해서 음성 파일을 저장하는 것 까지 했었다.

 

이제 이 음성 데이터를 서버로 전송을 시켜야 한다.

 

 

일단 파일형태로 전송을 하는 것을 생각을 했는데, 웹에서 파일 업로드시 많이 사용하는 방식이 POST 메소드로 form으로 데이터를 날리는 방식이다.

 

이때 인코딩 타입은 multipart/form 형식으로 보낸다. 바이너리 값 그대로 HTTP 패킷에 담아서 보내는 방식이다.

 

Nodejs에서 multipart/form-data를 받는 부분을 작성을 하려고 했는데 Nodejs에서 해당 데이터를 받는 것은

 

Express.js 프레임워크에서 Multer라는 미들웨어를 사용하는 방식밖에는 잘 몰랐다.

 

하지만 나는 가볍게 만들어볼 생각에 Express.js 프레임워크는 사용하고 싶지 않았던 탓에, multer말고 multipart/form 을 파싱할 수 있는 nodejs package를 찾아야 했다.

 

 

그래서 가장 간단한 방법 중 하나인, multer의 코드를 까 보았다..!

 

https://github.com/expressjs/multer/blob/master/doc/README-ko.md

 

expressjs/multer

Node.js middleware for handling `multipart/form-data`. - expressjs/multer

github.com

 

지금 위 링크로 가 보니, 내부적으로 busboy를 사용한다고 대놓고 나와있다. 작년에 프로젝트 작업을 할 때에는 코드를 까서 알아냈었는데...

 

어쨋든 busboy란 녀석을 multer가 내부적으로 사용한다는 것을 알 수 있다.

 

https://github.com/mscdex/busboy

 

mscdex/busboy

A streaming parser for HTML form data for node.js. Contribute to mscdex/busboy development by creating an account on GitHub.

github.com

 

busboy 문서를 보면 html form data를 파싱할 수 있다는 것을 알 수 있다.

 

어쨋든 이녀석을 이용해서 서버단을 작성해준다.

 

 

그리고 클라이언트 단에서 multipart/form-data 인코딩 방식으로 된 form data를 서버로 보내는 것도 해 주어야 하는데,

 

요녀석은 XHR(XMLHttpRequest)를 이용해서 간단하게 작성해 보았다.

 

처음에는 이녀석을 jQuery 라이브러리를 통해서 접했는데, Low하게는 브라우저단에 구현된 XHR 객체에서 서버와의 동적 비동기 통신이 가능하다는 것을 나중에 알게 되었다.

 

여기까지 작성해본 코드 스냅샷 링크이다.

 

https://github.com/Einstrasse/hls-service/tree/b52043c77ec377b70476619556d3a6e187823cb3

http://ctf.j0n9hyun.xyz:2034/

 

http://ctf.j0n9hyun.xyz:2034/

 

ctf.j0n9hyun.xyz:2034

Home이라는 이름의 문제이다.

 

대충 요런 페이지인데, 뭐 아무것도없다.

 

소스를 봐도

별게 없다.

 

힌트로는 "머리말" 이라는데, 조금 고민을 해 보았다.

 

 

머리말->머리 ->Head -> Header??

 

HTTP Header와 관련된 것이라는 생각이 좀 들었다.

 

버프슈트로 한번 패킷을 잡아보았는데 별게 없었다.

 

그래서 검색 신공!!

 

 

X-Forwarded-For라는 헤더가 있다고 한다. 프록시를 사용할때 원래 아이피를 기록하는 그런 헤더인데,

 

이녀석을 버프슈트에다가 박아서 요청을 한번 때려보았다.

와우

구웃. 풀엇다 ㅎㅎ!!

'해킹 & 보안' 카테고리의 다른 글

checksec.sh Linux ver  (0) 2019.07.25
Caesar Cipher Text Online Codec (Batch)  (0) 2019.07.25
[HackCTF] Web - Guess me 풀이  (0) 2019.07.16
[HackCTF] Web - Hidden 풀이  (0) 2019.07.16
버프슈트 설정하기 (Burp suite configuration)  (0) 2019.06.18

https://ctf.j0n9hyun.xyz/challenges#Guess%20me

100점짜리 웹 문제다.

 

딱 보이는건 extract($_GET)

 

GET query parameter로 저기 있는 변수들을 poisoning할 수 있다. 원하는 값으로 바꿀수 있단 뜻.

 

$filename 을 원하는 값으로 바꿔서 $secretcode를 원하는 값으로 바꾼 뒤, $guess랑 똑같게 만들고 싶은데, 

 

저 서버에 있는 파일들 중 존재하는 녀석의 파일 명과, 그 내용을 알아야한다. 따라서 좀 고민하던 차에

 

php file_get_contents 함수에 대해 한번 검색해보았다.

 

http://docs.php.net/manual/kr/function.file-get-contents.php

 

PHP: file_get_contents - Manual

file_get_contents (PHP 4 >= 4.3.0, PHP 5, PHP 7) file_get_contents — Reads entire file into a string 설명 string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = 0 [, int $maxlen ]]]] ) file_get_con

docs.php.net

설명을 보는데, 이게 웬걸? 웹 리소스도 가져올 수 있는 것 처럼 보인다. ㅎㄷㄷ!!

그래서 바로 goorm IDE를 켜서 퍼블릭 도메인에 서버를 하나 띄웠다.

 

 

그리고

 

URL을 구성해서 요청하니 flag가 나온다. 하핫

+ Recent posts