최신 취약점 CVE List 크롤링 ,
웹 파싱 or 웹 크롤러 만들기 - 1탄
개인적으로 공부할 것이 있어서 취약점을 나타내는 CVE 코드를 긁어와야하는 경우가 생겼다. 다양한 CVE 리스트를 제공하는 회사가 많아서 아무거나 선택을 하면 되었다. CVE 리스트를 긁어오기 위한 페이지로 CVEProject를 선택했다.
한 번 가져오고 땡이 아니어서 실시간으로 업데이트가 되는 내역이 필요했기 때문에 웹 파싱을 하기로 하였으며, 개발자가 아니다보니 아주 코드가 난잡하겠지만 크게 문제가 되지 않는다. 개발을 정식으로 배운게 아니라 취미로 하다보니까 엉망진창일 예정이며, 이력 관리 차원에서 포스팅을 쓴다고 봐주시면 될 것 같다.
2018년도 경로에는 다양한 CVE가 존재한다. CVE는 보통 CVE-2018(연도)-xxxxx 로 이루어져 있는데 하나의 폴더에 데이터를 다 넣어두면 꽤나 관리하기 어렵기 때문에 아래와 같이 진행해둔 것 같다. 가져다가 쓰는 입장에서 어떻게 이루어져 있느냐가 중요하진 않다.
상기 그림에서 빨간색 상자의 리스트를 긁어와야하는데 아래와 같이 title로 묶여있다. BeautifulSoup을 배우기 전 정규 표현식으로 데이터를 쪼개는 것을 먼저 배웠기 때문에 re.compile을 사용하여 원하는 데이터를 가져오려 한다.
class="js-navigation-open Link--primary" title="1000xxx" data-pjax="
보통 숫자 + x로 이루어져 있으며, title과 data-pjax 사이에 존재한다. 정규표현식을 작성해서 친구들을 데려와보자.
title=\"\d+x+\"\sdata-pjax
위에 내용을 정리해서 코드로 작성하였다. requests 모듈을 사용해서 get으로 정보를 받아오고, 해당 정보 중 title에 CVE code가 들어간 친구들을 가져온다. 그러면 아래 결과처럼 문제 없이 CVE 코드의 Sub 항목을 가져올 수 있다.
2018/0xxx 경로, 또한 모든 경로는 CVE-2018-xxxx.json으로 이루어져있다. 그렇기 때문에 좀 더 편하게 작업할 수 있을 것 같았다. 이 친구들만 잘 긁어오면 최종 컨텐츠 경로를 무사히 얻어올 수 있다고 생각했다.
json 파일의 title은 아래와 같은 문자열로 되어있다. 또한 연도는 4바이트로 고정이지만 뒤에 숫자는 최소 4바이트 이상으로 구성되어있기 때문에 그 이상도 탐지할 수 있는 정규 표현식으로 만들면 끝.
Link--primary" title="CVE-2018-0001.json" data-pjax=
아래 정규표현식은 2018로 하드 코딩 하였지만, 실제로는 연도의 변수 값을 받아와 입력할 예정이다. 뒤에 숫자는 최소 4바이트 이상을 탐지할 수 있도록 정규표현식을 구성하여 마무리 한다.
title=\"CVE-2018-\d{4,}\.json"\sdata-pjax
잘 표현이 된다. 이제 경로는 연도 + 서브 경로 + json 파일명으로 구성이 되기 때문에 내부 데이터를 가져오는 것은 큰 문제가 없을 것 같다. 이제 json 모듈 사용법을 좀 알고나서 내가 필요한 것들만 가져오도록 하는 코드를 짜봐야겠다.
'유부남의 이것저것 > IT' 카테고리의 다른 글
[Python3] 파이썬 MySQL pymysql DB 데이터 '추가(INSERT)' 예제 샘플 (간단) (0) | 2022.07.19 |
---|---|
[python3] 리눅스에서 '파이썬 pip 패키지를 찾을 수 없습니다' 간단하게 해결하기 (0) | 2022.07.19 |
[엑셀] 셀 글자/문자 구분에 따라 색 채우기 (조건부 서식/구글 스프레드시트) (1) | 2022.07.12 |
[엑셀] countif, 셀 안에 같은 글자 몇 개인지 계산하기 (구글 스프레드시트) (0) | 2022.06.23 |
[엑셀] 구글 스프레드시트 개인별 시트 보호 권한 부여하기 (0) | 2022.06.20 |