인프런 커뮤니티 질문&답변

tyler.gweon님의 프로필 이미지
tyler.gweon

작성한 질문수

무차별 대입 공격(bruteforce attack) with Python

POST 요청 데이터 파싱

코드가 이상하게 실행돼요 ㅜㅜ

작성

·

378

0

# 서버측 코드 server.py
from http.server import HTTPServer, BaseHTTPRequestHandler
import urllib.parse as parse


class ServerHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('content-type', 'text/html')
        self.end_headers()
        self.wfile.write('<p>hello world</p>'.encode())
        self.wfile.write(self.path.encode())
        self.wfile.write('<br>'.encode())
        if '?' in self.path:
            self.wfile.write(str(self.path.split('?')[1].split('&')).encode())
            print(parse.parse_qsl(self.path.split('?')[1].encode()))
            print(dict(parse.parse_qsl(self.path.split('?')[1].encode())))


    
    def do_POST(self):
        pass



PORT = 8080
server = HTTPServer(('', PORT), ServerHandler)
print(f"서버가 {PORT}으로 서비스 되고 있습니다.")
server.serve_forever()
# 브루트포스 코드
# import itertools
import requests

로그인패킷 = {
    'id': 'hojun',
    'pw': '1234',
}

address = requests.get('https://127.0.0.1:8080/?id=hojun&pw=1234')

# 문자열 = '0123456789'

# for 패스워드길이 in range(1, 5):
#     for password in itertools.product(문자열, repeat=패스워드길이):
#         print(password)
#         print(''.join(password))

여기서 문제가 어딘지 하나도 모르겟습니다 ㅠ

127.0.0.1 - - [05/Jan/2024 17:53:47] "\x16\x03\x01\x02\x00\x01\x00\x01ü\x03\x03üiQ\x89\x03\x14ðw`ÕéKÔ\x955\\\x0d°\x9e \x1b\x87¦½'°ß´üT¯+ ý:FþYrTJðøþ\x99;Æ®§®Å-\x05M3EEà\x06õ"\x9c½ý_\x00$\x13\x02\x13\x03\x13\x01À,À0À+À/̨̩À$À(À#À'\x00\x9f\x00\x9e\x00k\x00g\x00ÿ\x01\x00\x01\x8f\x00\x0b\x00\x04\x03\x00\x01\x02\x00" 400 -
서버측에선 이렇게 뜨구 400 이라니까 오류인가요?

 

브루트포스 코드에선

(여기 파일 있었음), line 73, in get
    return request("get", url, params=params, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 line 59, in request
    return session.request(method=method, url=url, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
, line 589, in request
    resp = self.send(prep, **send_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  , line 703, in send
    r = adapter.send(request, **kwargs)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 line 517, in send
    raise SSLError(e, request=request)    
requests.exceptions.SSLError: HTTPSConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /?id=hojun&pw=1234 (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1006)')))

이러는데 어떻게 해야하나요? ㅠ

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

tyler.gweon님, 제시하신 코드와 관련된 실행 오류에 대해 답변드리겠습니다.

에러 메시지를 살펴보면, 브루트포스 코드에서 requests.get을 사용하여 HTTPS 접속을 하려고 했지만, 서버측 코드인 server.pyHTTP 서버로 설정되어있어 발생한 문제로 보입니다.

HTTPSHTTP는 서로 다른 프로토콜이며, 보안 계층인 SSL/TLS에 대한 설정이 추가로 필요한데, 여기서 서버 코드는 HTTP만을 처리하도록 되어있습니다. 따라서 브루트포스 코드에서 서버에 접속할 때 HTTPS 대신 HTTP를 사용해야 합니다.

따라서 브루트포스 코드에서 address 변수에 할당된 URL을 https://127.0.0.1:8080/?id=hojun&pw=1234에서 http://127.0.0.1:8080/?id=hojun&pw=1234로 변경해주세요. httpshttp로 바꾸는 것이 중요합니다.

또한 서버측 코드에서 400 에러는 클라이언트의 요청이 서버에서 처리할 수 없을 때 발생하는 HTTP 응답 코드입니다. 이 경우 SSL/TLS 핸드셰이크 실패 때문에 해당 에러가 발생했을 가능성이 높습니다.

요약하자면, 브루트포스 코드에서 requests.get 함수를 사용할 때, https://가 아닌 http://를 사용하여 서버에 접속해보시길 권장드립니다.

tyler.gweon님의 프로필 이미지
tyler.gweon

작성한 질문수

질문하기