일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 콘서트
- Django
- 예매
- ubuntu
- 개발자 도구 우회
- linux
- uvicorn
- 프록시
- fiddler
- 일렉트론
- 자동화
- 직링
- App
- nginx
- 개발자 도구
- 티켓
- GPT
- realtime
- 피들러
- selenium
- WebRTC
- AWS
- EC2
- puppeteer
- 티켓링크
- FastAPI
- WSL
- 퍼피티어
- kotlin
- 자동화 도구
- Today
- Total
개발 삽질 일지
[NetFunnel 우회] 직링 구하기 본문
지난 글에서는 직링에 대한 간단한 소개와, 페이지 내에서 개발자 도구(F12) 혹은 크롬 익스텐션을 이용해서 몇몇 과정을 건너뛰고, 바로 좌석 선택 화면으로 이동하는 방법에 대해 소개해드렸습니다. 하지만 테스트 해본 결과 몇몇 페이지에서는 "잘못된 접근입니다."라는 오류 메시지가 뜨기도 했습니다. 이번 글에서는 이러한 오류 메시지가 뜨는 이유와, 해결 방법에 대해 이야기하고자 합니다.
⚠️ 이 글은 기술적인 호기심과 실험적인 분석을 위한 목적으로 작성되었습니다. 실제 예매 과정에서 이를 악용하거나 무단으로 활용하는 것은 서비스 약관 위반이 될 수 있으며, 법적 책임이 따를 수 있습니다. 또한, 이번 글에서는 코드 구현보다는 개념과 작동 원리에 집중하니 가볍게 읽어주시길 바랍니다.
오류 메시지 원인은?
원인을 해결하는 방법 중 가장 좋은 방법은 "되는 동작"과 "되지 않는 동작"의 비교입니다. 지난 번에 작성했던 버튼 클릭 시 POST되는 값들을 출력하는 코드를 사용해 실제 사용자가 예매 버튼을 눌렀을 때와, 코드를 통해서 눌렀을 때의 차이점을 찾아봅시다. 지난번과 마찬가지로 몇가지 변수들을 지우고, 변수 명도 수정했습니다. 위에가 실제 사용자가 버튼을 눌렀을 때 출력되는 값, 아래가 코드를 통해 실행했을 때 출력되는 값입니다. netfunnel_key에 실제로 값이 있는 것을 확인할 수 있습니다. 서버에서 netfunnel_key를 가지고 있어야 정상적인 사용자로 인식하는 모습입니다.
VM191:5 Method: post
VM191:6 Target: sample_target
VM191:9 id: sample_id
VM191:9 netfunnel_key: :key=sample_key&
Method: post
VM423:6 Target: sample_target
VM423:9 id: sample_id
VM423:9 netfunnel_key:
NetFUNNEL 이란?
NetFunnel은 웹사이트나 애플리케이션에서 갑작스러운 트래픽 폭주로 인한 서버 과부화를 방지하기 위한 가상 대기실 솔루션입니다. 트래픽이 설정해둔 값을 초과하면, 초과한 사용자들을 가상 대기실로 안내하고 순차적으로 입장시킵니다. 이를 통해 사용자들에게도 예측 가능한 대기 시간을 제공해줍니다.
NetFunnel이 동작하는 방식은 다음과 같습니다. 사용자가 페이지에 접근하면 JavaScript 혹은 iframe 등을 통해 NetFunnel 서버에 접속하게 됩니다. NetFunnel_Action 등의 함수 호출로 대기열에 진입하고, 사용자 정보(로컬 혹은 쿠키에 로그인 시 저장되는)를 활용해 대기 정보를 관리하며 접속을 허용/대기/차단합니다.
그렇다면 이를 우회할 방법은 없을까요? 구글에 넷퍼넬 우회를 검색하면 많은 방식들이 나오고 코로나 때 백신 대기열 우회했다는 기사들도 많이 보입니다. 그렇다면 우회 방법이 아직까지 작동하나 테스트 해보겠습니다.
'비행기 모드' 등 비공식 백신 예약...당국 "최대한 찾아 조치 중"
방역 당국이 코로나19 예방접종 사전예약 시스템에 우회 접속하는 등 비공식적인 방법으로 예약하는 경로를 파악해 차단하고 있다고 밝혔다.20일 정우진 코로나19 예방접...
www.ytn.co.kr
1. NetFunnel.gControl.next.success({}, {data:{}})
NetFunnel은 단순히 프론트엔드(개발자 도구)로 제어할 수 있는 구조가 아닙니다. 서버가 판단을 하여 내부적으로 위 코드를 호출하고, 통과가 되면 키를 삽입해줘서 예매를 진행하게 도와줍니다. NetFunnel.gControl.next.success({}, {data:{}})의 역할은 단순한 콜백 처리기입니다. 과거에 우회가 가능했던 이유는 아마 서버에서 넘기는 키를 실제로 검증하는 로직이 없어서 였던 것 같습니다. 즉 줄을 다 섰다고 인정하고 키를 줄 것으로 예상하지만, 실제로는 JavaScript 레벨에서만 통과되었다고 착각할 뿐, 서버에서 키 발급을 해주지 않습니다.
2. NetFunnel.ts_bypass = true;
ts_bypass는 NetFunnel의 테스트용 우회 플래그입니다. 보통 개발자나 QA가 대기열을 거치지 않고 바로 success 콜백으로 진입할 수 있도록 설정하는 디버그 변수로 사용되는데, 1번과 동일한 이유로 실패할 가능성이 매우 높습니다. 실제 운영환경에서는 key 검증을 필수인 사이트들이 많습니다.
NetFunnel.gControl.next.success()나 ts_bypass = true 같은 방식은 클라이언트 수준의 UI만 바꿀 뿐, 서버 검증을 우회하지 못합니다. 하지만, 아직까지 가능한 사이트들이 존재할 수 있습니다. 이론적으로 키를 검증하지 않는 구조로 되어있거나, 키가 공개되어있는 경우에는 가능할 것 같습니다. 하지만 메이저 티켓 판매 사이트는 아마 전부 막혀있을겁니다.
그럼 방법은?
우리가 먼저 키를 받아오는 방법도 있을 것 같습니다. 그렇다면 키를 어떻게 구할 수 있을지가 중요하겠죠. 대기열에 입장하는 순간 key=...를 찾고, 그걸 바로 사용해서 우회하면 될 것 같습니다.
하지만 그것은 틀렸습니다.
감지할 수 있는 키는 인증되지 않은 키입니다. 입장 허용 시점에만 진짜 키를 서버에서 발급해주기 때문에 그 전에는 아무리 쿠키, input, script 등등을 감지해도 그럴싸한 가짜 키밖에 받지 못합니다. 진짜 인증은 서버에서 암호화된 세션 정보로 판단을 하기 때문에 클라이언트 측에서 먼저 키를 알 수 있는 구조가 아니게됩니다. 즉, Netfunnel 서버가 통과시켜도 된다고 판단했을 때만 진짜 키를 발급해줍니다.
결과적으로 NetFunnel은 콘솔, 혹은 크롬 익스텐션 수준으로 뚫을 수 없습니다.(뚫리는 사이트도 있을 수 있습니다.) 대기열이 없거나, Netfunnel 서버를 사용하지 않는 경우 충분히 가능하지만, 서버가 존재하는 경우 조금 더 딥하게 내려가야지 조그마한 빛을 발견할 수 있습니다. 실제 사용자처럼 날짜를 선택하고, 시간을 선택하고 예매버튼을 누르는 동작을 구현해 서버를 속여야지 대기열에 조금이라도 앞 순번을 받을 수 있을 것 같습니다.
다음 글 안내
이번 글에서는 NetFunnel의 원리와 우회에 대한 시도와 실패, 그리고 이유에 대해 살펴봤습니다. 결론은 명확합니다. 콘솔 몇줄로 NetFunnel을 뚫는 건 이제 거의 불가능합니다. 줄을 건너뛰지 못한다면, 줄 제일 앞에 서는 방법을 찾아야죠. 다음 글에서는 실제 사용자의 동작을 흉내 내는 방식을 ㅡ 1. 날짜/시간을 자동으로 선택하고, 2. 예매 버튼이 나타나는 순간 클릭하는 ㅡ 실험해보려 합니다. 진짜 사용자인척 하는 자동화, 가능할까요?
[직링 개발자 도구] 사용자 동작을 흉내 내서 콘서트 예매하기
지난 글에서는 Netfunnel에 대한 간단한 소개와, 직링으로 접속 시 "잘못된 접근입니다."라는 오류 메시지가 뜨지 않게하는 우회 방법들을 소개해드렸습니다. 하지만 지금은 콘솔창과 크롬 익스텐
gnaaak.tistory.com
언제나처럼 — 시작은 삽질이지만, 끝은 지식입니다.
'자유로운 개발일지 > 실험일지' 카테고리의 다른 글
[직링 자동화 프로그램] 퍼피티어, 일렉트론을 이용한 콘서트 예매 프로그램 (2) | 2025.05.26 |
---|---|
[직링 자동화 도구] 셀레니움을 이용해 콘서트 예매하기 (1) | 2025.05.24 |
[직링 자동화 도구] 퍼피티어를 이용해 콘서트 예매하기 (1) | 2025.05.23 |
[직링 개발자 도구] 사용자 동작을 흉내 내서 콘서트 예매하기 (5) | 2025.05.22 |
[크롬 익스텐션] 직링 구하기 (5) | 2025.05.17 |