너도 해봤을걸?
이 공격은 대한민국 전 국민이라면 한 번씩은 해본 공격이라고 말해도 무관하다.
한 번쯤은 친구 핸드폰, 노트북이나 컴퓨터를 열기 위해서 비밀번호를 아무거나 입력했던 기억이 있을 것이다. 이게 바로 brute force attack이다.
혹시 그때 0001, 0002 이런 게 아니라 1111, 2580,1234 이런 식으로 해봤으면 당신은 dictionary attack을 한 엄청난 해커이다!!!
그래서 이게 뭔데?
윗글을 읽고 이미 이해했을 거라 본다. 그래도 설명을 해보면,
brute force attack은 무차별 대입 공격이다.
dictionary 은 자주 사용하는 문자열부터 우선적으로 보내는 공격이다.
끝
웹 해킹 공격 중에서 가장 쉽고 간단한 공격인 것 같다.
물론 대응 수준이 높아질수록 공격도 어려워진다.
직접 공격하기
이 공격을 하기 위해 우리는 burp suite과 python을 사용할 것이다.
코딩을 잘하면 python 사용하고 나처럼 코딩을 못하면 burp suite를 사용하면 된다.
공격은 드림핵의 session 문제에 해보겠다.
문제링크 : https://dreamhack.io/wargame/challenges/266/
주요 코드 분석
if __name__ == '__main__':
import os
session_storage[os.urandom(1).hex()] = 'admin'
print(session_storage)
app.run(host='0.0.0.0', port=8000)
음... 세션 스토리지에 hex값 한자리 수를 랜덤으로 설정하고 그 값을 admin으로 설정하는 코드이다.
일단 burp suite로 해당 로그인 사이트로 접속해보자
guest로 로그인을 하고, forward 하면,
sessionid가 나왔다. 이제 이 패킷을 intruder에 보낸다.
sessionid를 add 하고, payload에서
brute force로 하고 길이는 2글자, 16진수니 123456789 abcedf로 설정했다.
공격 시작!~!! 1!@~!~!~#@$^%#@@!#$%^&%$#@
오오 모든 payload를 다 요청하고 보니 혼자서 길이가 1505인 응답이 있었다!!
바로 벗겨보니
그냥 바로 admin으로 로그인하고 flag가 나왔다!
대응책
CAPTCHA
CAPTCHA를 사용해 로봇인지 사람인지 구분하는 방법이 있다.
하지만 캡챠도 해킹할 수 있으니 완벽한 대응책이 아닌 것 같다...
시간 지연
sleep 넣는 방법도 있다. 한번 로그인할 때 틀릴 때마다 2초씩 기다리고 응답을 보내준다.
하지만 이 방법도 몇 초 동안 아무런 응답도 없으면 틀렸다고 가정하고 다시 보내면 된다.
이 방법도 완벽한 대응책이 아닌 것 같다.
2차 인증
일단 다른 방법으로 1차적으로 막고, 혹시 로그인에 성공해도 2차 인증을 넣어서 대응할 수 있다.
이 방법은 거의 완벽하다고 생각한다.
blocking
5번 정도 틀리면 그냥 로그인 시도 자체를 못하게 막아버릴 수 도 있다.
공격은 완벽하게 막을 수 있을 것 같다.
review
사실 딕셔너리랑 파이썬 requests 사용해서 하는 것도 쓰려고 했는데 너무 길어질 것 같아서 버프스위트만 작성했다.
이걸 write up인지 개념 설명인지 모르겠지만 읽는 사람도 나도 많은 도움이 되었으면 좋겠다!
다음은 command injeciton으로 작성하겠다!
'web hacking' 카테고리의 다른 글
HTML/CSS Injection (0) | 2023.07.28 |
---|---|
정보빼가는 SQLi 와 SQLMAP (0) | 2023.07.24 |
SSTI띠띠리리~~ (0) | 2023.07.21 |
command injection (0) | 2023.07.18 |
그냥 XSS는 재미가 없잖아? (XSS filtering bypass) (2) | 2023.07.16 |