0. 크롤링을 위한 사이트 분석
Selenium을 사용하기 위한 작업과 Slack bot 설정을 모두 마쳤으니 이제는 크롤링을 할 대상을 파악할 단계입니다. IP정보를 크롤링 해올 C-TAS 홈페이지는 로그인이 필요하기 때문에 먼저 로그인 페이지에 대한 분석을 먼저 시작합니다. 개발자 도구에서 확인해보니 "idPWWrap"이라는 div에서 userId와 userPassword에 각각 아이디와 패스워드를 입력받고 있습니다.
request 요청에서도 주의깊게 살펴볼 부분은 없어보이기 때문에 간단한 파이썬 코드를 작성해 로그인 테스트를 해봅니다.
1. 로그인 테스트
다음과 같은 파이썬 코드를 실행하면 안타깝게도 유효하지 않은 접근으로 차단이 되는 것을 확인할 수 있습니다.
import requests
from fake_useragent import UserAgent
url = "https://ctas.krcert.or.kr/index"
login_info = {
"userId": "",
"userPassword": ""
}
headers = {
'User-agent': UserAgent().chrome,
'Referer' : 'https://ctas.krcert.or.kr/index',
}
with requests.session() as s:
res = s.post(url, login_info, headers=headers)
print(res.content.decode('UTF-8'))
크롤링을 방지하기 위한 조치가 적용되어 있거나 제가 놓친 부분 때문에 정상적으로 로그인이 되지 않는 것으로 생각됩니다. 빠르게 도구를 만들기 위해 추가적인 분석보다는 Selenium을 활용해 문제를 우회하는 방법을 선택했습니다.
2. Selenium 활용
다음과 같이 파이썬 코드를 작성하면 간편하게 로그인이 성공하는 것을 확인할 수 있습니다.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=chrome_options)
driver.get("https://ctas.krcert.or.kr/index")
driver.find_element(By.NAME, 'userId').send_keys('c-tas_ID')
driver.find_element(By.NAME, 'userPassword').send_keys('c-tas_PASS')
driver.find_element(By.CLASS_NAME, 'btn_login').click()
3. 위협IP 파일 다운로드 분석
CSV 파일을 다운로드하는 request 헤더 값에서 규칙성을 발견할 수 있습니다. date 필드의 값만 수정하면 수고스럽게 xpath를 일일히 찾아서 파싱하지 않아도 될 것이라는 강력한 확신이 드는데요.
해당 URL 그리고 date 값을 변조한 URL을 웹브라우저에서 직접 호출하니 CSV 파일이 정상적으로 다운로드됨을 확인했습니다. 일종의 URL 변조 취약점을 활용한 것인데요. 이렇게 수집한 정보를 기반으로 본격적인 파이썬 스크립트 작성을 시작할 수 있습니다.
'etc' 카테고리의 다른 글
Keycloak 구축 및 AWS SAML 연동 (0) | 2023.06.18 |
---|---|
C-TAS에서 위협 IP를 자동으로 수집해 슬랙으로 전송하기 - (4) 자동화 스크립트 (0) | 2023.04.24 |
C-TAS에서 위협 IP를 자동으로 수집해 슬랙으로 전송하기 - (2) Slack bot 생성 및 권한 부여 (0) | 2023.04.21 |
C-TAS에서 위협 IP를 자동으로 수집해 슬랙으로 전송하기 - (1) Selenium 설치 (0) | 2023.04.21 |
C-TAS에서 위협 IP를 자동으로 수집해 슬랙으로 전송하기 - (0) 계기 (0) | 2023.04.21 |