반응형

지금은 문제가 없어졌다.

 

그냥 브포 문제라서 그런 것 같다.

 

저번 해캠때도 비슷한 브포 문제가 있었는데 출제자 분이 동일했던 것으로 기억한다. (제가 아는 분입니다.)

 

 

이번 문제 내용은 이렇다.

 

import random 
import sys 
url= ['h','t','t','p','s',':','/','/','x','x','x', '.' 'x','x','/','1','2','3','4','5','6','7'] 
 #url is https://xxx.xx/XXXXXXX 
 # flag in this site. #guess what !!!! 
random.shuffle(url) 
for i in range(0,21): 
    sys.stdout.write(url[i]) 
    sys.stdout.flush()

 

이렇게 소스 코드 하나 주고, 출력도 주는.....ㄷ....ㅔ??

 

Aㅏ 따로 저장해두지 않았다....

 

 

출력은 저 구해야 되는 url의 문자들이 랜덤으로 배치된 문자열을 준다.

 

url이 https://xxx.xx/XXXXXXX 이와 같은 형태라고 하는데 xxx.xx을 보고

0. 단축 url이다.

1. bit.ly

을 유추해 냈다.

 

출력값에서 h t t p s : / / b i t . l y / 을 빼내면 A B C D E F G가 남게 된다.

(이 문제는 단순 브포에다가 bit.ly에 5000번 정도를 접속을 해야 하기 때문에 그냥 문자를 ABCDEFG로 바꾸었습니다.

외부 공개된 CTF문제에서도 빠진 것을 보면, 굳이 그대로 올리는 건 좋지 않은 것 같았습니다.)

 

저 7개 문자를 가져다가 순열을 만들어서 다 접속해보면 된다.

 

from itertools import permutations
import requests

a = list(permutations(['A','B','C','D','E','F','G']))
url = "https://bit.ly/"

print(len(a))
for i in range(0, 5041): #4967
    print(i)
    b = a[i]
    b = str(b).replace(",", "")
    b = str(b).replace("(", "")
    b = str(b).replace(")", "")
    b = str(b).replace("'", "")
    b = str(b).replace(" ", "")

    d = url + b
    print(d)

    response = requests.post(d)
    print(response)

 

0. 200 응답만 오는 걸 출력하도록 조건문을 추가하는 것이 더 좋다.

1. 돌리다 보면 request에서 오류가 나는 경우가 있는데, 해당 url 다음 번째부터 다시 코드를 돌려주면 된다.

2. 코드가 잘 돌다가 어느 순간부터 403으로만 응답이 오면 bit.ly로 부터 차단된 것이다. 몇 분 기다렸다가 다시 시도해 c주어야 한다.

 

CTF때, url 하나 접속하고 응답받는데 약 2초정도 걸렸었다. 혼자 돌리는 건 매우 오래걸릴 것 같아서 팀원 2명과 같이 범위를 나누어서 돌렸었는데, 그 중 한분이 구글 콜라보레이터를 알려주시면서 빠르게 코드를 돌릴 수 있었다.

 

4000개쯤 시도했을 때... 이거 다 돌려도 안나오면 어떡하지 라는 걱정을 했었는데 결국 4967번째에서 찾을 수 있었다.

(뒤에서부터 돌릴걸 그랬다.)

반응형

+ Recent posts