Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
MIPS-CVE-2014-9222 — Zyxel 라우터 펌웨어와 MIPS 아키텍처를 파헤쳐 보며 재미를 느껴보세요. | Kitploit
도구/GitHubGitHub/donfanning/mips-cve-2014-9222
Embedded Systems SecurityVulnerability AnalysisExploitationReverse EngineeringHardware HackingBinary AnalysisLearning & EducationFirmware Analysis
GitHubdonfanning/mips-cve-2014-9222

MIPS-CVE-2014-9222

Zyxel 라우터 펌웨어와 MIPS 아키텍처를 파헤쳐 보며 재미를 느껴보세요.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

면책 조항

이 튜토리얼은 정보 제공 및 교육 목적으로만 제공됩니다. 저는 윤리적 해킹, 정보 보안 및 사이버 보안이 디지털 정보와 컴퓨터를 사용하는 모든 사람에게 친숙한 주제여야 한다고 믿습니다. 저는 해커로부터 자신을 방어하려면 해킹이 어떻게 이루어지는지 알아야 한다고 생각합니다.

요구 사항

$ IDA Pro +7.0 (IDA가 비싸므로 Radar2를 사용할 수 있습니다)
$ Rompager 4.07을 실행하는 라우터: TP-Link TD-W8951*, ZyXEL P-660R, Billion BiPAC 51**/52** 등 엄청나게 많습니다.
$ UART to USB

Misfortune cookie 취약점은 꽤 오랫동안 알려져 왔지만, 공개적으로 취약점의 기술적 세부 사항을 설명하는 분석은 여전히 부족합니다. Check Point에 따르면 영향을 받는 소프트웨어는 AllegroSoft의 임베디드 웹 서버 RomPager입니다. 인터넷 전체 스캔 결과 RomPager는 사용 가능한 엔드포인트 수 측면에서 세계에서 가장 인기 있는 웹 서버 소프트웨어일 가능성이 높습니다. RomPager는 일반적으로 장치와 함께 출시되는 펌웨어에 내장됩니다. 이 특정 취약점은 2002년에 코드 베이스에 도입되었습니다. 또한 노출된 장치는 버전 4.34 이전(특히 4.07)의 RomPager 서비스를 사용하는 장치입니다.

이 튜토리얼에서는 Rompager 4.07을 사용하는 ZXHN H108L을 사용하겠습니다.

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="ZXHN H108L"
Content-Type: text/html
Transfer-Encoding: chunked
Server: RomPager/4.07 UPnP/1.0
EXT:

이제 시리얼 포트를 사용해 보겠습니다. 먼저 Baud rate를 결정해야 합니다.

$ sudo stty -F /dev/ttyUSB0

출력 :

speed 115200 baud; line = 0;
-brkint -imaxbel

device

저는 __minicom__을 사용합니다. __screen__에서 __HyperTerminal__까지 무엇이든 사용할 수 있지만 안정성 때문에 이걸 선호합니다 ;)

먼저 __하드웨어 흐름 제어(Hardware Flow Control)__를 비활성화해야 합니다.

$ sudo minicom -s
    +-----------------------------------------------------------------------+
    | A -    Serial Device      : /dev/modem                                |
    | B - Lockfile Location     : /var/lock                                 |
    | C -   Callin Program      :                                           |
    | D -  Callout Program      :                                           |
    | E -    Bps/Par/Bits       : 115200 8N1                                |
    | F - Hardware Flow Control : No                                        |
    | G - Software Flow Control : No                                        |
    |                                                                       |
    |    Change which setting?                                              |
    +-----------------------------------------------------------------------+
            | Screen and keyboard      |
            | Save setup as dfl        |
            | Save setup as..          |
            | Exit                     |
            | Exit from Minicom        |
            +--------------------------+

이제 준비가 되었습니다:

$ sudo minicom -D /dev/ttyUSB0 -b 115200
Bootbase Version: VTC_SPI1.26 |  2012/12/26 16:00:00    
RAM: Size = 8192 Kbytes
Found SPI Flash 2MiB GD25Q16 at 0xbfc00000
SPI Flash Quad Enable
Turn off Quad Mode

RAS Version: ZXHN H108LV4.0.0a_ZRQ_MA                                          
System   ID: $2.12.162.0(G94.BY.2)3.20.19.0| 2014/03/21   20140321_v006  | 2014 

Press any key to enter debug mode within 3 seconds.
..........

가능한 명령어를 표시하려면:

$ ATHE

======= Debug Command Listing =======
AT          just answer OK
ATHE          print help
ATBAx         change baudrate. 1:38.4k, 2:19.2k, 3:9.6k 4:57.6k 5:115.2k
ATENx,(y)     set BootExtension Debug Flag (y=password)
ATSE          show the seed of password generator
ATTI(h,m,s)   change system time to hour:min:sec or show current time
ATDA(y,m,d)   change system date to year/month/day or show current date
ATDS          dump RAS stack
ATDT          dump Boot Module Common Area
ATDUx,y       dump memory contents from address x for length y
ATRBx         display the  8-bit value of address x
ATRWx         display the 16-bit value of address x
ATRLx         display the 32-bit value of address x
ATGO(x)       run program at addr x or boot router
ATGR          boot router
ATGT          run Hardware Test Program
ATRTw,x,y(,z) RAM test level w, from address x to y (z iterations)
ATSH          dump manufacturer related data in ROM
ATDOx,y       download from address x for length y to PC via XMODEM
ATTD          download router configuration to PC via XMODEM
ATUR          upload router firmware to flash ROM

< press any key to continue >

이 펌웨어에는 동적 분석에 매우 유용한 숨겨진 명령어 세트가 있습니다. 문제는 레지스터를 볼 수 없고 중단점을 설정할 수 없다는 것입니다. 하지만 다행히도 이러한 숨겨진 명령어를 사용하면 해당 기능을 사용할 수 있습니다. 이를 보고 사용하려면 __ATEN__을 사용해야 합니다. 그러나 이 명령어는 비밀번호가 필요합니다. 그럼 어떻게 해야 할까요? 펌웨어를 리버스 엔지니어링하여 비밀번호 생성기의 알고리즘을 찾아봅시다.

(정적 분석) 먼저 펌웨어 파일을 살펴보겠습니다:

$ binwalk ras

binwalk1

$ dd if=ras of=rom1.lzma bs=1 skip=85043 count=66696
$ dd if=ras of=rom2.lzma bs=1 skip=350259 count=3350556
$ lzma -d <rom1.lzma> rom1
$ lzma -d <rom2.lzma> rom2

이제 추출된 파일에서 시그니처를 살펴보겠습니다:

$ binwalk -Y rom1
DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             MIPS executable code, 32/64-bit, big endian, at least 1250 valid instructions

__string__은 바이너리 파일이 무엇인지 또는 무엇을 포함하는지 파악하는 훌륭한 도구입니다. 비밀번호 알고리즘을 찾을 수 있는지 확인해 봅시다:

$ strings rom1 | grep -i aten
$ strings rom2 | grep -i aten

분명히 펌웨어가 여전히 압축되어 있어서 볼 수 없습니다. 즉, 디버깅 모드를 사용하여 라우터에서 덤프해야 합니다:

$ ATDO bfc00000, 1f0000

xmodem

가장 먼저 떠오르는 것은 디스패치 테이블을 찾기 시작하는 것입니다. 이유는? 직관일 뿐입니다. 유일한 대안은 if-elif이지만 매우 긴 집합일 것입니다. 사용자가 제공한 비밀번호의 유효성을 확인하기 위한 것입니다. 다음은 제가 찾은 내용입니다:

ROM:800158A0 CmdTable:       .word unk_80015C20       # DATA XREF: sub_8000E3D8+4Co
ROM:800158A0                                          # sub_8000E3D8+90o ...
ROM:800158A4                 .word sub_8000E6D0
ROM:800158A8                 .byte    0
ROM:800158A9                 .byte    0
ROM:800158AA                 .byte    0
ROM:800158AB                 .byte    0
ROM:800158AC                 .word aJustAnswerOk      # "          just answer OK"
ROM:800158B0                 .word aAthe              # "ATHE"
ROM:800158B4                 .word CMD_SHOW_HELP_ATHE
ROM:800158B8                 .byte    0
ROM:800158B9                 .byte    0
ROM:800158BA                 .byte    0
ROM:800158BB                 .byte    0
ROM:800158BC                 .word aPrintHelp         # "          print help"
ROM:800158C0                 .word aAtba              # "ATBA"
ROM:800158C4                 .word CMD_ATBA
...
ROM:800158D0                 .word aAten              # "ATEN"
ROM:800158D4                 .word CMD_ATEN

MIPS 단어는 4바이트라는 점을 기억하세요. 이제 __CMD_ATEN__을 살펴보겠습니다:

ROM:8000FF84                 lw      $a0, 8($s0)
ROM:8000FF88                 jal     sub_80013654
ROM:8000FF8C                 li      $a1, 0
ROM:8000FF90                 jal     passwd_generator

그리고 이제: passwd_generator

도구 다운로드