Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2019-17147_Practice_Material — 이 리포지토리에는 CVE-2019-17147에 취약한 펌웨어 버전이 포함된 덤프된 플래시 파티션과 WR841N 라우터를 다운그레이드 및 디버깅하는 데 유용한 몇 가지 바이너리가 포함되어 있습니다. | Kitploit
도구/GitHubGitHub/drmnsamoliu/cve-2019-17147_practice_material
Embedded Systems SecurityVulnerability AnalysisExploitationDebuggersHardware HackingBinary AnalysisLearning & EducationFirmware AnalysisLabs & Practice

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
GitHubdrmnsamoliu/cve-2019-17147_practice_material

CVE-2019-17147_Practice_Material

이 리포지토리에는 CVE-2019-17147에 취약한 펌웨어 버전이 포함된 덤프된 플래시 파티션과 WR841N 라우터를 다운그레이드 및 디버깅하는 데 유용한 몇 가지 바이너리가 포함되어 있습니다.

저장소 보기
4144년 전아직 검토되지 않음

CVE-2019-17147_Practice_Material

이 저장소는 CVE-2019-17147에 취약한 펌웨어 버전의 덤프된 플래시 파티션과 WR841N(V14) 라우터를 다운그레이드하고 디버깅하는 데 유용한 몇 가지 바이너리를 포함하고 있습니다.

플래시 칩 파티션 덮어쓰기와 같은 하드웨어 수정에는 위험이 따릅니다. 위험을 평가하고 직접 수행 여부를 결정하십시오.

왜?

ZDI의 게시물: https://www.zerodayinitiative.com/blog/2019/12/2/mindshare-hardware-reversing-with-the-tp-link-tl-wr841n-router-part-2은 제가 정말 시도해보고 배우고 싶은 매우 흥미로운 취약점을 보여주었습니다.
안타깝게도 펌웨어 버전 (US) 0.9.1 4.16 v007c.0 Build 180613 Rel.42415n은(는) 미국 웹사이트에서 이미 내려져 더 이상 다운로드할 수 없습니다.
하지만 저는 ZDI가 악용한 버전보다 더 오래된 펌웨어 버전 (TW) 0.9.1 4.16 v009e.0 Build 180516 Rel.81030n을 실행하는 WR841N을 보유하고 있으며, 동일한 취약점이 여전히 존재합니다.

이 익스플로잇을 재현하는 데 관심이 있는 많은 사람들이 동일한 문제에 직면해 있을 것 같습니다. 즉, 취약한 펌웨어 버전을 실행하는 작동하는 WR841N을 찾을 수 없다는 것입니다.
TW, EU 또는 JP 버전 하드웨어를 사용 중이라면, 180613보다 오래된 펌웨어 버전(즉, 2018/06/13에 빌드된 버전)을 공식 웹사이트에서 다운로드하여 "업그레이드"하는 방식으로 라우터를 다운그레이드하는 것이 여전히 가능합니다.

펌웨어 다운그레이드가 가능하지만, WR841N은 실제로 다른 국가에서 판매되는 하드웨어용 펌웨어를 확인하고 수락하지 않습니다. 따라서 TP-Link가 웹사이트에 취약한 펌웨어 버전을 제공하지 않는 국가(예: 미국)에 거주하는 사람들은 HTTP 서버의 확인을 우회하고 취약한 펌웨어를 장치의 플래시 칩에 직접 작성해야 합니다. 이것이 이 저장소의 주된 목적입니다.

또한 익스플로잇을 디버깅하고 재현하려는 사람들을 위해 WR841N에서 작동하는 정적 busybox와 gdbserver를 크로스 컴파일했습니다.

플래시 파티션 백업

플래시 파티션을 덮어쓰기 전에 현재 파티션을 백업하여 이 취약한 버전으로 작업을 마친 후 라우터를 복원할 수 있도록 해야 합니다.

직렬 콘솔 사용에 이미 익숙하다고 가정하고 하드웨어 부분은 건너뛰겠습니다.

  1. 원하는 머신에 tftp 서버를 설정하십시오.

  2. WR841N 콘솔에서:
    (IP 주소를 tftp 서버의 주소로 바꾸십시오)

root@kitploit:~
~ # cat /dev/mtd0 > /var/WR841N_backup_mtd0_boot.bin
~ # tftp -p -r /var/WR841N_backup_mtd0_boot.bin 192.168.0.100
~ # rm /var/WR841N_backup_mtd0_boot.bin
~ #
~ # cat /dev/mtd1 > /var/WR841N_backup_mtd1_kernel.bin
~ # tftp -p -r /var/WR841N_backup_mtd1_kernel.bin 192.168.0.100
~ # rm /var/WR841N_backup_mtd1_kernel.bin
~ #
~ # cat /dev/mtd2 > /var/WR841N_backup_mtd2_rootfs.bin
~ # tftp -p -r /var/WR841N_backup_mtd2_rootfs.bin 192.168.0.100
~ # rm /var/WR841N_backup_mtd2_rootfs.bin=
  1. binwalk로 .bin 파일을 확인하여 플래시 파티션이 성공적으로 백업되었는지 확인하십시오.


취약한 파티션으로 플래시 파티션 덮어쓰는 방법

WR841N의 플래시 파티션은 다음과 같습니다:

root@kitploit:~
dev:    size   erasesize  name
mtd0: 00010000 00010000 "boot"
mtd1: 000f0000 00010000 "kernel"
mtd2: 002e0000 00010000 "rootfs"
mtd3: 00010000 00010000 "config"
mtd4: 00010000 00010000 "radio"

덮어써야 할 주요 파티션은 rootfs(mtd2)이지만, 안정성을 위해 boot와 kernel도 덮어쓰겠습니다.
config와 radio 파티션은 취약점에 영향을 미치지 않고 잠재적인 법적 문제를 피하기 위해 RF 설정을 건드리고 싶지 않을 것이므로 제공하지 않았습니다.


  1. tftp로 flashcp를 WR841N으로 전송하십시오.

WR841N 셸에서:

root@kitploit:~
~ # cd /var
/var # tftp -g -r flashcp 192.168.0.100
/var # chmod +x flashcp

(물론 IP 주소를 tftp 서버를 실행 중인 머신의 주소로 바꾸십시오.)


  1. TW_wr841N_mtd0_boot_180516.bin을(를) WR841N으로 전송하고 flashcp로 덮어쓰십시오:
root@kitploit:~
/var # tftp -g -r TW_wr841N_mtd0_boot_180516.bin 192.168.0.100
/var # ./flashcp TW_wr841N_mtd0_boot_180516.bin /dev/mtd0
/var # rm TW_wr841N_mtd0_boot_180516.bin

참고: 전송하고 덮어쓰는 파티션의 순서는 중요하지 않지만, **하나씩** 수행하고 모든 .bin 파일을 한 번에 WR841N으로 전송하지 않도록 하십시오.
다음 파일을 전송하기 전에 이미 플래시한 .bin 파일을 제거하십시오. 라우터의 메모리가 매우 제한적이어서 ramfs에 너무 많은 데이터를 전송하면 충돌이 발생합니다!

  1. TW_wr841N_mtd1_kernel_180516.bin을(를) WR841N으로 전송하고 flashcp로 덮어쓰십시오:
root@kitploit:~
/var # tftp -g -r TW_wr841N_mtd1_kernel_180516.bin 192.168.0.100
/var # ./flashcp TW_wr841N_mtd1_kernel_180516.bin /dev/mtd1
/var # rm TW_wr841N_mtd1_kernel_180516.bin

  1. TW_wr841N_mtd2_rootfs_180516.bin을(를) WR841N으로 전송하고 flashcp로 덮어쓰십시오 (이것이 가장 큰 파티션이므로 flashcp가 완료되는 데 시간이 걸립니다):
root@kitploit:~
/var # tftp -g -r TW_wr841N_mtd2_rootfs_180516.bin 192.168.0.100
/var # ./flashcp TW_wr841N_mtd2_rootfs_180516.bin /dev/mtd2
/var # rm TW_wr841N_mtd2_rootfs_180516.bin

  1. 라우터를 재부팅하면 웹 관리 페이지가 모두 번체 중국어로 바뀌고 펌웨어 버전이 0.9.1 4.16 v009e.0 Build 180516 Rel.81030n인 것을 확인할 수 있습니다.



FW

참고 사항

  1. ZDI에서 제공한 PoC는 여기 제공된 펌웨어 버전에서 바로 작동하지 않습니다. 메모리 오프셋이 다릅니다. ZDI의 PoC를 수정하거나 자신만의 익스플로잇을 만들어 보십시오 :)

  2. 모든 바이너리는 buildroot-2021.02.6으로 제가 직접 크로스 컴파일했습니다.

  3. 펌웨어 언어는 크게 영향을 미치지 않아야 합니다. 익스플로잇을 디버깅하고 개발하는 대부분의 작업은 콘솔에서 이루어지기 때문입니다. 하지만 누군가 정말 필요로 하고 요청한다면 취약한 EU 또는 JP 버전에서 플래시 가능한 파티션을 빌드해 볼 수 있습니다.

  4. 말할 필요도 없이, 플래시 칩 파티션 덮어쓰기와 같은 하드웨어 수정에는 위험이 따릅니다. 위험을 평가하고 직접 수행 여부를 결정하십시오.
도구 다운로드