본문 바로가기
프로그래밍/컴알못 공부

컴알못의 사이트 정보 수집

by Lihano 2022. 1. 3.
반응형

웹 해킹 책을 샀는데 적을 알아야 전쟁에서 승리할 수 있다고 합니다.

즉, 상대의 정보를 파악하는게 해킹의 첫걸음이랍니다.

정보를 수집하는 방법은 다양하지만 우선 whois를 사용하는 방법이 있습니다.

 

웹사이트들은 도메인을 등록할 때 정보를 제공해야하는데 그 정보를 열람할 수 있는게 바로 whois입니다.

pip install pyhton-whois

파이썬 모듈도 있으니 설치해서 사용가능합니다.

import whois

information = whois.whois(url or ip)

사용 방법도 비교적 간단합니다. whois 함수에 url 혹은 ip 같이 탐색가능한 정보를 넘겨주면 정보를 조회할 수 있습니다.

 

그리고 정보 수집을 위해서 스캐너를 구현해볼 수도 있습니다.

제가 말하는 스캐너가 하는 역할은 해당 도메인의 리소스를 탐색하는 일을 합니다.

만약 사이트에 접속했을 때 버튼이나 링크 같은 것들을 클릭해 해당 사이트의 다른 page로 이동할 수 있을겁니다.

이런 page들로 이동가능한 링크들을 수집하는 것도 정보 수집입니다.

 

로직은 간단합니다.

스캔하고 싶은 사이트에 http get 요청을 보내서 html 소스를 response로 받는다.

=> html 정보를 BeautifulSoup 같은 구문분석 기능으로 분석하여 a 태그만 따로 추출한다.

=> a 태그의 집합에서 href 속성이 가르키는 url을 추출한다.

import requests
from bs4 import BeautifulSoup, SoupStrainer

response = requests.get(domain)
content = response.content

results = set()
links = BeautifulSoup(content, features="html.parser", parse_only=SoupStrainer("a"))

for link in links :
	href = link["href"]
    if domain not in path and href != "http" :
    	results.add(domain + href)
    else :
    	results.add(href)

이런 식으로 간단하게 구현해봤습니다. domain을 통해서 해당 사이트의 main 화면의 html 소스를 받아올테고 그 메인 화면에서 이동 가능한 페이지들의 url을 수집했습니다.

 

메인화면에서 수집한 다른 page들의 링크들을 수집한 뒤, 다시 수집한 링크들에 같은 로직을 반복하여 더 많은 링크들을 얻어올 수 있습니다. 메인 화면에서 이동한 페이지에서 메인 화면에 없는 새로운 링크들을 만날 수도 있으니까요.

 

이런 로직을 구현할 때는 수집한 href 속성이 가르키는 곳이 page의 링크인지 단순 리소스인지 구분할 필요가 있습니다.

if (
	path.startswith("#")
    or path.startswith("javascript")
    or path.startswith(".jpg")
    or path.startswith(".png")
    or path.startswith(".css")
    or path.startswith(".js")
) :
	continue

이런 식으로 만약 href가 가르키는 곳이 jpg나 png라면 그건 웹 페이지가 아니라 단순한 페이지 자원이기 때문에 수집 대상에서 제외시켜줘도 된다는 뜻입니다.

 

오늘은 몸 컨디션이 안좋아서 여기까지만 적습니다.

이만.

 

출처 : 파이썬 해킹 레시피 - YES24

반응형

댓글