지금은 문제가 없어졌다.
그냥 브포 문제라서 그런 것 같다.
저번 해캠때도 비슷한 브포 문제가 있었는데 출제자 분이 동일했던 것으로 기억한다. (제가 아는 분입니다.)
이번 문제 내용은 이렇다.
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번째에서 찾을 수 있었다.
(뒤에서부터 돌릴걸 그랬다.)
'CTF Write Up' 카테고리의 다른 글
THE HACKING CHAMPIONSHIP JUNIOR 2019 FINAL Write-up (0) | 2019.12.10 |
---|---|
Timisoara CTF 2019 Quals Write-up (0) | 2019.09.19 |
20회 Hackingcamp CTF Forensics [흔적을 남기다] 풀이 (1) | 2019.08.25 |
YISF 2019 본선 풀이 (0) | 2019.08.19 |
제17회 YISF 2019 예선 write-up (0) | 2019.08.14 |