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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

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

MIPS-CVE-2014-9222

Zyxel 라우터 펌웨어와 MIPS 아키텍처를 파헤치며 재미를 느껴보자

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

면책 조항

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

요구 사항

$ IDA Pro +7.0 (you can use Radar2 since IDA is quite expensive)
$ Router running Rompager 4.07 : there're immense number of them such as 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 >

이 펌웨어에는 동적 분석에 매우 유용한 숨겨진 명령어 세트가 있습니다. 문제는 레지스터를 볼 수도 없고 중단점(breakpoint)을 설정할 수도 없다는 것입니다. 하지만 다행히도 이러한 숨겨진 명령어를 사용하면 그 기능을 사용할 수 있습니다. 이를 확인하고 사용하려면 __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

가장 먼저 떠오르는 것은 디스패치 테이블(dispatch table)을 찾는 것입니다. 왜일까요? 단지 직관입니다. 유일한 대안은 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

도구 다운로드