본 내용은 인프런 무차별 대입 공격(bruteforce attack) with Python 강의를 수강하고 쓴 글입니다.
출처 바로가기
써니나타스 에 있는 id와 pw를 맞추는 문제를 푸는 실습을 해보도록 하자.
(출처 : 써니나타스 challenges 8번 문제)
[Challenges 8]
F12를 눌러 개발자도구에 들어가니 다음과 같다 (혹은 CTRL+U)
① Hint를 살펴보니 admin이라는 아이디의 패스워드를 찾아보라고 한다. 패스워드는 0~9999 사이라고 한다.
② ID 쓰는 창과 비밀버호를 쓰는 창에서 받는 값을 name="id"와 name="pw"로 되어있다.
👉 전 게시물에서 id와 pw를 구할때 name을 어떻게하냐에 따라 로그잇 패킷에서의 지칭이 달라질 수 있다. 만약 name="ID", name="PW" 였다면 로그인 패킷은 다음과 같다.
(①에서 id는 admin으로 되어있다는 걸 확인했으므로 admin으로 설정한다.)
로그인패킷={
'ID' : 'admin',
'PW' : pw, #마지막에도 콤마 잊지말기
}
③ 공격하는 주소를 해당 문제 URL로 변경해준다. 그리고 로그인이 실패되었을 땐 Password Incorrect! 로 뜨게 되니, if문도 변경해준다.
돌리다가 과부하가 걸렸는지 다음과 같은 화면이 뜨게 되었다😒
구글링해보니 보통 프로그램을 이용해서 따로 돌리는 것같은데.. 이렇게 과부하가 걸리는 이유때문이였나
그래서 그냥 패스워드가 4 자리라고 가정하고 for 패스워드길이 in range(4,5) 로 해놓고 코드를 돌려보았다
수차례 시도와 많은 인내끝에 결국 패스워드를 구했다.
7707에서 멈췄으니, 패스워드는 7707이라는것을 구할 수 있었다.
id에 admin과 pw에 7707를 입력하면 다음과 같은 창이 뜨게 된다.
ⓐ bruteforce attack (무차별 대입 공격)
가능한 모든 경우의 수를 대입하는 것. (앞에 계속 게시물에 코드를 진행한 것을 본 것과 같이 for문을 통해 0~9999까지 모든 수를 대입해서 패스워드를 구했다)
ⓑ dictionary attack (사전 대입 공격)
초반에 많이 쓰이는 방법이다. 이 방법을 사용하다 안되면 무작위 순차 대입을 사용한다.
👉 자주 쓰는 패스워드가 존재하기 때문에, 해커들이 그것들을 모아 하나의 txt 파일로 만들어 사용한다고 함.
ⓒ rainbow table attack(레인보우 공격)
👉 패스워드 크래킹할때 주로 사용.
👉 패스워드는 길이가 정해져있기 때문에 무차별 대입을 한 후, 해시값과 본래 값과 맞는 문자들을 조합하여 패스워드를 찾아낸다. (bruteforce 공격을 뒷받침 해주기도 한다 함)
이러한 공격들이 존재하기 때문에 길고 복잡하며, 유추하기 어려운 패스워드를 사용하는 것을 사용자에게 권장한다. 기업에게는 로그인 시도횟수 제한, 패스워드 규칙, 다중 인증 등을 권장함.